【MySQL】MGR集羣相關簡介

1.MGR簡介

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

2.原理簡單介紹

組複製是一種可用於實現容錯系統的技術。複製組是一個經過消息傳遞相互交互的Server集羣。複製組由多個Server成員組成,以下圖的Master一、Master二、Master3,全部成員獨立完成各自的事務。sql

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 ,強制檢查每一個組成員的級聯檢查,避免多主模式下執行級聯操做形成的檢測不到的衝突。code

4.參數規範

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

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

  • 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默認是讀已提交 。

相關文章
相關標籤/搜索