前言
MGR全称MySQL Group Replication(Mysql组复制),是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案。MGR提供了高可用、高扩展、高可靠的MySQL集群服务。
高一致性:基于分布式paxos协议实现组复制,保证数据一致性;
高容错性:自动检测机制,只要不是大多数节点都宕机就可以继续工作,内置防脑裂保护机制;
高扩展性:节点的增加与移除会自动更新组成员信息,新节点加入后,自动从其他节点同步增量数据,直到与其他节点数据一致;
高灵活性:提供单主模式和多主模式,单主模式在主库宕机后能够自动选主,所有写入都在主节点进行,多主模式支持多节点写入;
MGR支持单主模式和多主模式:
单主模式:在单主模式下,只有一个节点可以可以读写,其他节点只能提供读,如果读写节点down掉,会自主从新推选一个新的读写节点,其他节点继续保持只读。当主节点宕掉,自动会根据服务器的server_uuid变量和group_replication_member_weight变量值,选择下一个slave谁作为主节点,group_replication_member_weight的值最高的成员被选为新的主节点,在group_replication_member_weight值相同的情况下,group根据数据字典中 server_uuid排序,排序在最前的被选择为主节点。
多主模式:所有节点都支持读写,但是不支持多节点同时对一个表进行DDL vs DDL/DML,不支持SERIALIZABLE隔离级别,不支持多级关联外键。
对不支持的项进行说明:
1.多主模式不支持多节点同时对一个表进行 DDL vs DDL/DML:
解释:在 MGR 的多主模式下,如果多个节点同时对一个表进行 DDL(数据定义语言)操作或 DDL 与 DML(数据操作语言)操作混合执行,可能会导致数据不一致或集群故障。
举例:假设有两个节点 A 和 B,A 正在对表 t1 进行 ALTER TABLE 操作,而 B 同时也在对表 t1 进行 INSERT 操作。这种情况下,可能会导致数据不一致或集群故障。
2.多主模式不支持 SERIALIZABLE 隔离级别:
解释:SERIALIZABLE 是 MySQL 中最严格的隔离级别,但在 MGR 的多主模式下可能不被支持。
举例:如果你在 MGR 的多主模式下尝试设置 SERIALIZABLE 隔离级别,可能会收到错误或警告信息,或者该设置可能不会被尊重。
3.多主模式不支持多级关联外键:
解释:外键是 MySQL 中用于维护数据之间引用完整性的一种机制。但在 MGR 的多主模式下,可能不支持多级关联的外键。
举例:假设你有三个表 A、B 和 C,其中 B 是 A 的子表(通过外键关联),C 是 B 的子表(也通过外键关联)。在 MGR 的多主模式下,这种多级关联的外键可能不会被支持或行为可能与预期不同。
注意点:
1.MGR最大支持9个节点,超过将拒绝新节点加入。
2.官方建议节点数量为奇数个。
3.表必须有显式主键,否则即使可以建表也无法插入数据
4.数据库默认是utf8mb4