1. 程式人生 > >Group Replication的原理

Group Replication的原理

作者:宋利兵

來源:MySQL程式碼研究(mysqlcode)

以下是我在DTCC大會上的分享的《深入理解MySQL Group Replication》的核心內容Group Replication架構原理的PPT,分享給大家。

640?wx_fmt=png

640?wx_fmt=png

上圖是狀態機複製的簡單原理,其實MySQL的非同步複製也是狀態機複製。

640?wx_fmt=png

Group Replication使用了原子廣播系統的原理:

  • 每個節點上有一個廣播模組。

  • 每個廣播模組都能接收使用者的請求。

  • 廣播模組之間進行通訊,對請求進行全域性排序。最終每個節點的廣播模組上都會有一個順序完全一樣的請求佇列。

  • 廣播模組將佇列中的請求按照順序傳送給DB執行,符合狀態機複製的要求(按照同樣的順序執行同樣的操作)。因此所有DB的資料保持一致。

640?wx_fmt=png

640?wx_fmt=png

Group Replication在實現上有一些變化,但原理是一樣的。Group Replication廣播的不是原始事務語句而是事務的Binlog Events。因此廣播模組是嵌在事務執行流程中的,而不需要和客戶端互動。當事務語句執行完準備提交時,Group Replication會捕捉到事務的Binlog Events然後進行原子廣播。先執行,再全域性排序的方法會導致衝突。即當前事務排在另一個修改了同一行資料的事務的後面,但是執行卻在前面。因此需要做衝突檢測。

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

本地事務和遠端事務的執行流程不一樣,因此分別介紹。

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

事務在每個節點上都需要在Certify模組進行衝突檢測,不管是本地事務還是遠端事務。衝突檢測的過程是在每個模組上單獨進行的,不需要在各個節點之間互動。這裡其實是應用了狀態機複製的原理,所有節點上的事務都是按照同樣的順序做的衝突檢測。因此任何一個事務在所有節點上的衝突檢測結果都是相同的。

  • 如果事務在一個節點上認證成功了,那麼在其他節點上肯定也是成功的。

  • 如果事務在一個節點上認證失敗了,那麼在其他節點上肯定也是失敗的。

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

衝突檢測有兩個因素:

  1. 事務是否修改了同樣的資料(以行為單位,通過主鍵識別)。

  2. 是否是同時修改的。通過事務執行時的資料庫快照版本來判定。資料庫的快照是用GTID SET來標識的。事務提交前從全域性變數gtid_executed中獲取GTID SET。這個GTID SET就是代表了當前事務在提交前,資料庫中已經執行了的GTIDs。也即是當前事務提交前,資料庫的快照版本。資料庫的快照版本會隨著事務的Binlog Events一起廣播到其他的節點上,用來做衝突檢測。

由於時間原因,以下部分未能在DTCC上分享給大家。這裡一併分享給大家。

640?wx_fmt=png

衝突檢測資料庫中記錄了已經通過認證的事務所修改的主鍵和一個GTID SET。

640?wx_fmt=png

衝突檢測時,從衝突檢測資料庫中找到當前事務修改的資料的記錄。如果沒有找到,就沒有衝突。如果找到了,則將自己的快照版本和衝突檢測資料庫中記錄的GTID SET進行比對:

  • 如果自己的快照版本中包含了衝突檢測資料庫中記錄的所有GTIDs,那麼就沒有衝突。自己的快照中包含了,說明該事務在初始節點上執行時,上一次對本行資料的修改已經在初始節點上提交了。所以就不是同時執行的。

  • 如果自己的快照版本中沒有包含衝突檢測資料庫中記錄的所有GTIDs,則說明當前事務在初始節點上執行時,上一次對本行資料的修改還沒有在初始節點上執行。因此判定為同時執行。

640?wx_fmt=png

認證成功後,要更新衝突檢測資料庫。更新後的GTID SET是當前事務的快照版本+當前事務的GTID。

640?wx_fmt=png

認證失敗,不需要更新衝突檢測資料庫。

推薦訂閱原文作者 宋利兵 的公眾號 MySQL程式碼研究

640?wx_fmt=jpeg

相關推薦

Group Replication原理

作者:宋利兵 來源:MySQL程式碼研究(mysqlcode) 以下是我在DTCC大會上的分享的《深入理解MySQL Group Replication》的核心內容Group Replication架構原理的PPT,分享給大家。 上圖是狀態機

Mysql group replication複製原理

前言:          Mysql版本5.7.17推出Mysql group replication(組複製),相對以前傳統的複製模式(非同步複製模式async replication 及半同步複製模式semi-sync replication),一個主,對應一個或多

MySQL 5.7.17 Group Replication搭建

mysql mgr 組復制基於組復制的強大功能在MySQL 5.7.17之後以插件的形式實現,本文講述在單機多實例基礎上搭建組復制測試環境環境說明:操作系統: CentOS Linux release 7.3.1611 (Core) 內核版本: Linux version 3.10.0-514.6

MySQL group replication介紹

