1、組複製是個什麼鬼?html
先從 MySQL 的複製技術談起,首先是 MySQL 的異步複製mysql
異步複製模式下,Master上執行事務產生 binlog,slave 經過鏈接 master 抓取 binlog 的內容接收到本地的 relaylog 上,而後 apply 對應的事務,產生 slave 服務器上自身的 binlog(由--log-slave-update 參數決定)。流程圖以下:算法
其次是半同步複製,流程圖以下sql
異步複製模式下,若是 slave 所有宕機,則在 master 上的事務沒法同步到 slave 上,存在必定的數據安全風險。數據庫
半同步複製解決了數據安全風險的問題,在半同步環境下要求至少有一臺 slave 接收到 master 的binlog併成功寫入到本地的 relaylog, master 上的事務才能夠成功提交,這樣對主庫的事務提交速度會產生必定影響,半同步在數據安全和數據庫性能二者之間作了一箇中和。安全
在實際使用過程當中,能夠經過配置參數(rpl_semi_sync_master_timeout 單位是毫秒,默認爲10000,即10s)設定若 slave 在多長時間沒有ack返回,同步模式由半同步自動修改成異步同步模式。(mysql半同步工做原理和oracle dataguard的最大保護模式雷同) 服務器
組複製分單主模式和多主模式,mysql 的複製技術僅解決了數據同步的問題,若是 master 宕機,意味着數據庫管理員須要介入,應用系統可能須要修改數據庫鏈接地址或者重啓才能實現。(這裏也可使用數據庫中間件產品來避免應用系統數據庫鏈接的問題,例如 mycat 和 atlas 等產品)。組複製在數據庫層面上作到了,只要集羣中大多數主機可用,則服務可用,也就是說3臺服務器的集羣,容許其中1臺宕機。組複製的流程圖以下:網絡
組複製的特色:多線程
● 高一致性oracle
基於原生複製及 paxos 協議的組複製技術,並以插件的方式提供,提供一致數據安全保證;
● 高容錯性
只要不是大多數節點壞掉就能夠繼續工做,有自動檢測機制,當不一樣節點產生資源爭用衝突時,不會出現錯誤,按照先到者優先原則進行處理,而且內置了自動化腦裂防禦機制;
● 高擴展性
節點的新增和移除都是自動的,新節點加入後,會自動從其餘節點上同步狀態,直到新節點和其餘節點保持一致,若是某節點被移除了,其餘節點自動更新組信息,自動維護新的組信息;
● 高靈活性
有單主模式和多主模式,單主模式下,會自動選主,全部更新操做都在主上進行;
多主模式下,全部 server 均可以同時處理更新操做。
2、什麼樣的應用場景適合用組複製?
一、彈性的數據庫複製環境
組複製能夠靈活的增長和減小集羣中的數據庫實例
二、高可用的數據庫環境
組複製容許數據庫實例宕機,只要集羣中大多數服務器可用,則整個數據庫服務可用
三、替代傳統主從複製結構的數據庫環境
3、組複製的有哪些先決條件?
一、只支持innodb存儲引擎
二、每張表都須要有主鍵
三、只支持ipv4網絡環境
四、要求高網絡帶寬(一般是千兆內網)和低網絡延遲
如下的參數在mysql數據庫實例上必需要配置
一、--log-bin=bin-log #記錄mysql的binlog
二、--log-slave-update #記錄slave上進行apply relay-log時的binlog
三、--binlog-format=row #binlog的格式爲行模式
四、--gtid-mode=on #開啓gtid模式
五、--master-info-repository=TABLE #將master-info信息記錄到mysql表當中
六、--relay-log-info-repository=TABLE #將relay-log信息記錄到mysql表當中
七、--transaction-write-set-extraction=XXHASH64 #每一個事務收集的wirte set和encode使用xxhash64哈希算法
八、開啓多線程複製
--slave-parallel-workers=N #N爲具體的複製線程個數
--slave-preserve-commit-order=1 #slave上apply relay-log時事務順序提交
--slave-parallel-type=LOGICAL_CLOCK #使用多線程複製
4、組複製有哪些限制條件?
一、Replication Event Checksums
因爲代碼設計的緣由,目前組複製還不能支持binlog的checksum,若是要使用組複製,須要配置binlog-checksum=none
二、Gap Locks
組複製校驗的進程不支持間隙鎖,mysql間隙鎖的設計是爲了解決幻讀問題
三、Table Locks and Named Locks
組複製校驗的進程不支持表級鎖和named locks
四、SERIALIZABLE Isolation Level
組複製不支持串行事務級別
五、Concurrent DDL versus DML Operations
組複製的多主模式不支持並行的DDL和DML操做
六、Foreign Keys with Cascading Constraints
組複製的多主模式不支持帶有級聯約束類型的外鍵
七、Very Large Transactions
組複製不支持巨大的事務
參考:
https://dev.mysql.com/doc/refman/5.7/en/group-replication.html