您好,登錄后才能下訂單哦!
MySQL Group Replication(MGR)是MySQL官方在5.7.17版本引進的一個數據庫高可用與高擴展的解決方案,以插件形式提供。MGR基于分布式paxos協議,實現組復制,保證數據一致性。內置故障檢測和自動選主功能,只要不是集群中的大多數節點都宕機,就可以繼續正常工作。提供單主模式與多主模式,多主模式支持多點寫入。
組復制是一種可用于實現容錯系統的技術。復制組是一個通過消息傳遞相互交互的Server集群。復制組由多個Server成員組成,如下圖的Master1、Master2、Master3,所有成員獨立完成各自的事務。
當客戶端發起一個更新事務時,該事務先在本地執行,執行完成之后就要發起對事務的提交操作。在還沒有真正提交之前,需要將產生的復制寫集廣播出去,復制到其它成員。如果沖突檢測成功,組內決定該事務可以提交,其它成員可以應用,否則就回滾。
最終,所有組內成員以相同的順序接收同一組事務。因此組內成員以相同的順序應用相同的修改,保證組內數據強一致性。
? 為什么需要使用innodb引擎呢?在MySQL Group Replication中,事務以樂觀形式執行,但是在提交時檢查沖突,如果存在沖突,則會在某些實例上回滾事務,保持各個實例的數據一致性,那么,這就需要使用到 事務存儲引擎,同事Innodb提供一些額外的功能,可以更好的管理和處理沖突,所以建議 業務使用表格使用inndb存儲引擎,類似于系統表格mysql.user使用MyISAM引擎的表格,因為極少修改及添加,極少出現沖突情況。
? 每個需要復制的表格都必須定義一個顯式主鍵,注意跟隱式主鍵區分(使用Innodb引擎的表格,如果沒有指定主鍵,默認選擇第一個非空的唯一索引作為主鍵,如果沒有,則自動創建一個6個字節的rowid隱式主鍵)。這個主鍵能在沖突發生時啟動極其重要的作用,同時,能夠有效提高relay log的執行效率。
? 官網建議使用READ COMMITTED級別,除非應用程序依賴于REPLEATABLE READ,RC模式下沒有GAP LOCK,比較好支持Innodb本身的沖突檢測機制何組復制的內部分布式檢測機制一起協同工作。不支持SERIALIZABLE隔離級別。
? 不建議使用級聯外鍵,如果舊庫本身有外鍵,業務上無法去除并且使用的是多主模式,那么,請配置 group_replication_enforce_update_everywhere_check ,強制檢查每個組成員的級聯檢查,避免多主模式下執行級聯操作造成的檢測不到的沖突。
因前期創建實例大多采取默認配置 導致開發,測試,生產等環境間數據庫參數不同 對程序運行有一定的影響。 以后創建實例將會參數規范化 對已有的實例后續也會慢慢修正 。
下面簡單解釋下幾個改動的參數
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_timeout
和interactive_timeout
參數控制空閑連接的時長 當連接空閑時間超過此參數則會被斷開 以后會統一設置為1800s即30分鐘
transaction_isolation
事務隔離級別 MySQL官方默認是可重復讀(repeatable-read)目前單實例及主從架構的mysql采用了此級別,MGR集群將采取讀已提交(read-committed)級別。Oracle默認是讀已提交 。免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。