標籤:系統 cer exec tran out 分享 ber tab where
MySQL 組複製實現了基於複製協議的多主更新(單主模式)。
複製組由多個 server成員構成,並且組中的每個 server 成員可以獨立地執行事務。但所有讀寫(RW)事務只有在衝突檢測成功後才會提交。唯讀(RO)事務不需要在衝突檢測,可以立即提交。
對於任何 RW 事務,提交操作並不是由始發 server 單向決定的,而是由組來決定是否提交。準確地說,在始發 server 上,當事務準備好提交時,該 server 會廣播寫入值(已改變的行)和對應的寫入集(已更新的行的唯一識別碼)。然後會為該事務建立一個全域的順序。最終,這意味著所有 server 成員以相同的順序接收同一組事務。因此,所有 server 成員以相同的順序應用相同的更改,以確保組內一致。
組複製使您能夠根據在一組 server 中複製系統的狀態來建立具有冗餘的容錯系統。因此,只要它不是全部或多數 server 發生故障,即使有一些 server 故障,系統仍然可用,最多隻是效能和延展性降低,但它仍然可用。server 故障是孤立並且獨立的。它們由群組成員服務來監控,群組成員服務依賴於分布式故障檢測系統,其能夠在任何 server 自願地或由於意外停止而離開組時發出訊號。
他們是由一個分布式恢複程式來確保當有 server 加入組時,它們會自動更新組資訊到最新。並且多主更新確保了即使在單個伺服器故障的情況下也不會阻止更新,不必進行 server容錯移轉。因此,MySQL 組複製保證資料庫服務持續可用。
值得注意的一點是,儘管資料庫服務可用,但當有一個 server 崩潰時,串連到它的用戶端必須定向或容錯移轉到不同的 server。 這不是組複製要解決的問題;可以用mysql-router 或者其他中介軟體,比如mycat、altas等。
架構圖如下
限制
表需要有主鍵
採用GTID+binlog的方式進行複製
複製事件校正 binlog_checksum=none
Gap Locks不可用
多主模式下限制
隔離等級
官網建議使用READ COMMITTED層級,除非應用程式依賴於REPLEATABLE READ,RC模式下沒有GAP LOCK,比較好支援Innodb本身的衝突檢測機制何組複製的內部分布式檢測機制一起協同工作。不支援SERIALIZABLE隔離等級
外鍵
不建議使用級聯外鍵,如果使用必須配置group_replication_enforce_update_everywhere_checks=ON
DDL操作
多主不支援同一對象不同執行個體的並發的DDL+DML混合操作 ,MySQL5.7上的DDL不是原子操作無法復原,因此group replication沒有對DDL做衝突檢測,可能導致資料不一致;應用或中介軟體要能夠把所有的DDL語句轉到同一台MySQL上去執行。
本次測試環境
192.168.20.201 redis01
192.168.20.202 redis02
192.168.20.203 redis03
編輯my.cnf
mysql 5.7 Group Replication