要在复制通道上激活异步连接故障转移,请在 CHANGE REPLICATION SOURCE TO
语句中为该通道设置 SOURCE_CONNECTION_AUTO_FAILOVER=1
。该通道必须使用 GTID 自动定位 (SOURCE_AUTO_POSITION = 1
)。
当与源的现有连接失败时,副本首先会根据 CHANGE REPLICATION SOURCE TO
的 SOURCE_RETRY_COUNT
选项指定的次数重试相同的连接。尝试之间的间隔由 SOURCE_CONNECT_RETRY
选项设置。当这些尝试耗尽时,异步连接故障转移机制接管。请注意,为连接到单个源设计的这些选项的默认值会使副本对同一个连接重试 60 天。为了确保异步连接故障转移机制能够及时激活,请将 SOURCE_RETRY_COUNT
和 SOURCE_CONNECT_RETRY
设置为仅允许对同一个源进行几次重试的最小数字,以防连接失败是由短暂的网络中断引起的。合适的数值是 SOURCE_RETRY_COUNT=3
和 SOURCE_CONNECT_RETRY=10
,这使得副本以 10 秒的间隔重试连接 3 次。
您还需要为复制通道设置源列表,以指定可用于故障转移的源。您可以使用 asynchronous_connection_failover_add_source
和 asynchronous_connection_failover_delete_source
函数来添加和删除单个复制源服务器,以设置和管理源列表。要添加和删除受管理的服务器组,请改为使用 asynchronous_connection_failover_add_managed
和 asynchronous_connection_failover_delete_managed
函数。
这些函数会命名相关的复制通道,并指定要添加到或从通道源列表中删除的 MySQL 实例的主机名、端口号、网络命名空间和加权优先级 (1-100,其中 100 为最高优先级)。对于受管理的组,您还需要指定受管理服务的类型 (目前仅支持组复制),以及受管理组的标识符 (对于组复制,这是 group_replication_group_name
系统变量的值)。当您添加受管理的组时,您只需要添加一个组成员,副本会自动从当前组成员资格中添加其余成员。当您删除受管理的组时,您会一起删除整个组。
异步连接故障转移机制还会在源列表中其他可用服务器具有更高优先级(权重)设置的情况下,将连接故障转移到该服务器。此功能确保副本始终连接到最合适的源服务器,并适用于托管组和单个(非托管)服务器。对于托管组,源的权重根据它是主服务器还是从服务器来分配。因此,假设您将托管组设置为为主服务器分配更高的权重,为从服务器分配更低的权重,当主服务器发生变化时,更高的权重将分配给新的主服务器,因此副本会将连接更改到新的主服务器。此外,如果当前连接的托管源服务器离开托管组,或不再是托管组中的多数成员,异步连接故障转移机制也会更改连接。
在发生连接故障转移时,将选择通道源列表中具有最高优先级(权重)设置的备用源,进行首次连接尝试。副本首先检查它是否可以连接到源服务器,或者在托管组的情况下,检查源服务器在组中是否具有ONLINE
状态(而不是RECOVERING
或不可用)。如果权重最高的源不可用,副本将尝试连接到列表中所有其他源,按权重降序排列,然后从权重最高的源重新开始。如果多个源具有相同的权重,副本会随机对它们进行排序。如果副本需要重新开始遍历列表,它将包括并重试导致原始连接失败的源。
源列表存储在mysql.replication_asynchronous_connection_failover
和mysql.replication_asynchronous_connection_failover_managed
表中,可以在 Performance Schema 的replication_asynchronous_connection_failover
和replication_asynchronous_connection_failover_managed
表中查看。副本使用一个监控线程来跟踪托管组的成员资格并更新源列表 (thread/sql/replica_monitor
)。CHANGE REPLICATION SOURCE TO
语句的SOURCE_CONNECTION_AUTO_FAILOVER
选项设置和源列表将在远程克隆操作期间传递给副本的克隆。