【MySQL】MGR集羣相關簡介

1.MGR簡介

MySQL Group Replication(MGR)是MySQL官方在5.7.17版本引進的一個數據庫高可用與高擴展的解決方案,以插件形式提供。MGR基於分佈式paxos協議,實現組複製,保證數據一致性。內置故障檢測和自動選主功能,只要不是集羣中的大多數節點都宕機,就可以繼續正常工作。提供單主模式與多主模式,多主模式支持多點寫入。

2.原理簡單介紹

組複製是一種可用於實現容錯系統的技術。複製組是一個通過消息傳遞相互交互的Server集羣。複製組由多個Server成員組成,如下圖的Master1、Master2、Master3,所有成員獨立完成各自的事務。

mgr.jpg

當客戶端發起一個更新事務時,該事務先在本地執行,執行完成之後就要發起對事務的提交操作。在還沒有真正提交之前,需要將產生的複製寫集廣播出去,複製到其它成員。如果衝突檢測成功,組內決定該事務可以提交,其它成員可以應用,否則就回滾。

最終,所有組內成員以相同的順序接收同一組事務。因此組內成員以相同的順序應用相同的修改,保證組內數據強一致性。

3.使用限制

3.1 僅支持innodb引擎

​ 爲什麼需要使用innodb引擎呢?在MySQL Group Replication中,事務以樂觀形式執行,但是在提交時檢查衝突,如果存在衝突,則會在某些實例上回滾事務,保持各個實例的數據一致性,那麼,這就需要使用到 事務存儲引擎,同事Innodb提供一些額外的功能,可以更好的管理和處理衝突,所以建議 業務使用表格使用inndb存儲引擎,類似於系統表格mysql.user使用MyISAM引擎的表格,因爲極少修改及添加,極少出現衝突情況。

3.2 主鍵

​ 每個需要複製的表格都必須定義一個顯式主鍵,注意跟隱式主鍵區分(使用Innodb引擎的表格,如果沒有指定主鍵,默認選擇第一個非空的唯一索引作爲主鍵,如果沒有,則自動創建一個6個字節的rowid隱式主鍵)。這個主鍵能在衝突發生時啓動極其重要的作用,同時,能夠有效提高relay log的執行效率。

3.3 隔離級別

​ 官網建議使用READ COMMITTED級別,除非應用程序依賴於REPLEATABLE READ,RC模式下沒有GAP LOCK,比較好支持Innodb本身的衝突檢測機制何組複製的內部分佈式檢測機制一起協同工作。不支持SERIALIZABLE隔離級別。

3.4 外鍵

​ 不建議使用級聯外鍵,如果舊庫本身有外鍵,業務上無法去除並且使用的是多主模式,那麼,請配置 group_replication_enforce_update_everywhere_check ,強制檢查每個組成員的級聯檢查,避免多主模式下執行級聯操作造成的檢測不到的衝突。

4.參數規範

因前期創建實例大多采取默認配置 導致開發,測試,生產等環境間數據庫參數不同 對程序運行有一定的影響。 以後創建實例將會參數規範化 對已有的實例後續也會慢慢修正 。

下面簡單解釋下幾個改動的參數

  • sql_mode 去除了ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE等限制 採取了較爲寬鬆的模式

  • lower_case_table_names 統一設置爲1 即不區分大小寫 有些實例還沒更改 大家建表建庫的時候不要大寫

  • character-set-server 統一設置爲utf8 不要用latin1字符集

  • wait_timeoutinteractive_timeout參數控制空閒連接的時長 當連接空閒時間超過此參數則會被斷開 以後會統一設置爲1800s即30分鐘

  • transaction_isolation 事務隔離級別 MySQL官方默認是可重複讀(repeatable-read)目前單實例及主從架構的mysql採用了此級別,MGR集羣將採取讀已提交(read-committed)級別。Oracle默認是讀已提交 。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章