group replication“MySQL group replication”group replication是MySQL官方開發的一個開源插件,是實現MySQL高可用集群的一個工具。第一個GA版本正式發布於MySQL5.7.17中;想要使用group replication只需要從官網上下載MySQ

MySQL group replication

出現 上下 art 處理 自動創建 mit 排序 主從 同時 本篇文章主要講解MySQL group replication介紹,文中有關MySQL,group的內容,希望對大家有所幫助。 “MySQL group replication” group replicatio

Mysql Group Replication 簡介及單主模式組復制配置【轉】

ror ipv4 mysql命令 value tail force action dmi where 一 Mysql Group Replication簡介 Mysql Group Replication(MGR)是一個全新的高可用和高擴張的MySQL集群服務。

【環境部署】centos7安裝mysql-5.7.19 group-replication

mysql初始化 add path data state mysqld _for boot serve --mysql高可用官方文檔: https://dev.mysql.com/doc/refman/5.7/en/group-replication.html mysql

Mysql Group Replication 簡析

group http 9.png tex 圖片 關於 clas png src 前段時間做了組內分享,寫的關於mysql Group Replication 文章             3, 高擴展     

MySQL Group Replication(多主同步復制MGR)

update mod src xtra sla class replicat local trac 開啟replication配置: server-id=1 #標識服務器唯一 log-bin=mys

搭建 MySQL 8.0 Group Replication

mysql1、修改配置文件,添加以下內容server_id=1gtid_mode=ONenforce_gtid_consistency=ONbinlog_checksum=NONEtransaction_write_set_extraction=XXHASH64loose-group_replication_

HBase的replication原理及部署

建表 ted 以及 borde 有一個 AS amp 為我 數據字典 一、hbase replication原理 hbase 的復制方式是 master-push 方式,即主集群推的方式,主要是因為每個rs都有自己的WAL。 一個master集群可以復制給多個從集群,復制是

MySQL Group Replication (MGR) 安裝

exit ever 信息采集 false 操作記錄 create .so lob 一個 MySQL Group Replication 安裝 192.168.10.65192.168.10.66192.168.10.67 OS : CentOS 7.4mysql soft

MySQL Group Replication(組複製MGR)

MGR基本要求: 1、InnoDB儲存引擎 2、主鍵,每個表必須具有已定義的主鍵或等效的主鍵,其中等效項是非null唯一鍵 3、IPv4網路 4、網路效能 5、開啟二進位制日誌並開啟GTID模式 6、mysql版本在5.7.17以上 MGR限制: 1、組複製不支援mysiam引擎 2、不支援

MySQL資料庫之如何更好的建立高可用資料庫系統之引擎特性----Group Replication核心解析

背景 為了建立高可用資料庫系統,傳統的實現方式是建立一個或多個備用的資料庫例項,原有的資料庫例項通常稱為主庫master,其它備用的資料庫例項稱為備庫或從庫slave。當master故障無法正常工作後,slave就會接替其工作,保證整個資料庫系統不會對外中斷服務。master與slaver的切換

Mysql group replication

(每臺)安裝元件: 注意:在單個主機上執行的多例項。需要在my.cnf中增加此選項 放在每個選項[mysqld3306]的下面 :report_host=127.0.0.1 並且:skip-name-resolve mysql > INSTALL PLUG

MySQL高可用框架--組複製(group replication)搭建測試

一、框架搭建1.首先備份主庫資料,有兩種方法,冷備份和熱備份。冷備份需要先停止master服務,sudo/etc/init.d/mysql stop,然後通過cp或者scp等命令將資料檔案傳輸到指定資料夾,這裡我選擇在一臺伺服器上啟動三個例項來搭建組複製,所以就用sudo c

Mysql group replication(MGR)實現高可用切換應用無感知方案的思考

一開始考慮使用ProxySQL+MGR來實現資料庫切換應用無感知方向,考慮了可能的兩種部署模型的優缺點:ProxySQL部署的兩種模型:1、靠近應用端方式:在應用伺服器上直接部署優點:  A、每個應用伺服器有自己的配置 ,配置內容簡單,不容易相互影響故障,變更故障風險最小 

MySQL Group Replication 介紹

2016-12-12,一個重要的日子,mysql5.7.17 GA版釋出,正式推出Group Replication(組複製) 外掛,通過這個外掛增強了mysql原有的高可用方案(原有的Replication方案),提供了重要的特性——多寫,保證組內高可用,確保

Mysql Group Replication關閉和啟動所有的組成員的注意點

由於的我mgr建立在虛擬機器上面(即使是正式環境,如果計劃內的停機或者斷電都需要關閉所有的節點),如何關閉所有的組成員,關閉的順序還是比較重要的。我的環境是一個primary,多個slave的架構,qht131為parmary,其它qht132,qht133,qht134為s

Centos6.8 下 部署Mysql組複製(MySQL Group Replication)之多主模式(5.7新特性)

MySQL Group Replication(簡稱MGR)是MySQL官方於2016年12月推出的一個全新的高可用與高擴充套件的解決方案。MySQL組複製提供了高可用、高擴充套件、高可靠的MySQL叢集服務。 1.關於MGR介紹 1.1提供的特性: