当您在 SOURCE_CONNECTION_AUTO_FAILOVER=1
在 CHANGE REPLICATION SOURCE TO
语句中用于通道时,副本的异步连接故障转移会为组复制主服务器上的复制通道自动激活。该功能旨在让发送者组和接收者组保持同步,即使某些成员暂时不可用。当该功能处于活动状态并正确配置时,如果复制的主服务器脱机或进入错误状态,新主服务器在被选为主服务器时会在同一通道上启动复制。新主服务器使用该通道的源列表来选择优先级(权重)设置最高的源,这可能与原始源不同。
要配置此功能,复制通道以及复制用户帐户和通道密码必须在复制组中的所有成员服务器上以及任何新的加入成员上设置。确保 SOURCE_RETRY_COUNT
和 SOURCE_CONNECT_RETRY
设置为最小的数字,只允许几次重试,例如 3 和 10。您可以使用 CHANGE REPLICATION SOURCE TO
设置复制通道,或者如果使用 MySQL 的克隆功能配置新服务器,则所有这些都会自动完成。通道的 SOURCE_CONNECTION_AUTO_FAILOVER
设置在成员加入时从主服务器广播到组成员。如果您稍后在主服务器上为通道禁用了 SOURCE_CONNECTION_AUTO_FAILOVER
,这也将广播到辅助服务器,并且它们会将通道的状态更改为匹配状态。
副本的异步连接故障转移使用组复制成员操作 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
表中的当前源列表。由于源不必在托管组中,因此您可以设置此功能,使一组接收器与一个或多个独立发送器,甚至单个发送器同步。不属于复制组的独立副本无法使用此功能。