Mysql高可用的主從同步方式

一金刁、背景介紹

Mysql作為 DB持久化層的組件,一般采用的是\color{red}{一主多從}的架構(gòu)模式级乐,在分布式疙咸,高可用的微服務(wù)背景下,那么\color{red}{主從之間復(fù)制}是如何實(shí)現(xiàn)數(shù)據(jù)同步的一致性风科?

高可用主從架構(gòu)

Mysql有三種主從復(fù)制同步方式:

  1. 全同步復(fù)制模式(組復(fù)制 MGR)
  2. 異步復(fù)制模式
  3. 半同步復(fù)制模式(version>5.5)撒轮。

值得注意的是,\color{red}{Mysql是默認(rèn)異步同步復(fù)制模式}贼穆,目前我司用的是半同步復(fù)制模式题山,下面來看看幾種主從復(fù)制同步方式的不同之處。

二故痊、異步復(fù)制模式

MySQL異步復(fù)制是主從復(fù)制過程中默認(rèn)的復(fù)制模式顶瞳。主從復(fù)制涉及三個(gè)線程,master I/O線程、slave I/O線程慨菱、slave sql線程焰络。因?yàn)槭钱惒綇?fù)制,所以master事務(wù)的提交符喝,不需要經(jīng)過slave的確認(rèn)闪彼,即master I/O線程提交事務(wù)后,不需要等待slave I/O線程的回復(fù)確認(rèn)协饲,master并不保證binlog一定寫入到了relay log中畏腕;而slave I/O把binlog寫入relay log后,由slave sql線程異步執(zhí)行應(yīng)用到slave mysql中茉稠,slave I/O也不需要slave sql的回復(fù)確認(rèn)描馅,并不保證relay log日志完整寫入到了mysql中。


異步復(fù)制模式

三战惊、半同步復(fù)制模式

在異步復(fù)制和全同步復(fù)制之間流昏,主庫在執(zhí)行完客戶端提交的事務(wù)后不是立刻返回給客戶端扎即,而是等待至少一個(gè)從庫接收到并寫到 relay log 中才返回成功信息給客戶端(只能保證主庫的 Binlog 至少傳輸?shù)搅艘粋€(gè)從節(jié)點(diǎn)上)吞获,否則需要等待直到超時(shí)時(shí)間然后切換成異步模式再提交。

相對(duì)于異步復(fù)制谚鄙,半同步復(fù)制提高了數(shù)據(jù)的安全性各拷,一定程度的保證了數(shù)據(jù)能成功備份到從庫,同時(shí)它也造成了一定程度的延遲闷营,但是比全同步模式延遲要低烤黍,這個(gè)延遲最少是一個(gè) TCP/IP 往返的時(shí)間。所以傻盟,半同步復(fù)制最好在低延時(shí)的網(wǎng)絡(luò)中使用速蕊。

半同步模式不是 MySQL 內(nèi)置的,從 MySQL 5.5 開始集成娘赴,需要 master 和 slave 安裝插件開啟半同步模式规哲,如圖Master節(jié)點(diǎn)接收到客戶端的細(xì)節(jié)Commit部分。

半同步復(fù)制模式

但是存在一個(gè)問題:若主庫的事務(wù)已經(jīng)提交了诽表,但是等到從庫 ack的消息時(shí)唉锌,主庫宕機(jī)了,那么將無法返回給客戶端提交的信息竿奏。

image.png

此時(shí)袄简,可能的情況有兩種:

事務(wù)還沒發(fā)送到從庫上

此時(shí),客戶端會(huì)收到事務(wù)提交失敗的信息泛啸,客戶端會(huì)重新提交該事務(wù)到新的主上绿语,當(dāng)宕機(jī)的主庫重新啟動(dòng)后,以從庫的身份重新加入到該主從結(jié)構(gòu)中,會(huì)發(fā)現(xiàn)吕粹,該事務(wù)在從庫中被提交了兩次伍纫,一次是之前作為主的時(shí)候,一次是被新主同步過來的昂芜。

事務(wù)已經(jīng)發(fā)送到從庫上

此時(shí)莹规,從庫已經(jīng)收到并應(yīng)用了該事務(wù),但是客戶端仍然會(huì)收到事務(wù)提交失敗的信息泌神,重新提交該事務(wù)到新的主上良漱。

針對(duì)上述潛在問題,Mysql5.7引入了一種新的半同步方案:Loss-Less半同步復(fù)制如下圖調(diào)整了Commit與Watting Slave dump的位置欢际。

image.png

四母市、全同步復(fù)制模式

指當(dāng)主庫執(zhí)行完一個(gè)事務(wù),然后所有的從庫都復(fù)制了該事務(wù)并成功執(zhí)行完才返回成功信息給客戶端损趋。因?yàn)樾枰却袕膸靾?zhí)行完該事務(wù)才能返回成功信息患久,所以全同步復(fù)制的模式的Mysql性能必然會(huì)受到嚴(yán)重的影響。

全復(fù)制模式流程

MySQL官方在5.7.17版本正式推出組復(fù)制(MySQL Group Replication浑槽,簡(jiǎn)稱MGR)

由若干個(gè)節(jié)點(diǎn)共同組成一個(gè)復(fù)制組蒋失,\color{red}{一個(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)多活方案帶來了希望嫌褪。

基于傳統(tǒng)異步復(fù)制和半同步復(fù)制的\color{red}{缺陷——數(shù)據(jù)的一致性問題無法保證}呀枢。

\color{red}{MGR環(huán)境下,服務(wù)器數(shù)量必須是3臺(tái)以上笼痛,并且是單數(shù)裙秋,實(shí)現(xiàn)2/n+1的算法}琅拌。

MGR模式
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市摘刑,隨后出現(xiàn)的幾起案子进宝,更是在濱河造成了極大的恐慌,老刑警劉巖枷恕,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件党晋,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡徐块,警方通過查閱死者的電腦和手機(jī)未玻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胡控,“玉大人扳剿,你說我怎么就攤上這事≈缂ぃ” “怎么了庇绽?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長橙困。 經(jīng)常有香客問我瞧掺,道長,這世上最難降的妖魔是什么纷宇? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任夸盟,我火速辦了婚禮,結(jié)果婚禮上像捶,老公的妹妹穿的比我還像新娘。我一直安慰自己桩砰,他們只是感情好拓春,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著亚隅,像睡著了一般硼莽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上煮纵,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天懂鸵,我揣著相機(jī)與錄音,去河邊找鬼行疏。 笑死匆光,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的酿联。 我是一名探鬼主播终息,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼夺巩,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了周崭?” 一聲冷哼從身側(cè)響起柳譬,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎续镇,沒想到半個(gè)月后美澳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡摸航,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年人柿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忙厌。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凫岖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出逢净,到底是詐尸還是另有隱情哥放,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布爹土,位于F島的核電站甥雕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏胀茵。R本人自食惡果不足惜社露,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望琼娘。 院中可真熱鬧峭弟,春花似錦、人聲如沸脱拼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽熄浓。三九已至情臭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赌蔑,已是汗流浹背俯在。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留娃惯,地道東北人跷乐。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像石景,于是被迫代替她去往敵國和親劈猿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拙吉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容