淺談我對Mysql高可用的理解

問題1:Mysql是如何保證不丟數(shù)據(jù)的?

眾所周知,事務(wù)一旦提交,則對數(shù)據(jù)的改變將永久有效,這是數(shù)據(jù)庫持久性的特性.那么Mysql是如何做到不丟數(shù)據(jù)的?什么是commit?事務(wù)commit時Mysql又做了什么?

數(shù)據(jù)的持久性機(jī)制依賴server層的binlog以及InnoDB存儲引擎層的redolog.
事務(wù)的commit操作本身,包含兩個階段的處理:
準(zhǔn)備階段:
server調(diào)用InnoDB寫入redolog

完成階段:
1.server寫入binlog
2.server調(diào)用InnoDB,寫入commit標(biāo)簽(在redolog中)

其中,事務(wù)提交是否成功,以binlog是否成功落盤為準(zhǔn).
場景1:
準(zhǔn)備階段失敗,redolog沒有寫入,則提交失敗,且數(shù)據(jù)一致.

場景2:
準(zhǔn)備階段成功,redolog寫入,完成階段server寫入binlog失敗,則提交失敗.此時數(shù)據(jù)不一致(存在redolog但不存在binlog).宕機(jī)恢復(fù)時,因為不存在binlog,因此需要對事務(wù)進(jìn)行回滾.

場景3
完成階段server寫入binlog成功,server調(diào)用InnoDB,寫入commit標(biāo)簽失敗,則提交成功.此時數(shù)據(jù)不一致(redolog中缺少commit標(biāo)志).宕機(jī)恢復(fù)時,補(bǔ)償寫入commit標(biāo)簽以及后續(xù)處理.

總結(jié),提交時的兩階段處理,可以保證數(shù)據(jù)的持久性,以及binlog和redolog內(nèi)部的一致性.

問題2:如何提高M(jìn)ysql可用性?

Mysql的ACID的特性保證了其單機(jī)的可靠性,但是存在單點風(fēng)險.
由此引出了主從架構(gòu)和復(fù)制的概念.

所謂復(fù)制,就是slave負(fù)責(zé)從master讀取binlog,并寫入自己的relaylog中,之后通過relaylog進(jìn)行重放,已達(dá)到數(shù)據(jù)同步的目的.

問題3:Mysql支持哪些復(fù)制以及對應(yīng)的優(yōu)缺點?

生產(chǎn)環(huán)境中常見的復(fù)制包含異步復(fù)制和半同步復(fù)制兩種.

異步復(fù)制就是在master事務(wù)提交后,立即給客戶端返回結(jié)果,將復(fù)制操作變?yōu)楫惒降?優(yōu)點是不會影響客戶端的響應(yīng)時效,缺點是無法保證主從間的數(shù)據(jù)一致性.如果master宕機(jī),則slave可能會丟失數(shù)據(jù).

半同步復(fù)制就是在事務(wù)提交后,結(jié)果返回給客戶端之前,增加了與slave見的復(fù)制和確認(rèn)過程,只有接到slave的ack后,才會返回給客戶端結(jié)果.相比異步復(fù)制,它增加了等待的時間,也即降低了客戶端響應(yīng)失效,但是保證了master與slave間的強(qiáng)一致性.

注意:如果master等待slave的ack時超時,則會降級為異步復(fù)制模式,所以生產(chǎn)中要將超時時間設(shè)置的足夠大,來保證半同步的有效性.

問題4:Mysql5.7之前半同步存在的問題?

Mysql5.7之前,半同步的復(fù)制流程為:
prepare(寫redolog)->寫binlog->寫commit標(biāo)志->復(fù)制->確認(rèn).
這對應(yīng)rpl_semi_sync_master_point=AFTER_COMMIT的配置.

復(fù)制發(fā)生在commit完成之后,因此在復(fù)制期間,客戶端拿到結(jié)果之前,事務(wù)結(jié)果已經(jīng)可見了.也就是說,其他會話會先于當(dāng)前會話看到事務(wù)結(jié)果.

為了解決這一問題,Mysql5.7增加了rpl_semi_sync_master_point=AFTER_SYNC的配置,將復(fù)制流程變?yōu)?
prepare(寫redolog)->寫binlog->復(fù)制->確認(rèn)->寫commit標(biāo)志.
也就是說復(fù)制和確認(rèn)發(fā)生在binlog寫入成功之后,InnoDBcommit之前,由此,在復(fù)制完成之前,其他會話不會看到當(dāng)前事務(wù)的結(jié)果.

問題5:主從架構(gòu)下,如何保證可用性的同時,確保數(shù)據(jù)一致性?

前文所述,事務(wù)的持久性是以binlog寫入是否成功為準(zhǔn)的.如果master在binlog寫入成功之后,復(fù)制之前發(fā)生宕機(jī),則slave沒有拿到master的binlog.此時如果為了高可用而進(jìn)行slave升主操作時,會導(dǎo)致丟數(shù)據(jù).

通常的解決方案是:在升主之前進(jìn)行主從之間的數(shù)據(jù)對比校驗,以確保數(shù)據(jù)一致性.

問題6:數(shù)據(jù)校驗期間Mysql不可寫如何解決?

通常通過多主從組,加數(shù)據(jù)分片和路由解決.當(dāng)某個master宕機(jī)時,將寫入請求導(dǎo)入另外的master,并在此期間對故障master進(jìn)行恢復(fù)和數(shù)據(jù)校驗.

另外,為了對機(jī)房斷電進(jìn)行容災(zāi),通常采用一機(jī)房雙master-slave,外加多機(jī)房的部署架構(gòu).

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挨厚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子糠惫,更是在濱河造成了極大的恐慌疫剃,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件硼讽,死亡現(xiàn)場離奇詭異巢价,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)固阁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門壤躲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人备燃,你說我怎么就攤上這事碉克。” “怎么了并齐?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵漏麦,是天一觀的道長客税。 經(jīng)常有香客問我,道長撕贞,這世上最難降的妖魔是什么更耻? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮捏膨,結(jié)果婚禮上秧均,老公的妹妹穿的比我還像新娘。我一直安慰自己号涯,他們只是感情好目胡,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著诚隙,像睡著了一般讶隐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上久又,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天巫延,我揣著相機(jī)與錄音,去河邊找鬼地消。 笑死炉峰,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的脉执。 我是一名探鬼主播疼阔,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼半夷!你這毒婦竟也來了婆廊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤巫橄,失蹤者是張志新(化名)和其女友劉穎淘邻,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體湘换,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡宾舅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了彩倚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筹我。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖帆离,靈堂內(nèi)的尸體忽然破棺而出蔬蕊,到底是詐尸還是另有隱情,我是刑警寧澤哥谷,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響涨醋,放射性物質(zhì)發(fā)生泄漏却特。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦餐曼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至孕似,卻和暖如春踩娘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背喉祭。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工养渴, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人泛烙。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓理卑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蔽氨。 傳聞我的和親對象是個殘疾皇子藐唠,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354