當您在通道的 CHANGE REPLICATION SOURCE TO
陳述式中設定 SOURCE_CONNECTION_AUTO_FAILOVER=1
時,會自動為群組複製主要節點上的複製通道啟用複本的非同步連線容錯移轉。此功能旨在讓一組傳送者和一組接收者保持彼此同步,即使某些成員暫時無法使用時也一樣。當此功能啟用且正確設定時,如果正在複製的主要節點離線或進入錯誤狀態,則新的主要節點在選出時會在相同的通道上開始複製。新的主要節點會使用通道的來源清單來選取具有最高優先順序(權重)設定的來源,這可能與原始來源不同。
若要設定此功能,必須在複製群組中的所有成員伺服器上,以及任何新加入的成員上設定複製通道以及通道的複製使用者帳戶和密碼。請確定將 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
資料表中的目前來源清單。由於來源不必位於受管理群組中,因此您可以設定此功能,以將一組接收器與一個或多個替代的獨立傳送器,甚至是單一傳送器同步。不屬於複寫群組的獨立複本無法使用此功能。