MySQL Group Replication,简称MGR,它是MySQL官方推出的基于paxos分布式一致性协议的状态机复制,实现了分布式下数据的最终一致性。同时MGR提供了高可用、高扩展、高可靠的MySQL集群解决方案,它也是金融级分布式数据库之一。
MGR天生就是为金融场景设计的,例如:支付,证券交易,保险,银行等等。因为这些场景要求数据必须做到零丢失,数据库可用性在4个9,甚至5个9(年度停机时间不超过5分钟)。
MGR采用多副本,在2N+1个节点集群中,集群只要N +1个节点还存活着,数据库就能稳定的对外提供服务。
MGR运行模式有2种
单主模式:
在这种模式下,组具有设置为读写模式的单主服务器。该组中的所有其他成员都设置为只读模式。这会自动发生。主服务器通常是引导该组的第一台服务器,所有其他加入的服务器会自动了解主服务器,并设置为只读。
多主模式:
在多主要模式下,没有单个主要概念。无需参与选举程序,因为没有服务器扮演任何特殊角色,所有服务器均设置为读写模式。
MGR单主模式选举原理
单主模式下,如果主节点挂了,那么其他的成员会自动选举出新的主成员,成员之间可以通过配置权重来确定下一个主成员是谁,如果没有配置权重,则会对所有在线成员的UUID进行排序,然后选取UUID最小的成员作为主成员。
MGR多主模式选举原理
多主模式,所有的组内成员对外提供读写服务,是真正意义上的并发,MGR对于高并发有很好的的处理能力。多主模式下,组内所有成员没有主从之分,对用户来说,就像在操作一个MySQL一样。所以在多主模式下,不存在选举主节点,因为所有节点都是主节点。
在2N+1个节点组成的单主模式组复制集群中,主库上一个事务提交时,会将事务修改记录相关的信息和事务产生的BINLOG事件打包生成一个写集(WRITE SET),将写集发送给所有节点,并通过至少N个节点投票通过才能事务提交成功。
1.必须适用innodb存储引擎
2.创建的业务表,必须要有主键
3.MGR必须适用IPv4网络,不支持IPv6
4.MGR复制网络必须和业务网络隔离
5.binlog日志格式必须为row模式
6.关闭二进制日志校验和,设置--binlog-checksum=NONE
7.小写 table 格名称. 在所有组成员上将--lower-case-table-names设置为相同的值
8.隔离级别设置为RC
1.MGR不支持SERIALIZABLE 隔离级别
2.MGR集群节点不能超过9
3.MGR不支持大事务,事务大小最好不超过143MB,当事务过大,无法在5 秒的时间内通过网络在组成员之间复制消息,则可能会怀疑成员失败了,然后将其驱逐出局。
4.并发 DDL 与 DML 操作. 当使用多主模式时,不支持针对同一对象但在不同服务器上执行的并发数据定义语句和数据操作语句。
5.对表的级联约束的外键支持不好,不建议适用。