MGR 主备集群实现异步连接故障转移


1.概述

MySQL 8.0.22 开始,支持异步连接故障切换机制,在现有主从复制连接失败后,自动建立到新主的异步复制连接。

MySQL 8.0.23 开始,异步连接故障切换机制还支持组复制拓扑,通过自动监视组成员身份的更改并区分主节点和从节点,在组复制主节点故障选出新主节点后,自动建立到新主的异步复制连接。

MySQL 8.0.26 开始,组复制可以设置组成员在特定情况下采取的操作,比如成员操作 mysql_disable_super_read_only_if_primary 当选择一个新的primary时,使处于单主模式的组保持超级只读模式,这样该组只接受复制的事务,不接受来自客户端的任何直接写操作。

MySQL 8.0.27 开始,异步连接故障切换机制还允许组复制作为副本,组的主节点发生故障时,新的主节点自动重新连接到源端。新增成员操作mysql_start_failover_channels_if_primary,默认情况下,此成员操作是启用的,当启用此成员动作时,在"CHANGE replication SOURCE TO"语句中为复制通道设置SOURCE_CONNECTION_AUTO_FAILOVER=1时,组复制主节点复制通道上的异步连接故障转移将激活。

2.架构

MGR B 作为 MGR A 的备份

MGR 主备集群实现异步连接故障转移-1

本次测试通过搭建2套MGR作为主备集群,进行异步连接故障切换测试:

(1)当主集群MGR A 的主节点发生故障时,备集群MGR B的主节点能够实现异步故障转移,自动连接MGR A 的新主节点,主备集群同步不断开,实现数据正常同步。

(2)当备集群MGR B 的主节点发生故障时,MGR B 的新主节点能够自动启动复制通道,自动连接MGR A 主节点,主备集群同步不断开,实现数据正常同步。

(3)设置MGR B成员行为,使处于单主模式的组 MGR B 保持超级只读模式,这样该组只接受复制的事务,不接受来自客户端的任何直接写。

3.测试

本次测试基于 MySQL 8.0.31,搭建2套MGR集群(单主模式)

3.1 搭建MGR集群

MGR A:

mysql> select * from performance_schema.replication_group_members; +---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK | +---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+ | group_replication_applier | 44921323-bd95-11ed-8db5-00163e01f842 | 172.17.140.201 | 6002 | ONLINE | SECONDARY | 8.0.31 | XCom | | group_replication_applier | 6f904c5c-bd95-11ed-bc79-00163e01f842 | 172.17.140.201 | 6003 | ONLINE | SECONDARY | 8.0.31 | XCom | | group_replication_applier | c9e254d3-bd94-11ed-8ae9-00163e01f842 | 172.17.140.201 | 6001 | ONLINE | PRIMARY | 8.0.31 | XCom | +---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+ 3 rows in set (0.01 sec)