您可以使用 group_replication_member_expel_timeout
系統變數,以允許在建立懷疑與驅逐可疑成員之間有額外的時間。當一個伺服器沒有從另一個伺服器收到訊息時,就會建立懷疑,如第 20.1.4.2 節,「故障偵測」中所述。
在群組複製群組成員懷疑另一個成員(或懷疑自己)之前,會有初始的 5 秒偵測期間。當另一個成員對其的懷疑(或其對自己的懷疑)逾時時,就會驅逐群組成員。之後,可能還會經過一段短時間,驅逐機制才會偵測到並實作驅逐。group_replication_member_expel_timeout
指定以秒為單位的時間長度,稱為驅逐逾時,群組成員在建立懷疑與驅逐可疑成員之間等待的時間。可疑成員在此等待期間會列為 UNREACHABLE
,但不會從群組的成員資格清單中移除。
如果可疑成員在等待期間結束時,懷疑逾時之前再次變得活躍,則成員會套用剩餘群組成員在 XCom 訊息快取中緩衝的所有訊息,並進入
ONLINE
狀態,而無需操作員介入。在此情況下,群組會將該成員視為相同的化身。如果可疑成員僅在懷疑逾時後才變得活躍,並且能夠恢復通訊,則會收到其已被驅逐的檢視,並在該點意識到自己已被驅逐。您可以使用
group_replication_autorejoin_tries
來讓成員在此時嘗試自動重新加入群組。此功能在 MySQL 9.0 中預設為啟用,且成員會嘗試三次自動重新加入。如果自動重新加入程序未成功或未嘗試,則驅逐的成員會遵循group_replication_exit_state_action
指定的結束動作。
驅逐成員前的等待期間僅適用於先前在群組中處於活躍狀態的成員。從未在群組中處於活躍狀態的非成員不會獲得此等待期間,並且會在初始偵測期間之後移除,因為他們加入的時間太長。
如果 group_replication_member_expel_timeout
設定為 0,則沒有等待期間,且在初始 5 秒偵測期間結束後,可疑成員會立即被驅逐。預設值為 5,表示可疑成員會在 5 秒偵測期間過期後 5 秒被驅逐。群組的所有成員不一定要對 group_replication_member_expel_timeout
具有相同的設定,但建議這樣做,以避免發生意外驅逐。任何成員都可以懷疑任何其他成員,包括自己,因此有效的驅逐逾時是設定值最低的成員的逾時。
在下列情況中,請考慮從預設值增加 group_replication_member_expel_timeout
的值
網路速度較慢,且驅逐前的預設 5 或 10 秒不足以讓群組成員始終交換至少一則訊息。
網路有時會發生暫時性中斷,而您想避免在這些時候發生不必要的驅逐和主要成員變更。
網路不在您的直接控制之下,而您想盡量減少操作員介入的需求。
預期會發生暫時的網路中斷,而您不希望部分或所有成員因此被驅逐。
單一機器正在發生效能降低的情況,而您不希望它從群組中驅逐。
您可以指定最長 3600 秒(1 小時)的驅逐逾時時間。請務必確保 XCom 的訊息快取有足夠的大小,以便容納您指定時間範圍內預期的訊息量,再加上最初的 5 秒偵測時間,否則成員將無法重新連線。您可以使用 group_replication_message_cache_size
系統變數來調整快取大小限制。如需更多資訊,請參閱第 20.7.6 節,「XCom 快取管理」。
如果群組中有任何成員目前處於可疑狀態,則無法重新配置群組成員資格(透過新增或移除成員,或選出新的領導者)。如果需要在一個或多個成員處於可疑狀態時實施群組成員資格變更,並且您希望可疑成員保留在群組中,請採取任何必要的動作,使這些成員再次處於活動狀態(如果可能)。如果您無法使這些成員再次處於活動狀態,並且您希望將它們從群組中驅逐,您可以強制可疑狀態立即逾時。請在任何活動成員上,將 group_replication_member_expel_timeout
的值變更為低於可疑狀態建立以來已經過的時間。然後,可疑成員將立即被驅逐。
如果複寫群組成員意外停止並立即重新啟動(例如,因為它是使用 mysqld_safe
啟動的),如果設定了 group_replication_start_on_boot=on
,它會自動嘗試重新加入群組。在這種情況下,重新啟動和重新加入嘗試有可能在成員先前實例從群組中被驅逐之前發生,在這種情況下,成員將無法重新加入。群組複寫會自動使用群組通訊系統 (GCS) 功能來重試成員的重新加入嘗試 10 次,每次重試之間間隔 5 秒。這應該可以涵蓋大多數情況,並有足夠的時間讓先前實例從群組中被驅逐,讓成員重新加入。請注意,如果 group_replication_member_expel_timeout
系統變數設定為指定更長的等待時間才能驅逐成員,則自動重新加入嘗試可能仍然不會成功。
如需避免不必要的驅逐(在 group_replication_member_expel_timeout
系統變數不可用的情況下)的替代緩解策略,請參閱第 20.3.2 節,「群組複寫限制」。