群組複製的故障偵測機制是一種分散式服務,能夠識別群組中的伺服器未與其他伺服器通訊,因此懷疑其已停止服務。如果群組的共識認為這種懷疑可能是真實的,則群組會做出協調的決定以驅逐該成員。驅逐未通訊的成員是必要的,因為群組需要其大多數成員同意交易或檢視變更。如果成員未參與這些決策,則群組必須將其移除,以增加群組包含大多數正常運作成員的可能性,因此可以繼續處理交易。
在複製群組中,每個成員都有一個與其他每個成員的點對點通訊通道,形成一個完全連接的圖。這些連線由群組通訊引擎 (XCom,Paxos 的變體) 管理,並使用 TCP/IP 通訊端。一個通道用於將訊息傳送至成員,另一個通道用於接收來自成員的訊息。如果成員在 5 秒內未收到來自另一個成員的訊息,則會懷疑該成員發生故障,並在其自己的效能結構描述表格 replication_group_members
中將該成員的狀態列為 UNREACHABLE
。通常,兩個成員會懷疑彼此發生故障,因為它們彼此之間沒有通訊。儘管可能性較低,但成員 A 可能會懷疑成員 B 發生故障,但成員 B 不會懷疑成員 A 發生故障 - 這可能是由於路由或防火牆問題。成員也可以對自己產生懷疑。與群組其他部分隔離的成員會懷疑所有其他成員都已發生故障。
如果懷疑持續超過 10 秒,則懷疑的成員會嘗試將其認為可疑成員有故障的觀點傳播給群組的其他成員。懷疑的成員只有在它是通知者時才會這樣做,這是根據其內部 XCom 節點編號計算得出的。如果成員實際上與群組的其餘部分隔離,則它可能會嘗試傳播其觀點,但這不會產生任何後果,因為它無法確保其他成員的仲裁同意。如果成員是通知者,並且其懷疑持續的時間足夠長以傳播給群組的其他成員,並且其他成員同意,則懷疑才會產生後果。在這種情況下,可疑成員會在協調的決定中被標記為從群組中驅逐,並在 group_replication_member_expel_timeout
系統變數設定的等待時間到期後,驅逐機制偵測並實施驅逐。
如果網路不穩定,並且成員經常以不同的組合失去和重新獲得彼此的連線,則理論上,群組可能會最終將其所有成員標記為驅逐,之後該群組將不再存在,並且必須重新設定。為了應對這種可能性,群組複製群組通訊系統 (GCS) 會追蹤已標記為驅逐的群組成員,並在決定是否存在多數時,將它們視為在可疑成員的群組中。這可確保至少有一個成員留在群組中,並且群組可以繼續存在。當被驅逐的成員實際上已從群組中移除時,GCS 會移除其已標記該成員為驅逐的記錄,以便該成員在能夠重新加入群組時可以重新加入。
如需有關您可以設定的群組複製系統變數的資訊,以指定正常運作的群組成員對故障情況的回應,以及被懷疑發生故障的群組成員所採取的動作,請參閱第 20.7.7 節,〈對故障偵測與網路分割的回應〉。