19.4.9.1 源的异步连接故障转移
要为复制通道启用异步连接故障转移,在CHANGE REPLICATION SOURCE TO
语句中将SOURCE_CONNECTION_AUTO_FAILOVER=1
设置为该通道。GTID自动定位必须在通道中启用(SOURCE_AUTO_POSITION = 1
)。
当连接到源的现有连接失败时,复制服务器首先重试同一连接的次数,次数由SOURCE_RETRY_COUNT
选项中的CHANGE REPLICATION SOURCE TO
语句指定。重试间隔由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 Replication,这是group_replication_group_name
系统变量的值)。当您添加管理组时,只需要添加一个组成员,复制服务器自动添加其余成员。当您删除管理组时,您删除整个组。
异步连接故障转移机制还会在源列表中有更高优先级(权重)设置的服务器上故障转移连接。这一特性确保了复制服务器始终连接到最适合的源服务器,并且适用于管理组和单个(非管理)服务器。在管理组中,源的权重是根据是否是主服务器或次要服务器来确定的。因此,如果您将管理组设置为将更高的权重分配给主服务器,并将更低的权重分配给次要服务器,那么当主服务器更改时,新的主服务器将获得更高的权重, replica 将连接到它。异步连接故障转移机制还会在当前连接的管理源服务器离开管理组或不再是管理组的多数时更改连接。
在故障转移连接时,源列表中权重最高的源(权重)设置的源将被用于首次连接尝试。复制服务器首先检查它是否可以连接到源服务器,或者在管理组中,检查源服务器是否具有ONLINE
状态(而不是RECOVERING
或不可用)。如果最高权重的源不可用,复制服务器将尝试使用列表中的所有源,按权重从高到低的顺序,然后从最高权重的源开始。如果多个源具有相同的权重,复制服务器将对它们进行随机排序。如果复制服务器需要重新开始尝试, оно将包括原始连接故障发生的源并重新尝试。
源列表存储在mysql.replication_asynchronous_connection_failover
和mysql.replication_asynchronous_connection_failover_managed
表中,可以在性能chema中查看replication_asynchronous_connection_failover
和replication_asynchronous_connection_failover_managed
表中。复制服务器使用监控线程来跟踪管理组的成员资格并更新源列表(thread/sql/replica_monitor
)。SOURCE_CONNECTION_AUTO_FAILOVER
选项的设置和源列表将在远程克隆操作中传输到复制服务器的克隆副本。