复制副本的异步连接故障转移功能在 Group Replication 主服务器上自动激活,当您在 CHANGE REPLICATION SOURCE TO
语句中设置 SOURCE_CONNECTION_AUTO_FAILOVER=1
时。该功能旨在使一组发送者和一组接收者保持同步,即使一些成员暂时不可用。当该功能激活并正确配置时,如果正在复制的主服务器离线或进入错误状态,新的主服务器将在同一通道上启动复制时,使用该通道的源列表选择最高优先级(权重)设置的源,这可能不是原始源。
要配置该功能,必须在复制组中的所有成员服务器上设置复制通道和复制用户帐户和密码,并在任何新加入的成员上。确保 SOURCE_RETRY_COUNT
和 SOURCE_CONNECT_RETRY
设置为最小数字,例如 3 和 10。您可以使用 CHANGE REPLICATION SOURCE TO
设置复制通道,或者如果新服务器使用 MySQL 的克隆功能进行 provision,这将自动发生。该通道的 SOURCE_CONNECTION_AUTO_FAILOVER
设置将从主服务器广播到组成员中。当您在主服务器上禁用 SOURCE_CONNECTION_AUTO_FAILOVER
时,这也将广播到次要服务器上,并更改通道的状态以匹配。
在单一主模式下参与组的服务器必须使用 --skip-replica-start=ON
启动。否则,服务器无法加入组作为次要服务器。
异步连接故障转移复制通过 Group Replication 成员操作 mysql_start_failover_channels_if_primary
激活和停用,该操作默认启用。您可以通过禁用该成员操作来禁用整个组的该功能,使用 group_replication_disable_member_action
函数,如下所示:
mysql> SELECT group_replication_disable_member_action("mysql_start_failover_channels_if_primary", "AFTER_PRIMARY_ELECTION");
该函数只能在主服务器上更改,并且必须对整个组启用或禁用,因此您不能让一些成员提供故障转移而其他成员不提供。如果禁用 mysql_start_failover_channels_if_primary
成员操作,通道不需要在次要成员上配置,但如果主服务器离线或进入错误状态,复制将停止。如果有多个通道具有 SOURCE_CONNECTION_AUTO_FAILOVER=1
,成员操作将涵盖所有通道,因此它们不能通过该方法单独启用和禁用。设置 SOURCE_CONNECTION_AUTO_FAILOVER=0
在主服务器上禁用单个通道。
具有 SOURCE_CONNECTION_AUTO_FAILOVER=1
的通道的源列表将在组成员加入时广播,并在更改时广播。这适用于管理组的成员身份自动更新,或者使用 asynchronous_connection_failover_add_source()
, asynchronous_connection_failover_delete_source()
, asynchronous_connection_failover_add_managed()
, 或 asynchronous_connection_failover_delete_managed()
手动添加或更改。所有组成员都将从 mysql.replication_asynchronous_connection_failover
和 mysql.replication_asynchronous_connection_failover_managed
表中接收当前的源列表。由于源不需要在管理组中,因此您可以设置该功能以同步一组接收者与一个或多个备用独立发送者,或者甚至是一个单独的发送者。独立的副本服务器不能使用该功能。