乐趣区

关于mysql8:新特性解读-MySQL-8022-新特性-Async-Replication-Auto-failover

作者:洪斌
爱可生南区负责人兼技术服务总监,MySQL  ACE,善于数据库架构布局、故障诊断、性能优化剖析,实践经验丰盛,帮忙各行业客户解决 MySQL 技术问题,为金融、运营商、互联网等行业客户提供 MySQL 整体解决方案。
本文起源:转载自公众号 - 玩转 MySQL
* 爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。


MGR 具备了 RPO=0 的高可用容灾能力,但并不适宜跨 WAN 场景下应用,像有两地三核心容灾需要的场景,单纯靠 MGR 是无奈满足的,必须要拉上异步复制。

同城双核心间隔在百十公里内,网络提早可承受,要求 RPO=0,那么部署一组 MGR;异地容灾核心间隔在上百公里,网络提早较大,承受 RPO>0,通过异步复制,部署单节点或对称部署一组 MGR。在两地三核心架构下,如果同城双核心的集群主节点产生切换,异地容灾的节点并不能主动的追随新的主节点持续同步。

Asynchronous Replication Automatic failover

其原理是在一条异步复制通道上配置多个可用复制源,当某个复制源不可用时(宕机、复制链路中断),且 slave 的 IO 线程尝试重连有效,主动依据权重抉择新的源持续同步。
1. 筹备一个 MGR 集群和单实例,模仿复制链路切换,当 primary 故障,slave 主动切换到其余节点。

dbdeployer deploy replication --topology=group 8.0.22 --single-primary
dbdeployer deploy single 8.0.22

2. 在从机上建设指向 MGR 主节点的复制通道,

change master to master_user='msandbox',
master_password='msandbox', 
master_host='127.0.0.1',
master_auto_position=1,
source_connection_auto_failover=1,
master_port=23223,
master_retry_count=6,
master_connect_retry=10 
for channel 'mgr-single';

在 master_retry_count 和 master_connect_retry 的设置上要思考尝试重连多久才切换复制源。

3. 在从机上配置 asynchronous connection auto failover

配置 asynchronous connection auto failover 的两个函数:

  • asynchronous_connection_failover_add_source(channel-name,host,port,network-namespace,weight)
  • asynchronous_connection_failover_delete_source(channel-name,host,port,network-namespace)

权重值大的被优先级抉择,能够配合 MGR 的选举权重配置 asynchronous_connection_failover 的权重。当 MGR 节点切换,异步复制也能切换到新的主节点。

SELECT asynchronous_connection_failover_add_source('mgr-single','127.0.0.1',23223,null,100); 
SELECT asynchronous_connection_failover_add_source('mgr-single','127.0.0.1',23224,null,80); 
SELECT asynchronous_connection_failover_add_source('mgr-single','127.0.0.1',23225,null,50);
start slave for channel 'mgr-single';

4. 查看异步复制通道是否启用 failover。

mysql> SELECT CHANNEL_NAME, SOURCE_CONNECTION_AUTO_FAILOVER FROM performance_schema.replication_connection_configuration; 
+--------------+---------------------------------+
| CHANNEL_NAME | SOURCE_CONNECTION_AUTO_FAILOVER |
+--------------+---------------------------------+
| mgr-single   |  1                              |
+--------------+---------------------------------+
1 row in set (0.01 sec

5. 把 MGR 的 primary 节点 kill 掉,这个从节点会在尝试几轮重连失败后主动切换到次权重的复制源,其日志中会输入切换信息。

留神:当主节点故障,一旦复制链路胜利 failover 后,在新的复制链路没有故障时,如果原主节点复原,是不会回切的。如果以后复制链路产生故障,会再次抉择权重高的进行切换。

退出移动版