1.前言

  Mysql有很多高可用架构方案,比如说MHA、PXC、MGR,今天主要讲解Mysql官方的高可用架构MGR

2.什么是MGR?

  MGR(MySQL Group Replication),是MySQL在2016年12月推出的一个全新的高可用与高扩展的解决方案

3.为什么要使用MGR?

  MySQL推出MGR之前,传统复制分为两种,异步复制、半同步复制,其中异步复制和半同步复制都不能完全保证数据的一致性和完整性,因此引入了组复制

  其中MGR就是在组复制的基础上引进的一个数据库高可用与高扩展的解决方案,以插件形式提供,实现了分布式下数据的最终一致性

4.MGR提供了那些功能?

  • 同步复制
  • 单主模式、多主模式;
  • 自动切换;
  • 弹性扩展。

5.MGR限制

  1、仅支持innodb引擎;
  2、所有新增表必须显式创建主键;
  3、建议隔离级别为READ COMMITED,多主模式下,不支持SERIALIZABLE;
  4、多主模式下,不建议使用外键;
  5、需开启bin_log_format=row、log_slave_updates=ON;
  6、需开启GTID;
  7、需安装引擎group_replication.so;
  8、MGR最多支持9个节点。    

6.MGR原理

  单主模式

  单主模式下,只有一个节点可以读写,其他节点提供只读服务。单主模式下,当主节点宕掉,其他节点自动会根据服务器的server_uuid变量和group_replication_member_weight变量值,选择下一个slave作为主节点,group_replication_member_weight的值最高的成员被选为新的主节点,该参数默认为50,可以在节点上设置不同值;在group_replication_member_weight值相同的情况下,group根据数据字典中server_uuid排序,排序在最前的被选择为主节点。

  多主模式

  多主模式下,在组复制中通过Group Replication Protocol协议及Paxos协议,形成的整体高可用解决方案,同时增加了certify的概念,负责检查事务是否允许提交,是否与其它事务存在冲突,Group Replication是由多个节点共同组成一个数据库集群,每个节点都可以单独执行事务,但是read-write(RW)的操作只有在组内验证后才可以commit,Read-only (RO)事务是不需要验证可以立即执行,当一个事务在一个节点上提交之前,会在组内自动进行原子性的广播,告知其他节点变更了什么内容/执行了什么事务,然后为该事物建立一个全局的排序,最终,这意味着所有的服务器都以相同的顺序接收相同的事务集。因此,所有服务器都按照相同的顺序应用相同的变更集,因此它们在组中保持一致。 在多主模式下,该组的所有成员都设置为读写模式,在多主模式下,不支持SERIALIZABLE事务隔离级别,且不能完全支持级联外键约束