Files
rikako-note/mysql/mysql集群/Mysql Group Replication.md
2025-10-15 16:25:45 +08:00

53 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

- [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可以加入和离开groupgroup 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。