原創: 管長龍 fan譯mysql
標籤:Group Communication System, Group Replication, High Availability, XComsql
MySQL 8.0.16 已經發布,它像往常同樣加強了組複製 Group Replication 功能。spa
這篇文章介紹了 MySQL 8.0.16 爲 Group Replication 帶來的新功能:插件
Message fragmentation(信息碎片化)。線程
Group Replication 目前使用 XCom(一種組通訊引擎),特色:原子性,組員狀態檢測等。每一個成員的組複製插件先將信息轉發到本地 XCom,再由 XCom 最終以相同的順序將信息傳遞給每一個組成員的 Group Replication 插件。3d
XCom 由單線程實現。當一些成員廣播信息過大時,XCom 線程必須花費更多的時間來處理那個大信息。若是成員的 XCom 線程忙於處理大信息的時間過長,它可能會去查看其餘成員的 XCom 實例。例如,忙碌的成員失效。若是是這樣,該組能夠從該組中驅逐忙碌的成員。blog
MySQL 8.0.13 新增 group_replication_member_expel_timeout 系統變量,您能夠經過它來調整將成員從組中驅逐的時間。例如,懷疑成員失敗,但成員實際上忙於處理大信息,給成員足夠的時間來完成處理。在這種狀況下,是否爲成員增長驅逐超時的設置是一種權衡。有可能等了好久,該成員實際真的失效了。get
MySQL 8.0.16 的 Group Replication 插件新增用來處理大信息的功能:信息碎片化。it
簡而言之,您能夠爲成員的廣播信息指定最大值。超過最大值的信息將分段爲較小的塊傳播。io
您可使用 group_replication_communication_max_message_size 系統變量指定容許的信息最大值(默認值爲10 MiB)。
讓咱們用一個例子來解釋新功能。圖1顯示了當綠色成員向組廣播信息時,新功能是如何處理的。
1. 若是信息大小超過用戶容許的最大值(group_replication_communication_max_message_size),則該成員會將信息分段爲不超過最大值的塊。
2. 該成員將每一個塊廣播到該組,即將每一個塊單獨轉發到XCom。
XCom 最終將這些塊提供給組成員。下面三張圖展現出了中間綠色成員發送大信息時工做的新特徵。
3. 成員得出結論,傳入的信息其實是一個更大信息的片斷。
4. 成員緩衝傳入的片斷,由於他們認爲片斷是仍然不完整的信息的一部分。(片斷包含必要的元數據以達到這個結論。)
5. 見上面的第3步。
6. 見上面的第4步。
7. 成員得出結論,傳入的信息其實是一個更大信息的片斷。
8. 成員得出結論,傳入的片斷是最後一個缺失的塊,從新組合原始信息,而後對其進行處理,傳輸完畢。
MySQL 8.0.16 已經發布後,組複製如今能夠確保組內交換的信息大小不超過用戶定義的閾值。這能夠防止組內誤判而驅逐成員。
參考:https://mysqlhighavailability.com/enhanced-support-for-large-transactions-in-group-replication/