重慶電子工程職業(yè)學(xué)院 計(jì)算機(jī)學(xué)院 朱崇來
MySQL作為一款開源的關(guān)系型數(shù)據(jù)庫(kù),一直以來是中小企業(yè)的數(shù)據(jù)存儲(chǔ)中心,MySQL采用數(shù)據(jù)復(fù)制技術(shù)實(shí)現(xiàn)數(shù)據(jù)備份與容災(zāi)。
MySQL5.5之前一直采用的是異步復(fù)制技術(shù),主庫(kù)在事務(wù)執(zhí)行時(shí),不會(huì)考慮從庫(kù)的數(shù)據(jù)備份同步問題,一旦主庫(kù)崩潰或是從庫(kù)落后備份,就會(huì)造成數(shù)據(jù)不一致。
MySQL5.5引入了半同步復(fù)制技術(shù),主庫(kù)在提交客戶端事務(wù)時(shí),必須要保證至少有一個(gè)從庫(kù)接收并寫到relaylog中。由于MySQL半同步復(fù)制的實(shí)現(xiàn)是建立在MySQL異步復(fù)制的基礎(chǔ)上的,在網(wǎng)絡(luò)出現(xiàn)異?;蛘卟环€(wěn)定下,如果從庫(kù)沒有收到事務(wù),也就是還沒有寫入到relay log 之前,此時(shí)剛好主庫(kù)崩潰了,系統(tǒng)切換到從機(jī),兩邊的數(shù)據(jù)就會(huì)出現(xiàn)不一致。 在此情況下,半同步復(fù)制退化成異步復(fù)制。這也是MySQL半同步復(fù)制存在的問題。
在2016年,MySQL在5.7引入了MySQL Group Replication是MySQL官方推出的一種基于Paxos協(xié)議的狀態(tài)機(jī)復(fù)制。簡(jiǎn)而言之,就是“一個(gè)組提交的事務(wù)都是可以并行回滾”,這些事務(wù)都已進(jìn)入到事務(wù)的prepare階段,則說明事務(wù)之間沒有任何沖突(否則就不可能提交),進(jìn)一步提高數(shù)據(jù)復(fù)制的強(qiáng)一致性。
MySQLGroup Replication是基于狀態(tài)機(jī)復(fù)制機(jī)制實(shí)現(xiàn)的,是一個(gè)MySQL插件,它建立在現(xiàn)有的MySQL復(fù)制基礎(chǔ)結(jié)構(gòu)上,集成了當(dāng)前的MySQL框架,它用到了binlog的緩存,slave應(yīng)用器,GTID,relay log,replication線程等服務(wù)基礎(chǔ)設(shè)施。MySQL Group Replication 的插件架構(gòu)如下圖1所示:
圖1 MySQL Group Replication 插件架構(gòu)
插件框架的最上層是隔離核心服務(wù)層的API接口層,上層用戶通過訪問API接口與核心層的服務(wù)功能插件通信,包括server的啟動(dòng)、恢復(fù)、接受連接、提交事務(wù)等,組復(fù)制插件根據(jù)相應(yīng)接口的調(diào)用做出相應(yīng)的響應(yīng)動(dòng)作。
核心服務(wù)插件層由capture、applier、recovery三個(gè)組件組成,capture組件是負(fù)責(zé)追蹤正在執(zhí)行的事務(wù)的信息;applier組件負(fù)責(zé)將遠(yuǎn)程事務(wù)加載到本地執(zhí)行;recovery組件主要管理組內(nèi)節(jié)點(diǎn)的最新狀態(tài),執(zhí)行事務(wù)回滾,直到和組內(nèi)的其他節(jié)點(diǎn)保持一致。
Replication協(xié)議層模塊實(shí)現(xiàn)了replication協(xié)議的邏輯,邏輯功能包括:處理沖突檢測(cè)、接收并傳播事務(wù)到組內(nèi)去執(zhí)行。
Group communication API是通信工具集的一種高級(jí)抽象,主要提供Paxos協(xié)議變種的核心實(shí)現(xiàn),綁定了corosync的接口,該接口實(shí)際上是corosync到client API的一個(gè)隱式映射。
MySQL組復(fù)制是一種可用于容錯(cuò)系統(tǒng)的技術(shù),它構(gòu)建在狀態(tài)機(jī)復(fù)制機(jī)制的基礎(chǔ)之上,并利用Paxos的原子廣播原理,實(shí)現(xiàn)多主機(jī)全更新的復(fù)制協(xié)議。復(fù)制組由多個(gè)節(jié)點(diǎn)構(gòu)造一個(gè)數(shù)據(jù)庫(kù)集群,組中的每個(gè)節(jié)點(diǎn)都可以獨(dú)立地執(zhí)行事務(wù)。所有讀寫(RW)事務(wù)只有在被組批準(zhǔn)后才會(huì)提交。只讀(RO)事務(wù)不需要在組內(nèi)協(xié)調(diào),可立即提交。當(dāng)一個(gè)事務(wù)在一個(gè)節(jié)點(diǎn)上提交之前,會(huì)在組內(nèi)自動(dòng)進(jìn)行原子性的廣播,告知其他節(jié)點(diǎn)變更了什么內(nèi)容、執(zhí)行了什么事務(wù),然后為該事務(wù)建立一個(gè)全局的序號(hào)。最終,通過Paxos來保證組內(nèi)事務(wù)數(shù)據(jù)一致。
Group Replication原子廣播的不是原始事務(wù)語句而是事務(wù)的Binlog Events。廣播模塊是嵌在事務(wù)執(zhí)行流程中的,不需要和客戶端交互。當(dāng)事務(wù)語句執(zhí)行完準(zhǔn)備提交時(shí),Group Replication會(huì)捕捉到事務(wù)的Binlog Events然后進(jìn)行原子廣播。
然而,不同的節(jié)點(diǎn)上執(zhí)行的事務(wù)之間有可能存在資源爭(zhēng)用,導(dǎo)致兩個(gè)不同的節(jié)點(diǎn)上并發(fā)執(zhí)行的事務(wù)發(fā)生沖突,因此在每個(gè)節(jié)點(diǎn)上都需要在Certify模塊進(jìn)行沖突檢測(cè),沖突檢測(cè)的過程是在每個(gè)模塊上單獨(dú)進(jìn)行的,不需要在各個(gè)節(jié)點(diǎn)之間交互,所有節(jié)點(diǎn)上的事務(wù)都是按照同樣的順序做的沖突檢測(cè)。所以任何一個(gè)事務(wù)在所有節(jié)點(diǎn)上的沖突檢測(cè)結(jié)果都是相同的。
從其工作的原理可以看出,Group Replication基于Paxos協(xié)議的一致性算法校驗(yàn)事務(wù)執(zhí)行是否有沖突,然后順序執(zhí)行事務(wù),達(dá)到最終的數(shù)據(jù)一致性。
(1)MySQL 數(shù)據(jù)庫(kù)組復(fù)制環(huán)境準(zhǔn)備
本實(shí)驗(yàn)環(huán)境的操作系統(tǒng)為CentOS6.8操作系統(tǒng),MySQL 數(shù)據(jù)庫(kù)版本為 MySQL-5.7.17。三臺(tái)名為master01、master02、master03機(jī)器上安裝了 MySQL 數(shù)據(jù)庫(kù)的服務(wù)器,每一臺(tái)機(jī)器的配置如下表1所示。
表1 MySQL 數(shù)據(jù)庫(kù)組復(fù)制環(huán)境配置列表
(2)數(shù)據(jù)庫(kù)主配文件定義/etc/my.cnf, 下面只對(duì)主要參數(shù)作出說明。
圖2 數(shù)據(jù)庫(kù)主配文件參數(shù)命令
(3)通道授權(quán),建立復(fù)制通道并授權(quán)。
圖3 數(shù)據(jù)庫(kù)授權(quán)命令
(4)安裝組復(fù)制插件,并啟動(dòng)。
(5)其余節(jié)點(diǎn)加入集群,其他節(jié)點(diǎn)按照2-4的步驟配置即可。
(6)集群驗(yàn)證∶創(chuàng)建測(cè)試數(shù)據(jù),進(jìn)行集群測(cè)試。在各個(gè)節(jié)點(diǎn)都能看到同步的測(cè)試數(shù)據(jù),說明集群搭建成功。
通過MySQL5.7的組復(fù)制實(shí)驗(yàn)測(cè)試結(jié)果表明:組復(fù)制模式配置比異步復(fù)制、半同步復(fù)制、簡(jiǎn)單高效。在組復(fù)制環(huán)境下,3臺(tái)MySQL實(shí)例組成的組復(fù)制結(jié)構(gòu)下,只要有1臺(tái)主機(jī)存活,整個(gè)MySQL服務(wù)就可用,在故障主機(jī)恢復(fù)之后,組復(fù)制會(huì)自動(dòng)同步數(shù)據(jù),恢復(fù)組復(fù)制狀態(tài),有效地提高了數(shù)據(jù)復(fù)制的一致性和可靠性。
[1]何小川. MySQL數(shù)據(jù)庫(kù)主從復(fù)制的實(shí)現(xiàn)[J].廣東通信技術(shù),2017(10).
[2]管文琦.金融行業(yè)MySQL數(shù)據(jù)庫(kù)可用方案的思考[J].中國(guó)金融電腦,2017(06).
[3]MySQL 5.5:Improving on the World’s Most Popular Open Source Database.Cabral,Sheeri K.Database Trends and Applications.2011:30.