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 伺服器執行個體無法使用,必須重新啟動,即使可以在不執行該步驟的情況下解決問題。執行此退出動作後,成員會從群組檢視中的伺服器清單中移除。
請注意,無論設定何種退出動作,都需要操作員介入。因為已耗盡自動重新加入嘗試次數(或從未嘗試過)並被群組除名的前成員,除非重新啟動群組複寫,否則不允許重新加入。退出動作僅影響客戶端是否仍可讀取無法重新加入群組的伺服器上的資料,以及伺服器是否保持運行。
如果成員在成功加入群組之前發生故障,則group_replication_exit_state_action
指定的退出動作不會執行。在本地組態檢查期間發生故障,或者加入成員的組態與群組的組態不符時,都會發生這種情況。在這些情況下,super_read_only
系統變數會保留其原始值,且伺服器不會關閉MySQL。為確保群組複寫未啟動時伺服器無法接受更新,我們因此建議在伺服器的組態檔案中,於啟動時設定super_read_only=ON
,群組複寫會在主要成員成功啟動後將其變更為OFF
。當伺服器設定為在伺服器啟動時啟動群組複寫(group_replication_start_on_boot=ON
)時,此安全措施尤其重要,但當使用START GROUP_REPLICATION
語法手動啟動群組複寫時,此安全措施也很有用。
如果成員在成功加入群組後發生故障,則會執行指定的退出動作。以下情況會發生這種情況:
Applier 錯誤 - 複寫 applier 中發生錯誤。此問題無法恢復。
無法進行分散式復原 - 發生問題,表示無法完成群組複寫的分散式復原程序(使用遠端複製作業和二進位記錄檔的狀態傳輸)。群組複寫會在適當情況下自動重試分散式復原,但如果沒有其他選項可以完成程序,則會停止。如需詳細資訊,請參閱第 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 關閉 |