mysql 高可用 MGR

轉(zhuǎn)自:https://www.cnblogs.com/nothingonyou/p/12145348.html

一. 背景介紹
基于傳統(tǒng)異步復(fù)制和半同步復(fù)制的缺陷——數(shù)據(jù)的一致性問題無(wú)法保證,MySQL官方在5.7.17版本正式推出組復(fù)制(MySQL Group Replication,簡(jiǎn)稱MGR)。

由若干個(gè)節(jié)點(diǎn)共同組成一個(gè)復(fù)制組,一個(gè)事務(wù)的提交,必須經(jīng)過組內(nèi)大多數(shù)節(jié)點(diǎn)(N / 2 + 1)決議并通過,才能得以提交。如上圖所示,由3個(gè)節(jié)點(diǎn)組成一個(gè)復(fù)制組,Consensus層為一致性協(xié)議層,在事務(wù)提交過程中,發(fā)生組間通訊,由2個(gè)節(jié)點(diǎn)決議(certify)通過這個(gè)事務(wù),事務(wù)才能夠最終得以提交并響應(yīng)。

引入組復(fù)制,主要是為了解決傳統(tǒng)異步復(fù)制和半同步復(fù)制可能產(chǎn)生數(shù)據(jù)不一致的問題。組復(fù)制依靠分布式一致性協(xié)議(Paxos協(xié)議的變體),實(shí)現(xiàn)了分布式下數(shù)據(jù)的最終一致性,提供了真正的數(shù)據(jù)高可用方案(是否真正高可用還有待商榷)。其提供的多寫方案,給我們實(shí)現(xiàn)多活方案帶來(lái)了希望。

1.MGR特點(diǎn)
MySQL Group Replication(MGR)是MySQL官方在5.7.17版本引進(jìn)的一個(gè)數(shù)據(jù)庫(kù)高可用與高擴(kuò)展的解決方案,以插件形式提供,實(shí)現(xiàn)了分布式下數(shù)據(jù)的最終一致性,總結(jié)MGR特點(diǎn)如下:

  • 高一致性:基于分布式paxos協(xié)議實(shí)現(xiàn)組復(fù)制,保證數(shù)據(jù)一致性;
  • 高容錯(cuò)性:自動(dòng)檢測(cè)機(jī)制,只要不是大多數(shù)節(jié)點(diǎn)都宕機(jī)就可以繼續(xù)工作,內(nèi)置防腦裂保護(hù)機(jī)制;
  • 高擴(kuò)展性:節(jié)點(diǎn)的增加與移除會(huì)自動(dòng)更新組成員信息,新節(jié)點(diǎn)加入后,自動(dòng)從其他節(jié)點(diǎn)同步增量數(shù)據(jù),直到 與其他節(jié)點(diǎn)數(shù)據(jù)一致;
  • 高靈活性:提供單主模式和多主模式,單主模式在主庫(kù)宕機(jī)后能夠自動(dòng)選主,所有寫入都在主節(jié)點(diǎn)進(jìn)行,多主模式支持多節(jié)點(diǎn)寫入。

2.組復(fù)制故障檢測(cè)
故障檢測(cè)是提供關(guān)于哪些 server 可能已死的信息(猜測(cè))的分布式服務(wù)。 某個(gè) server 無(wú)響應(yīng)時(shí)觸發(fā)猜測(cè),組中其余成員進(jìn)行協(xié)調(diào)決定以排除給定成員。如果某個(gè) server 與組的其余成員隔離,則它會(huì)懷疑所有其他 server 都失敗了。由于無(wú)法與組達(dá)成協(xié)議(因?yàn)樗鼰o(wú)法確保仲裁成員數(shù)),其懷疑不會(huì)產(chǎn)生后果。當(dāng)服務(wù)器以此方式與組隔離時(shí),它無(wú)法執(zhí)行任何本地事務(wù)。 在線 server 列表通常稱為視圖,新成員server的加入離開,無(wú)論是自愿還是被迫的離開,該組都會(huì)動(dòng)態(tài)地重新規(guī)劃其配置,并觸發(fā)視圖更新。

3.組復(fù)制的限制

  • 存儲(chǔ)引擎必須為Innodb,即僅支持InnoDB表,并且每張表一定要有一個(gè)主鍵,用于做write set的沖突檢測(cè);
  • 每個(gè)表必須提供主鍵;
  • 只支持ipv4,網(wǎng)絡(luò)需求較高;
  • 必須打開GTID特性,二進(jìn)制日志格式必須設(shè)置為ROW,用于選主與write set;
  • COMMIT可能會(huì)導(dǎo)致失敗,類似于快照事務(wù)隔離級(jí)別的失敗場(chǎng)景;
  • 目前一個(gè)MGR集群組最多支持9個(gè)節(jié)點(diǎn);
  • 不支持外鍵于save point特性,無(wú)法做全局間的約束檢測(cè)與部分部分回滾;
  • 二進(jìn)制日志binlog不支持Replication event checksums;
  • 多主模式(也就是多寫模式) 不支持SERIALIZABLE事務(wù)隔離級(jí)別;
  • 多主模式不能完全支持級(jí)聯(lián)外鍵約束;
  • 多主模式不支持在不同節(jié)點(diǎn)上對(duì)同一個(gè)數(shù)據(jù)庫(kù)對(duì)象并發(fā)執(zhí)行DDL(在不同節(jié)點(diǎn)上對(duì)同一行并發(fā)進(jìn)行RW事務(wù),后發(fā)起的事務(wù)會(huì)失敗);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容