ARAF 简介
Asynchronous Replication Automatic failover(ARAF),ARAF 是 MySQL 8.0.22 的新特性,当某个复制源不可用时,自动根据权重重新选择数据源进行同步。
其原理是在一条异步复制通道上配置多个可用复制源,当某个复制源不可用时(宕机、复制链路中断),且slave的IO线程尝试重连无效,自动根据权重选择新的源继续同步。
配置 ARAF 功能
1. 创建复制通道
replica> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='password', MASTER_HOST='node1', MASTER_PORT=3306, MASTER_RETRY_COUNT=2 FOR CHANNEL 'ch1';
复制
MASTER_RETRY_COUNT:重试次数,默认86400次
MASTER_CONNECT_RETRY:单次重试时间,默认60秒
mysql> change master to master_user='root',master_password='123456', master_host='172.26.55.66',master_auto_position=1,source_connection_auto_failover=1,master_port=3306,master_retry_count=6,master_connect_retry=20 for channel 'report';
Query OK, 0 rows affected, 2 warnings (0.07 sec)复制
2. 从机配置复制通道备用源
SELECT asynchronous_connection_failover_add_source(channel, host, port, network_namespace, weight);
复制
channel host port network_namespace:复制通道连接属性,备用源服务器信息
weight:当有多个备用源服务器时,故障转移操作将尝试连接到权重最大的源服务器默认50
mysql> SELECT asynchronous_connection_failover_add_source('report','172.26.55.66',3306,null,100);
+------------------------------------------------------------------------------------+
| asynchronous_connection_failover_add_source('report','172.26.55.66',3306,null,100) |
+------------------------------------------------------------------------------------+
| The UDF asynchronous_connection_failover_add_source() executed successfully. |
+------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
mysql> SELECT asynchronous_connection_failover_add_source('report','172.26.55.67',3306,null,80);
+-----------------------------------------------------------------------------------+
| asynchronous_connection_failover_add_source('report','172.26.55.67',3306,null,80) |
+-----------------------------------------------------------------------------------+
| The UDF asynchronous_connection_failover_add_source() executed successfully. |
+-----------------------------------------------------------------------------------+
1 row in set (0.01 sec)
mysql> SELECT asynchronous_connection_failover_add_source('report','172.26.55.68',3306,null,50);
+-----------------------------------------------------------------------------------+
| asynchronous_connection_failover_add_source('report','172.26.55.68',3306,null,50) |
+-----------------------------------------------------------------------------------+
| The UDF asynchronous_connection_failover_add_source() executed successfully. |
+-----------------------------------------------------------------------------------+
1 row in set (0.01 sec)
SELECT CHANNEL_NAME, SOURCE_CONNECTION_AUTO_FAILOVER FROM performance_schema.replication_connection_configuration;
SELECT * FROM performance_schema.replication_asynchronous_connection_failover;复制
3. 检查复制通道信息
mysql> SELECT CHANNEL_NAME, SOURCE_CONNECTION_AUTO_FAILOVER FROM performance_schema.replication_connection_configuration;
+--------------+---------------------------------+
| CHANNEL_NAME | SOURCE_CONNECTION_AUTO_FAILOVER |
+--------------+---------------------------------+
| report | 1 |
+--------------+---------------------------------+
1 row in set (0.00 sec)复制
测试 ARAF
1. 关闭MGR的primary节点
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+--------------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+--------------------+-------------+--------------+-------------+----------------+
| group_replication_applier | f50abea0-e994-11e9-b149-525400f3f784 | test_mysql8_mgr_02 | 3306 | ONLINE | PRIMARY | 8.0.22 |
| group_replication_applier | f50abea0-e994-11e9-b149-525400f3f785 | test_mysql8_mgr_03 | 3306 | ONLINE | SECONDARY | 8.0.22 |
+---------------------------+--------------------------------------+--------------------+-------------+--------------+-------------+----------------+复制
test_mysql8_mgr_01 已经被移除,test_mysql8_mgr_02变为新的 primary。
2. 查看从节点切换状态
可以看到在重试了6次后,将新的 master 切换到了 test_mysql8_mgr_02(172.26.55.67)上。
slave status 里也可以看到新 master 的信息。
文章转载自辣肉面加蛋加素鸡,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
墨天轮个人数说知识点合集
JiekeXu
441次阅读
2025-04-01 15:56:03
MySQL数据库当前和历史事务分析
听见风的声音
426次阅读
2025-04-01 08:47:17
MySQL 生产实践-Update 二级索引导致的性能问题排查
chengang
388次阅读
2025-03-28 16:28:31
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
严少安
363次阅读
2025-04-25 15:30:58
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
356次阅读
2025-04-17 17:02:24
MySQL 9.3 正式 GA,我却大失所望,新特性亮点与隐忧并存?
JiekeXu
354次阅读
2025-04-15 23:49:58
【MySQL 30周年庆】MySQL 8.0 OCP考试限时免费!教你免费领考券
墨天轮小教习
348次阅读
2025-04-25 18:53:11
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
331次阅读
2025-04-15 14:48:05
云和恩墨杨明翰:安全生产系列之MySQL高危操作
墨天轮编辑部
307次阅读
2025-03-27 16:45:26
openHalo问世,全球首款基于PostgreSQL兼容MySQL协议的国产开源数据库
严少安
294次阅读
2025-04-07 12:14:29