每當成員加入或重新加入複製群組時,它必須趕上在它加入之前或離開期間由群組成員套用的交易。此程序稱為分散式復原。
加入成員首先檢查其 group_replication_applier
通道的轉送日誌,以查看是否有任何它已從群組收到但尚未套用的交易。如果加入成員先前在群組中,它可能會發現離開之前未套用的交易,在這種情況下,它會將這些交易作為第一步套用。新加入群組的成員沒有任何要套用的交易。
在此之後,加入成員會連線到線上現有成員,以執行狀態傳輸。加入成員會傳輸在加入之前或離開期間群組中發生的所有交易,這些交易由現有成員 (稱為捐贈者) 提供。接下來,加入成員會套用在狀態傳輸進行期間群組中發生的交易。此程序完成後,加入成員已趕上群組中的其餘伺服器,並開始正常參與群組。
群組複製在分散式復原期間,使用下列方法的組合進行狀態傳輸
使用複製外掛程式功能的遠端複製作業。若要啟用此狀態傳輸方法,您必須在群組成員和加入成員上安裝複製外掛程式。群組複製會自動設定所需的複製外掛程式設定並管理遠端複製作業。
從捐贈者的二進位日誌複製並在加入成員上套用交易。此方法使用名為
group_replication_recovery
的標準非同步複製通道,該通道是在捐贈者和加入成員之間建立的。
在您對加入成員發出 START GROUP_REPLICATION
之後,群組複製會自動選取狀態傳輸的最佳方法組合。若要執行此操作,群組複製會檢查哪些現有成員適合作為捐贈者、加入成員需要從捐贈者取得多少交易,以及任何所需的交易是否不再存在於任何群組成員的二進位日誌檔案中。如果加入成員與適合的捐贈者之間的交易差距很大,或如果某些所需的交易不在任何捐贈者的二進位日誌檔案中,群組複製會使用遠端複製作業開始分散式復原。如果交易差距不大,或未安裝複製外掛程式,群組複製會直接從捐贈者的二進位日誌進行狀態傳輸。
在遠端複製作業期間,會移除加入成員上的現有資料,並以捐贈者資料的複本取代。遠端複製作業完成且加入成員重新啟動後,會從捐贈者的二進位日誌執行狀態傳輸,以取得在遠端複製作業進行期間群組套用的交易。
在從捐贈者的二進位日誌進行狀態傳輸期間,加入成員會複製並套用捐贈者二進位日誌中所需的交易,並在收到交易時將交易套用至二進位日誌記錄加入成員加入群組的點 (檢視變更事件)。在此進行期間,加入成員會緩衝處理群組套用的新交易。從二進位日誌進行的狀態傳輸完成後,加入成員會套用緩衝處理的交易。
當加入成員與群組的所有交易同步時,會宣告其上線,並且可以作為一般成員參與群組,分散式復原即告完成。
從二進位日誌進行的狀態傳輸是群組複製用於分散式復原的基本機制,如果您的複製群組中的捐贈者和加入成員未設定為支援複製,這是唯一可用的選項。由於從二進位日誌進行的狀態傳輸是基於傳統非同步複製,如果加入群組的伺服器完全沒有群組資料,或者資料是從非常舊的備份映像擷取的,則可能需要很長的時間。在此情況下,因此建議您在將伺服器新增至群組之前,應該藉由傳輸群組中已存在的伺服器的相當新的快照來設定群組的伺服器資料。這可以盡量縮短分散式復原所需的時間,並減少對捐贈者伺服器的影響,因為它們必須保留和傳輸較少的二進位日誌檔案。