doc: 阅读mysql group replication文档
This commit is contained in:
53
mysql/mysql集群/Mysql Group Replication.md
Normal file
53
mysql/mysql集群/Mysql Group Replication.md
Normal file
@@ -0,0 +1,53 @@
|
||||
- [Mysql Group Replication](#mysql-group-replication)
|
||||
- [Group Replication Background](#group-replication-background)
|
||||
- [Replication Technologies](#replication-technologies)
|
||||
- [group replication](#group-replication)
|
||||
|
||||
|
||||
# Mysql Group Replication
|
||||
`Mysql Group Replication`可以用于创建弹性、高可用、有容错的replication拓扑。
|
||||
|
||||
groups可以在single-primary mode下进行执行,其支持自动的primary选举,在同一时刻只有一个server接收更新操作。
|
||||
|
||||
另外,groups也支持multi-primary mode部署,此时所有servers都能够接收写操作,即使多个写请求是并行发送的。
|
||||
|
||||
MGR存在一个内置的group membership service,其在任一时刻都能为所有servers提供一致且可用的组视图。server可以加入和离开group,group view也会随之改变。在某些时刻,server可能非预期的离开group,在这种情况下failure detection机制将会自动感知并通知group去更新group view。
|
||||
|
||||
group replication是作为mysql server的插件被提供的。可以通过Innodb Cluster来部署`mysql server instances group`。
|
||||
|
||||
> 为了部署多个mysql实例,可以使用Innodb Cluster,其能够通过Mysql Shell轻松的管理mysql server实例组。Innodb Cluster和Mysql Router无缝集成,在应用连接到集群式,无需在应用中编写failover流程。
|
||||
|
||||
## Group Replication Background
|
||||
创建有容错性系统的最常用方式是`采用冗余组件的方案`,即使组件被移除,系统仍可按预期继续运行。这样将会增加系统的复杂性,特别的,`replicated databases`必须维护和管理多台server;并且,servers以集群的方式对外提供服务,还需要处理其他若干的经典分布式系统问题:如network partition或split brain问题。
|
||||
|
||||
mysql group replication提供了distributed state machine replication,并保证了servers间的强协同;server在作为同一group的一部分,会自动的彼此之间进行协调。
|
||||
|
||||
对于待提交的事务,majority of group必须就`事务在global transactions中的顺序`达成一致。决定事务commit或abort是由每个server单独处理的,但是所有server中,该事务提交/回滚状态都完全一致。如果存在network partition,导致members不能就transaction order达成一致,那么系统将不能继续处理,直至该问题被解决。故而,MGR中存在内置、自动的split-brain保护机制。
|
||||
|
||||
上述所有内容都由`GCS`(Group Communication System)协议提供,其提供了如下内容
|
||||
- 故障检测机制
|
||||
- group membership service
|
||||
- safe and completely ordered message delivery
|
||||
|
||||
上述所有机制都保证了数据在group of servers之间能够被一致的复制。GCS技术的核心基于`Paxos`算法实现,其用作group communication engine。
|
||||
|
||||
### Replication Technologies
|
||||
传统的mysql replication提供了一种简单的`source to replica`的复制方法:
|
||||
- source为primary实例
|
||||
- replica为secondaries实例
|
||||
|
||||
source将会应用事务,并对事务进行提交。之后,事务会异步的被发送到replicas,接收到事务的replica会对事务进行重新执行(statement-based replicaion)或被应用(row-based replication)。在默认情况下,所有的server都拥有数据的完整副本。
|
||||
|
||||
默认情况下,mysql的异步replication示例图如下:
|
||||
|
||||
<img src="https://dev.mysql.com/doc/refman/8.4/en/images/async-replication-diagram.png" style="width: 100%; max-width: 725px;">
|
||||
|
||||
除此之外,还存在半同步的replication,其在协议中添加了同步步骤。示例如下所示,primary会等待replicas接收到事务并向primary返回ack,在接收到ack后才会执行commit操作。
|
||||
<img src="https://dev.mysql.com/doc/refman/8.4/en/images/semisync-replication-diagram.png" style="width: 100%; max-width: 725px;">
|
||||
|
||||
上面两张图为传统的asynchronous MYSQL replication protocol。
|
||||
|
||||
### group replication
|
||||
group replication是一种用于实现fault-tolerant系统的技术。replication group是一系列servers的集合,其中每个server都含有数据的完整副本,servers之间通过message进行交互。
|
||||
|
||||
group中的communication layer提供了一系列保证,例如atomic message和total order message delivery。
|
||||
Reference in New Issue
Block a user