要为复制通道激活异步连接故障转移,请在 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
,这将使副本重试连接 3 次,两次尝试之间间隔 10 秒。
您还需要为复制通道设置源列表,以指定可用于故障转移的源。您可以使用 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
选项设置和源列表会在远程克隆操作期间传输到副本的克隆。