要激活异步连接故障转移 для replication 通道,设置 SOURCE_CONNECTION_AUTO_FAILOVER=1
在 CHANGE REPLICATION SOURCE TO
语句中,该通道必须使用 GTID 自动定位 (SOURCE_AUTO_POSITION = 1
)。
当现有的源连接失败时,副本首先重试相同的连接,次数由 SOURCE_RETRY_COUNT
选项指定,间隔时间由 SOURCE_CONNECT_RETRY
选项设置。当这些尝试耗尽时,异步连接故障转移机制将接管。注意,这些选项的默认值是为单个源设计的,使副本重试相同的连接 60 天。为了确保异步连接故障转移机制可以及时激活,请将 SOURCE_RETRY_COUNT
和 SOURCE_CONNECT_RETRY
设置为最小值,以便副本重试连接几次,例如 SOURCE_RETRY_COUNT=3
和 SOURCE_CONNECT_RETRY=10
,使副本重试连接 3 次,间隔 10 秒。
您还需要设置源列表 для replication 通道,以指定可用于故障转移的源。您可以使用 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
系统变量的值)。当您添加托管组时,只需要添加一个组成员,副本将自动添加其他成员。删除托管组时,您将删除整个组。
异步连接故障转移机制还会在源列表中的其他可用服务器具有更高优先级(权重)设置时 failover 连接。这确保副本始终连接到最合适的源服务器,并且适用于托管组和单个(非托管)服务器。对于托管组,源的权重取决于它是主要服务器还是次要服务器。因此,如果您设置托管组以给主要服务器更高的权重和次要服务器较低的权重,那么当主要服务器更改时,较高的权重将被分配给新主要服务器,副本将更改连接到它。异步连接故障转移机制还会在托管源服务器离开托管组或不再是托管组中的多数时更改连接。
在故障转移连接时,副本将选择源列表中具有最高优先级(权重)设置的源服务器作为首选连接目标。副本首先检查它是否可以连接到源服务器,或者在托管组的情况下,检查源服务器是否具有 ONLINE
状态(而不是 RECOVERING
或不可用)。如果最高权重的源不可用,副本将尝试所有列出的源服务器,以降序权重,然后从最高权重的源服务器开始。如果多个源服务器具有相同的权重,副本将随机排序它们。如果副本需要重新开始列表,包括并重试原始连接失败的源服务器。
源列表存储在 mysql.replication_asynchronous_connection_failover
和 mysql.replication_asynchronous_connection_failover_managed
表中,可以在性能模式 replication_asynchronous_connection_failover
和 replication_asynchronous_connection_failover_managed
表中查看。副本使用监控线程来跟踪托管组的成员资格并更新源列表 (thread/sql/replica_monitor
)。 SOURCE_CONNECTION_AUTO_FAILOVER
选项的设置和源列表在远程克隆操作期间被传输到副本的克隆中。