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

MySQL 8.0.22 新特性Async Replication Auto failover

玩转MySQL 2020-10-28
1638

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
    复制

    1. 在从机上建立指向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的设置上要考虑尝试重连多久才切换复制源。

      1. 在从机上配置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';
        复制

        1. 检查异步复制通道是否启用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
          复制

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

          注意:当主节点故障,一旦复制链路成功failover后,在新的复制链路没有故障时,如果原主节点恢复,是不会回切的。如果当前复制链路发生故障,会再次选择权重高的进行切换。

          文章转载自玩转MySQL,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论