当您在 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
表中的当前源列表。由于源不需要位于托管组中,因此您可以设置该功能,以便将一组接收器与一个或多个备用独立发送器,甚至一个单独的发送器同步。不属于复制组的独立副本不能使用此功能。