文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美國信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  半同步複製

19.4.10 半同步複製

除了內建的非同步複製之外,MySQL 9.0 還支援由外掛程式實作的半同步複製介面。本節討論什麼是半同步複製以及其運作方式。以下各節涵蓋半同步複製的管理介面,以及如何安裝、設定和監控它。

預設情況下,MySQL 複製是非同步的。來源將事件寫入其二進制日誌,而副本會在準備好時請求它們。來源不知道副本是否已擷取和處理交易,也沒有保證任何事件會到達任何副本。使用非同步複製時,如果來源當機,它已提交的交易可能尚未傳輸到任何副本。在這種情況下,從來源到副本的容錯移轉可能會導致容錯移轉到相對於來源缺少交易的伺服器。

使用完全同步複製時,當來源提交交易時,所有副本也已提交交易,然後來源才會返回執行交易的工作階段。完全同步複製表示隨時可能從來源容錯移轉到任何副本。完全同步複製的缺點是完成交易可能會有很大的延遲。

半同步複製介於非同步和完全同步複製之間。來源會等到至少一個副本已接收並記錄事件(所需副本數量可設定),然後再提交交易。來源不會等待所有副本確認接收,它只需要副本的確認,而不是事件已在副本端完全執行和提交。因此,半同步複製保證如果來源當機,它已提交的所有交易都已傳輸到至少一個副本。

與非同步複製相比,半同步複製提供了改進的資料完整性,因為當提交成功返回時,已知資料至少存在於兩個位置。在半同步來源收到所需數量的副本的確認之前,交易會暫停且不會提交。

相較於完全同步複製,半同步複製速度更快,因為它可以配置為平衡您對資料完整性的要求(確認收到事務的副本數量)與提交速度,提交速度由於需要等待副本而較慢。

重要

使用半同步複製時,如果來源伺服器崩潰並且執行容錯移轉至副本,則不應將失敗的來源伺服器重新用作複製來源,而應將其捨棄。它可能具有未被任何副本確認的事務,因此這些事務在容錯移轉之前未被提交。

如果您的目標是實作一個容錯複製拓撲,其中所有伺服器都以相同的順序接收相同的事務,並且崩潰的伺服器可以重新加入群組並自動更新,則可以使用群組複製來實現此目標。有關資訊,請參閱 第 20 章,群組複製

相較於非同步複製,半同步複製的效能影響是為了提高資料完整性而做出的權衡。速度減慢的幅度至少是將提交傳送至副本並等待副本確認接收的 TCP/IP 來回時間。這表示半同步複製最適合透過快速網路通訊的鄰近伺服器,最不適合透過慢速網路通訊的遠端伺服器。半同步複製還會透過限制二進位日誌事件從來源傳送到副本的速度來限制忙碌的連線速度。當一個使用者過於忙碌時,這會使其速度變慢,這在某些部署情況下可能很有用。

來源與其副本之間的半同步複製運作方式如下

  • 當副本連線至來源時,會指出它是否具備半同步功能。

  • 如果來源端已啟用半同步複製,且至少有一個半同步副本,則在來源上執行事務提交的執行緒會遭到封鎖並等待,直到至少有一個半同步副本確認已收到該事務的所有事件,或直到發生逾時。

  • 副本僅在將事件寫入其中繼日誌並刷新至磁碟後,才會確認收到事務的事件。

  • 如果發生逾時且沒有任何副本確認事務,則來源會還原為非同步複製。當至少有一個半同步副本趕上進度時,來源會返回半同步複製。

  • 必須在來源端和副本端都啟用半同步複製。如果在來源上停用半同步複製,或在來源上啟用但沒有任何副本啟用,則來源會使用非同步複製。

當來源被封鎖(等待副本的確認)時,它不會返回執行該事務的連線。當封鎖結束時,來源會返回連線,然後該連線可以繼續執行其他語句。此時,事務已在來源端提交,並且至少有一個副本已確認收到其事件。來源在返回連線之前每個事務必須收到的副本確認數量是可配置的,預設值為一個確認(請參閱 第 19.4.10.2 節,「設定半同步複製」)。

在寫入二進位日誌的回滾之後也會發生封鎖,當回滾修改非事務表格的事務時,就會發生這種情況。儘管回滾的事務對於事務表格沒有影響,但仍會記錄下來,因為無法回滾對非事務表格的修改,而且必須將其傳送至副本。

對於未在事務環境中發生的語句(也就是說,沒有使用 START TRANSACTIONSET autocommit = 0 啟動任何事務時),會啟用自動提交,而且每個語句都會隱含地提交。使用半同步複製時,來源會封鎖每個此類語句,就像它對顯式事務提交所做的一樣。

預設情況下,來源會在將二進位日誌同步至磁碟後,但在將事務提交至儲存引擎之前,等待副本確認收到事務。或者,您可以設定來源,讓來源在使用 rpl_semi_sync_source_wait_point 系統變數將事務提交至儲存引擎後,才等待副本確認。此設定會影響複製特性以及用戶端可以在來源上看到的資料。如需更多資訊,請參閱 第 19.4.10.2 節,「設定半同步複製」

您可以透過啟用系統變數 replication_sender_observe_commit_only(會限制回呼)和 replication_optimize_for_static_plugin_config(會新增共用鎖定並避免不必要的鎖定取得)來提高半同步複製的效能。這些設定在副本數量增加時很有幫助,因為鎖定的競爭可能會降低效能。半同步複製來源伺服器也可以透過啟用這些系統變數來獲得效能優勢,因為它們使用與副本相同的鎖定機制。