暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL 8.0 新特性 - ARAF

辣肉面加蛋加素鸡 2021-08-13
454

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论