當加入的成員在分散式復原期間連線至線上現有成員以進行狀態傳輸時,加入的成員會在此連線上充當用戶端,而現有成員則充當伺服器。當透過此連線 (使用非同步複製通道 group_replication_recovery
) 正在進行來源二進位記錄檔的狀態傳輸時,加入的成員會充當複本,而現有成員則充當來源。當透過此連線正在進行遠端複製作業時,加入的成員會充當接收者,而現有成員則充當來源。除非被群組複製特定的設定或行為覆寫,否則適用於群組複製內容之外的那些角色的組態設定也可以適用於群組複製。
現有成員提供給加入成員進行分散式復原的連線,與群組複製在群組的線上成員之間進行通訊所使用的連線不同。
群組複製的群組通訊引擎 (XCom,一種 Paxos 變體) 用於遠端 XCom 執行個體之間的 TCP 通訊的連線,由
group_replication_local_address
系統變數指定。此連線用於線上成員之間的 TCP/IP 訊息。與本機執行個體的通訊是透過使用共用記憶體的輸入通道進行。對於分散式復原,依預設,群組成員會提供其標準 SQL 用戶端連線給加入的成員,如 MySQL 伺服器的
hostname
和port
系統變數所指定。如果report_port
系統變數指定了替代連接埠號碼,則會改用該號碼。群組成員可能會改為宣傳替代的分散式復原端點清單,作為加入成員的專用用戶端連線,讓您可以將分散式復原流量與成員的一般用戶端使用者連線分開控制。您可以使用
group_replication_advertise_recovery_endpoints
系統變數指定此清單,並且成員會在加入群組時將其分散式復原端點清單傳輸至群組。預設情況下,成員會繼續提供標準 SQL 用戶端連線,如同早期版本一樣。
如果加入的成員無法使用 MySQL 伺服器的 hostname
系統變數所定義的主機名稱正確識別其他成員,分散式復原可能會失敗。建議執行 MySQL 的作業系統使用正確設定的唯一主機名稱,無論是使用 DNS 或本機設定。伺服器用於 SQL 用戶端連線的主機名稱可以在效能結構描述表格 replication_group_members
的 Member_host
欄中驗證。如果多個群組成員將作業系統設定的預設主機名稱外部化,則加入的成員有可能無法將其解析為正確的成員位址,並且無法連線以進行分散式復原。在這種情況下,您可以使用 MySQL 伺服器的 report_host
系統變數來設定每個伺服器外部化的唯一主機名稱。
加入的成員建立分散式復原連線的步驟如下
當成員加入群組時,它會使用其
group_replication_group_seeds
系統變數中的清單所包含的其中一個種子成員連線,最初使用該清單中指定的group_replication_local_address
連線。種子成員可能是群組的子集。透過此連線,種子成員會使用群組複製的成員資格服務,以檢視的形式向加入的成員提供群組中所有線上成員的清單。成員資格資訊包含每個成員提供的分散式復原端點或標準 SQL 用戶端連線的詳細資料,以便進行分散式復原。
加入的成員會從此清單中選取合適的群組成員作為其分散式復原的來源,遵循第 20.5.4.4 節「分散式復原的容錯」中所述的行為。
加入的成員接著會嘗試使用捐贈者宣告的分散式復原端點連線至捐贈者,並依清單中指定的順序逐一嘗試。如果捐贈者未提供任何端點,加入的成員會嘗試使用捐贈者的標準 SQL 用戶端連線進行連線。連線的 SSL 需求如
group_replication_recovery_ssl_*
選項所指定,詳情請參閱第 20.5.4.1.4 節「分散式復原的 SSL 和驗證」。如果加入的成員無法連線至選定的捐贈者,它會根據第 20.5.4.4 節「分散式復原的容錯」中所述的行為,使用其他合適的捐贈者重試。請注意,如果加入的成員用盡宣告的端點清單而未建立連線,它不會退回到捐贈者的標準 SQL 用戶端連線,而是切換到另一個捐贈者。
當加入的成員與捐贈者建立分散式復原連線時,它會使用該連線進行狀態傳輸,如第 20.5.4 節「分散式復原」所述。所使用的連線主機和連接埠會顯示在加入成員的日誌中。請注意,如果使用遠端複製操作,當加入的成員在操作結束時重新啟動後,它會與新的捐贈者建立連線,以便從二進位日誌進行狀態傳輸。這可能是與用於遠端複製操作的原始捐贈者不同的成員的連線,也可能是與原始捐贈者不同的連線。無論如何,分散式復原程序會以與使用原始捐贈者相同的方式繼續進行。
由group_replication_advertise_recovery_endpoints
系統變數提供的 IP 位址作為分散式復原端點,不必針對 MySQL Server 進行設定(也就是說,它們不必由admin_address
系統變數或bind_address
系統變數的清單指定)。它們必須指派給伺服器。任何使用的主機名稱必須解析為本機 IP 位址。可以使用 IPv4 和 IPv6 位址。
為分散式復原端點提供的連接埠必須為 MySQL Server 設定,因此它們必須由port
、report_port
或admin_port
系統變數指定。伺服器必須監聽這些連接埠上的 TCP/IP 連線。如果您指定admin_port
,用於分散式復原的複寫使用者需要SERVICE_CONNECTION_ADMIN
權限才能連線。選取admin_port
可讓分散式復原連線與一般的 MySQL 用戶端連線分開。
加入的成員會依它們在清單上指定的順序,逐一嘗試每個端點。如果group_replication_advertise_recovery_endpoints
設定為DEFAULT
而不是端點清單,則會提供標準 SQL 用戶端連線。請注意,標準 SQL 用戶端連線不會自動包含在分散式復原端點的清單中,並且如果捐贈者的端點清單用盡而未建立連線,則不會作為後援提供。如果您想將標準 SQL 用戶端連線作為多個分散式復原端點之一提供,您必須將其明確包含在group_replication_advertise_recovery_endpoints
指定的清單中。您可以將其放在最後一個位置,使其作為連線的最後手段。
群組成員的分散式復原端點(或如果未提供端點則為標準 SQL 用戶端連線)不必新增至group_replication_ip_allowlist
系統變數指定的群組複寫允許清單。允許清單僅適用於每個成員的group_replication_local_address
指定的位址。加入的成員必須允許其與群組的初始連線,才能擷取分散式復原的位址。
當設定系統變數和發出START GROUP_REPLICATION
陳述式時,您列出的分散式復原端點會經過驗證。如果無法正確剖析清單,或者如果無法存取主機上的任何端點,因為伺服器沒有監聽它們,則群組複寫會記錄錯誤且不會啟動。
您可以選擇性地設定從捐贈者的二進位日誌進行狀態傳輸的方法,以進行分散式復原的壓縮。當網路頻寬有限且捐贈者必須將許多交易傳輸到加入的成員時,壓縮可以讓分散式復原受益。group_replication_recovery_compression_algorithms
和group_replication_recovery_zstd_compression_level
系統變數設定允許的壓縮演算法,以及在從捐贈者的二進位日誌執行狀態傳輸時使用的zstd
壓縮層級。如需更多資訊,請參閱第 6.2.8 節「連線壓縮控制」。
請注意,這些壓縮設定不適用於遠端複製操作。當遠端複製操作用於分散式復原時,會套用複製外掛程式的clone_enable_compression
設定。
分散式復原需要具有正確權限的複寫使用者,以便群組複寫可以建立直接的成員對成員複寫通道。複寫使用者還必須具有正確的權限,才能在捐贈者上充當遠端複製操作的複製使用者。每個群組成員的分散式復原都必須使用相同的複寫使用者。如需設定此複寫使用者的指示,請參閱第 20.2.1.3 節「分散式復原的使用者認證」。如需保護複寫使用者認證的指示,請參閱第 20.6.3.1 節「安全的分散式復原使用者認證」。
分散式復原的 SSL 與正常群組通訊的 SSL 分開設定,後者由伺服器的 SSL 設定和group_replication_ssl_mode
系統變數決定。對於分散式復原連線,可使用專用的群組複寫分散式復原 SSL 系統變數來設定專門用於分散式復原的憑證和密碼的使用。
預設情況下,SSL 不用於分散式復原連線。若要啟動它,請設定group_replication_recovery_use_ssl=ON
,並如第 20.6.3 節「保護分散式復原連線」所述設定群組複寫分散式復原 SSL 系統變數。您需要設定為使用 SSL 的複寫使用者。
當分散式復原設定為使用 SSL 時,群組複寫會將此設定應用於遠端複製操作,以及從捐贈者的二進位日誌進行狀態傳輸。群組複寫會自動設定複製 SSL 選項的設定(clone_ssl_ca
、clone_ssl_cert
和clone_ssl_key
),以符合您對應的群組複寫分散式復原選項(group_replication_recovery_ssl_ca
、group_replication_recovery_ssl_cert
和group_replication_recovery_ssl_key
)。
如果您未使用 SSL 進行分散式復原(因此group_replication_recovery_use_ssl
設定為OFF
),並且群組複寫的複寫使用者帳戶使用caching_sha2_password
外掛程式(預設值)或sha256_password
外掛程式(已過時)進行驗證,則會使用 RSA 金鑰組進行密碼交換。在這種情況下,請使用group_replication_recovery_public_key_path
系統變數來指定 RSA 公開金鑰檔案,或者使用group_replication_recovery_get_public_key
系統變數從來源請求公開金鑰,如第 20.6.3.1.1 節「使用快取 SHA-2 驗證外掛程式的複寫使用者」所述。