group_replication_exit_state_action
系統變數指定當成員因為錯誤或問題而意外離開群組,且無法自動重新加入或未嘗試重新加入時,群組複寫會執行什麼動作。請注意,在驅逐成員的情況下,成員在重新連線到群組之前不會知道自己被驅逐,因此只有在成員設法重新連線,或成員對自己提出懷疑並驅逐自己的情況下,才會採取指定的動作。
依據影響程度排序,退出動作如下
如果退出動作是
READ_ONLY
,執行個體會透過將系統變數super_read_only
設定為ON
,將 MySQL 切換為超級唯讀模式。當成員處於超級唯讀模式時,用戶端無法進行任何更新,即使他們擁有CONNECTION_ADMIN
權限(或已棄用的SUPER
權限)。不過,用戶端仍然可以讀取資料,而且由於不再進行更新,因此隨著時間的推移,過時讀取的可能性會增加。使用此設定時,您需要主動監控伺服器是否有故障。此退出動作是預設值;採取此動作後,成員的狀態會在群組的視圖中顯示為ERROR
。如果退出動作是
OFFLINE_MODE
,執行個體會透過將系統變數offline_mode
設定為ON
,將 MySQL 切換為離線模式。當成員處於離線模式時,已連線的用戶端使用者會在下一個請求時中斷連線,並且不再接受連線,但具有CONNECTION_ADMIN
權限(或已棄用的SUPER
權限)的用戶端使用者除外。群組複寫也會將系統變數super_read_only
設定為ON
,因此用戶端無法進行任何更新,即使他們已使用CONNECTION_ADMIN
或SUPER
權限連線。此退出動作可防止更新和過時讀取(具有所述權限的用戶端使用者進行的讀取除外),並讓 MySQL Router 等 Proxy 工具可以辨識伺服器無法使用並重新導向用戶端連線。它也會讓執行個體保持執行,以便管理員可以在不關閉 MySQL 的情況下嘗試解決問題。採取此退出動作後,成員的狀態會在群組的視圖中顯示為ERROR
(而不是OFFLINE
,這表示成員具有可用的群組複寫功能,但目前不屬於群組)。如果退出動作是
ABORT_SERVER
,執行個體會關閉 MySQL。指示成員自行關閉可防止所有過時讀取和用戶端更新,但這表示 MySQL Server 執行個體無法使用,必須重新啟動,即使問題可以在沒有此步驟的情況下解決。採取此退出動作後,成員會從群組視圖中的伺服器清單中移除。
請記住,無論設定何種退出動作,都需要操作員介入,因為已用盡其自動重新加入嘗試(或從未嘗試過)且已從群組中驅逐的成員,在不重新啟動群組複寫的情況下,不允許重新加入。退出動作只會影響用戶端是否仍可以讀取無法重新加入群組的伺服器上的資料,以及伺服器是否保持執行。
如果成員在成功加入群組之前發生故障,則group_replication_exit_state_action
指定的退出動作不會採取。如果在本機設定檢查期間發生故障,或加入成員的設定與群組的設定不符,就會發生這種情況。在這些情況下,super_read_only
系統變數會保留其原始值,且伺服器不會關閉 MySQL。為了確保當群組複寫未啟動時,伺服器無法接受更新,因此我們建議在伺服器的設定檔案中於啟動時設定 super_read_only=ON
,這會在主要成員成功啟動群組複寫後變更為 OFF
。當伺服器設定為在伺服器開機時啟動群組複寫 (group_replication_start_on_boot=ON
) 時,此保護措施特別重要,但當使用 START GROUP_REPLICATION
陳述式手動啟動群組複寫時,此保護措施也很有用。
如果成員在成功加入群組後發生故障,則會採取指定的退出動作。以下情況會發生這種情況
套用程式錯誤 - 複寫套用程式中發生錯誤。此問題無法復原。
分散式復原不可行 - 發生問題,導致群組複寫的分散式復原程序(使用遠端複製作業和二進位日誌的狀態傳輸)無法完成。群組複寫會在合理的情況下自動重試分散式復原,但如果沒有其他選項可完成程序,則會停止。如需詳細資訊,請參閱第 20.5.4.4 節,「分散式復原的容錯能力」。
群組組態變更錯誤 - 使用函式執行群組範圍的組態變更時發生錯誤,如第 20.5.1 節,「設定線上群組」中所述。
主要成員選舉錯誤 - 在單一主要模式中選舉群組的新主要成員時發生錯誤,如第 20.1.3.1 節,「單一主要模式」中所述。
無法連線多數逾時 - 成員已失去與大多數群組成員的連線,因此處於少數狀態,且由
group_replication_unreachable_majority_timeout
系統變數設定的逾時已過期。成員被逐出群組 - 該成員已被懷疑,且由
group_replication_member_expel_timeout
系統變數設定的任何逾時都已過期,並且該成員已恢復與群組的通訊,但發現自己已被逐出。超出自動重新加入嘗試次數 -
group_replication_autorejoin_tries
系統變數已設定為指定在失去多數或被逐出後自動重新加入的嘗試次數,而該成員在沒有成功的情況下完成了此嘗試次數。
下表總結了各種失敗情況和每種情況下的動作
表 20.3 群組複寫失敗情況下的結束動作
失敗情況 |
使用 |
使用 |
---|---|---|
成員的本機組態檢查失敗 加入的成員與群組組態不符 |
MySQL 繼續執行 在啟動時設定 |
MySQL 繼續執行 在啟動時設定 |
成員上的 Applier 錯誤 分散式復原不可行 群組組態變更錯誤 主要成員選舉錯誤 無法連線多數逾時 成員被逐出群組 超出自動重新加入嘗試次數 |
或
或 MySQL 關閉 |
或
或 MySQL 關閉 |