MySQL MGR高可用架构

206 阅读3分钟

MySQL 是目前最流行的开源关系型数据库,国内金融行业也开始全面使用,其中 MySQL 5.7.17 提出的 MGR(MySQL Group Replication)既可以很好的保证数据一致性又可以自动切换,具备故障检测功能、支持多节点写入,MGR是一项被普遍看好的技术。

MGR (MySQL Group Replication)是 MySQL 自带的一个插件,可以灵活部署。MySQL MGR 集群是多个 MySQL Server 节点共同组成的分布式集群,每个 Server 都有完整的副本,它是基于 ROW 格式的二进制日志文件和 GTID 特性。

MGR的优点

  1. 最终一致性,基于原生复制及 paxos 协议的组复制技术,并以插件的方式提供,是最终一致性的;
    1. 一个组内数据分发是一致性的,但是主服务器 commit 后,从服务器还没 commit,直接查询从属服务器,就是不一致的

  1. 高容错性,只要不是大多数节点坏掉就可以继续工作,有自动检测机制,当不同节点产生资源争用冲突时,不会出现错误,按照先到者优先原则进行处理,并且内置了自动化脑裂防护机制;
  2. 高扩展性,节点的新增和移除都是自动的,新节点加入后,会自动从其他节点上同步状态,直到新节点和其他节点保持一致,如果某节点被移除了,其他节点自动更新组信息,自动维护新的组信息;
  3. 高灵活性,有单主模式和多主模式,单主模式下,会自动选主,所有更新操作都在主上进行;多主模式下,所有 server 都可以同时处理更新操作。

MGR的使用约束

  1. 仅支持 InnoDB 表,并且每张表一定要有一个主键,用于做 write set 的冲突检测;
  2. 必须打开 GTID 特性,二进制日志格式必须设置为 ROW,用于选主与 writeset;主从状态信息存于表中(--master-info-repository=TABLE 、--relay-log-info-repository=TABLE),--log-slave-updates打开
  3. MGR 不支持大事务,事务大小最好不超过 143MB,当事务过大,无法在 5 秒的时间内通过网络在组成员之间复制消息,则可能会怀疑成员失败了,然后将其驱逐出局
  4. 目前一个 MGR 集群最多支持 9 个节点
  5. 不支持外键于 save point 特性,无法做全局间的约束检测与部分事务回滚
  6. 二进制日志不支持 Binlog Event Checksum

MGR适用场景

  • 金融交易、重要数据存储、对主从一致性要求高的场景
  • 核心数据总量未过亿 (热数据)
  • 读多写少的应用场景,如互联网电商

单主模式与多主模式

在单主模式下, 组复制具有自动选主功能,每次只有一个 server成员接受更新。

单主模式 group 内只有一台节点可写可读,其他节点只可以读。

对于group的部署,需要先跑起 primary 节点,然后再跑起其他的节点,并把这些节点加进 group。其他的节点就会自动同步 primary 节点上面的变化,然后将自己设置为只读模式。

当 primary 节点意外宕机或者下线,在满足大多数节点存活的情况下,group 内部发起选举,选出下一个可用的读节点,提升为 primary 节点。primary 选举根据 group 内剩下存活节点的 UUID 按字典序升序来选择,然后选择排在最前的节点作为新的 primary 节点。

在多主模式下, 所有的 server 成员都可以同时接受更新。group 内的所有机器都是 primary 节点,同时可以进行读写操作,并且数据是最终一致的。