MySQL高可用化

服務(wù)在運(yùn)行過程中存在很多意外情況,如:如服務(wù)器宕機(jī)帜羊、磁盤損壞咒程、RAID卡損壞等。如何保證數(shù)據(jù)庫在服務(wù)發(fā)生意外的情況下數(shù)據(jù)不丟失呢讼育?服務(wù)還能繼續(xù)提供服務(wù)呢帐姻?

我們一般通過備份的方式來解決數(shù)據(jù)丟失問題,通過復(fù)制來解決MySQL的高可用問題窥淆。

備份

備份的方法不同可以將備份分為:

  • Hot Backup(熱備卖宠,在線備份):在數(shù)據(jù)運(yùn)行過程中進(jìn)行備份,對數(shù)據(jù)庫操作沒有影響忧饭。
  • Cold Backup(冷備扛伍,離線備份):在數(shù)據(jù)停止情況下,直接拷貝數(shù)據(jù)庫物理文件词裤。
  • Warm Backup(溫備):在數(shù)據(jù)運(yùn)行過程中進(jìn)行刺洒,但是會對當(dāng)前數(shù)據(jù)庫的操作有所影響,如加一個全局讀鎖以保證備份數(shù)據(jù)的一致性吼砂。

按照備份后文件的內(nèi)容逆航,備份又可以分為:

  • 邏輯備份:是指備份出的文件內(nèi)容是可讀的,一般是文本文件渔肩。內(nèi)容一般是由一條條SQL語句因俐,或者是表內(nèi)實(shí)際數(shù)據(jù)組成。一般適用于數(shù)據(jù)庫的升級周偎、遷移等工作抹剩。但其缺點(diǎn)是恢復(fù)所需要的時間往往較長。
  • 裸文件備份:是指復(fù)制數(shù)據(jù)庫的物理文件蓉坎,既可以是在數(shù)據(jù)庫運(yùn)行中的復(fù)制(如ibbackup澳眷、xtrabackup這類工具),也可以是在數(shù)據(jù)庫停止運(yùn)行時直接的數(shù)據(jù)文件復(fù)制蛉艾。這類備份的恢復(fù)時間往往較邏輯備份短很多钳踊。

若按照備份數(shù)據(jù)庫的內(nèi)容來分衷敌,備份又可以分為:

  • 完全備份:完全備份是指對數(shù)據(jù)庫進(jìn)行一個完整的備份。
  • 增量備份:增量備份是指在上次完全備份的基礎(chǔ)上拓瞪,對于更改的數(shù)據(jù)進(jìn)行備份缴罗。
  • 日志備份:日志備份主要是指對MySQL數(shù)據(jù)庫二進(jìn)制日志的備份,通過對一個完全備份進(jìn)行二進(jìn)制日志的重做(replay)來完成數(shù)據(jù)庫的point-in-time的恢復(fù)工作祭埂。

復(fù)制

復(fù)制(replication)是MySQL數(shù)據(jù)庫提供的一種高可用高性能的解決方案瞒爬,一般用來建立大型的應(yīng)用,原理如下:

image.png
  1. 主服務(wù)器(master)把數(shù)據(jù)更改記錄到二進(jìn)制日志(binlog)中沟堡,然后通過binary log dump線程將二進(jìn)制文件推送到從服務(wù)器。
  2. 從服務(wù)器(slave)通過I/O線程矢空,把主服務(wù)器的二進(jìn)制日志復(fù)制到自己的中繼日志(relay log)中航罗,中繼日志通常會位于os緩存中,所以中繼日志的開銷很小屁药。
  3. 從服務(wù)器通過SQL線程重做中繼日志中的日志粥血,把更改應(yīng)用到自己的數(shù)據(jù)庫上,以達(dá)到數(shù)據(jù)的最終一致性酿箭。

從服務(wù)器有2個線程复亏,一個是I/O線程,負(fù)責(zé)讀取主服務(wù)器的二進(jìn)制日志缭嫡,并將其保存為中繼日志缔御;另一個是SQL線程,復(fù)制執(zhí)行中繼日志妇蛀。這里需要特別注意的是耕突,復(fù)制是一個異步過程,從服務(wù)器數(shù)據(jù)存在延遲评架。

MySQL二進(jìn)制日志文件Binlog有三種格式眷茁,StatementRowMixed纵诞,所以MySQL的復(fù)制也對應(yīng)有三種方式上祈。

異步復(fù)制

image.png

主庫執(zhí)行完Commit后,在主庫寫入Binlog日志后即可成功返回客戶端浙芙,無需等Binlog日志傳送給從庫登刺。

半同步復(fù)制

image.png

在 MySQL5.5之前,MySQL的復(fù)制是異步操作茁裙,主庫和從庫的數(shù)據(jù)之間存在一定的延遲塘砸,這樣存在一個隱患:當(dāng)在主庫上寫人一個事務(wù)并提交成功,而從庫尚未得到主庫推送的Binlog日志時晤锥,主庫宕機(jī)了掉蔬,例如主庫可能因磁盤損壞廊宪、內(nèi)存故障等造成主庫上該事務(wù) Binlog丟失,此時從庫就可能損失這個事務(wù)女轿,從而造成主從不一致箭启。

而半同步復(fù)制,是等待其中一個從庫也接收到Binlog事務(wù)并成功寫入Relay Log之后蛉迹,才返回Commit操作成功給客戶端傅寡;如此半同步就保證了事務(wù)成功提交后至少有兩份日志記錄,一份在主庫Binlog上北救,另一份在從庫的Relay Log上荐操,從而進(jìn)一步保證數(shù)據(jù)完整性;半同步復(fù)制很大程度取決于主從網(wǎng)絡(luò)RTT(往返時延)珍策,以插件 semisync_master/semisync_slave 形式存在托启。

集群

使用集群可以提高M(jìn)ySQL服務(wù)器的可用性和性能,MySQL服務(wù)支持多種集群方案攘宙。

MySQL Cluster

由Mysql本身提供屯耸,優(yōu)勢:可用性非常高,性能非常好蹭劈。每份數(shù)據(jù)至少可在不同主機(jī)存一份拷貝疗绣,且冗余數(shù)據(jù)拷貝實(shí)時同步。但它的維護(hù)非常復(fù)雜铺韧,存在部分Bug多矮,目前還不適合比較核心的線上系統(tǒng),所以不推薦哈打。

DRBD磁盤網(wǎng)絡(luò)鏡像

Distributed Replicated Block Device工窍,其實(shí)現(xiàn)方式是通過網(wǎng)絡(luò)來鏡像整個設(shè)備(磁盤)。它允許用戶在遠(yuǎn)程機(jī)器上建立一個本地塊設(shè)備的實(shí)時鏡像前酿,與心跳鏈接結(jié)合使用患雏,也可看做一種網(wǎng)絡(luò)RAID。

優(yōu)勢:軟件功能強(qiáng)大罢维,數(shù)據(jù)可在底層快設(shè)備級別跨物理主機(jī)鏡像淹仑,且可根據(jù)性能和可靠性要求配置不同級別的同步。IO操作保持順序肺孵,可滿足數(shù)據(jù)庫對數(shù)據(jù)一致性的苛刻要求匀借。

但非分布式文件系統(tǒng)環(huán)境無法支持鏡像數(shù)據(jù)同時可見,性能和可靠性兩者相互矛盾平窘,無法適用于性能和可靠性要求都比較苛刻的環(huán)境吓肋,維護(hù)成本高于MySQL Replication。另外瑰艘,DRBD也是官方推薦的可用于MySQL高可用方案之一是鬼,所以這個大家可根據(jù)實(shí)際環(huán)境來考慮是否部署肤舞。

MySQL Replication

MySQL的復(fù)制上在實(shí)際應(yīng)用場景中使用最多的一種方案,主要優(yōu)勢是成本低均蜜,實(shí)現(xiàn)起來比較簡單李剖,缺點(diǎn)是從服務(wù)器存在一定的延遲。

常用架構(gòu)

一主多從囤耳,提高系統(tǒng)的讀性能

image.png

一主一從和一主多從是最常見的主從架構(gòu)篙顺,實(shí)施起來簡單并且有效,主要用來實(shí)現(xiàn)讀寫分離充择,提升度的性能德玫,降低主庫壓力,在主庫出現(xiàn)異常宕機(jī)的情況下椎麦,可以把一個從庫切換為主庫繼續(xù)提供服務(wù)化焕。

多級復(fù)制

image.png

MySQL的復(fù)制是主庫推送Binlog到從庫,在上面一主多從的情況下铃剔,主庫的I/O和網(wǎng)絡(luò)壓力都會隨著從庫的增加而增大。多級而使用多級復(fù)制可以很好的解決這個問題查刻,但是隨著從庫的鏈路的增加從庫的數(shù)據(jù)延遲也會隨著增大键兜。

雙主復(fù)制/Dual Master

image.png

其實(shí)就是master1和master2互為主從關(guān)系,這樣任何一方所做的變更穗泵,都會通過復(fù)制應(yīng)用到另外一方的數(shù)據(jù)庫中普气。client客戶端的寫請求都訪問主庫 Master1,而讀請求可以選擇訪問主庫Master1或 Master2佃延。

雙主多級復(fù)制架構(gòu)

image.png

雙主復(fù)制還能和主從復(fù)制聯(lián)合起來使用现诀,在 Master2庫下配置從庫 Slave1、 Slave2等履肃,這樣即可通過從庫Slave等來分擔(dān)讀取壓力仔沿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市尺棋,隨后出現(xiàn)的幾起案子封锉,更是在濱河造成了極大的恐慌,老刑警劉巖膘螟,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件成福,死亡現(xiàn)場離奇詭異,居然都是意外死亡荆残,警方通過查閱死者的電腦和手機(jī)奴艾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來内斯,“玉大人蕴潦,你說我怎么就攤上這事像啼。” “怎么了品擎?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵埋合,是天一觀的道長。 經(jīng)常有香客問我萄传,道長甚颂,這世上最難降的妖魔是什么秀菱? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任振诬,我火速辦了婚禮,結(jié)果婚禮上衍菱,老公的妹妹穿的比我還像新娘脊串。我一直安慰自己缕坎,他們只是感情好怖侦,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谜叹,像睡著了一般匾寝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上荷腊,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天艳悔,我揣著相機(jī)與錄音,去河邊找鬼女仰。 笑死很钓,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的董栽。 我是一名探鬼主播码倦,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼锭碳!你這毒婦竟也來了袁稽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤擒抛,失蹤者是張志新(化名)和其女友劉穎推汽,沒想到半個月后补疑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡歹撒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年莲组,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暖夭。...
    茶點(diǎn)故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡锹杈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出迈着,到底是詐尸還是另有隱情竭望,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布裕菠,位于F島的核電站咬清,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏奴潘。R本人自食惡果不足惜旧烧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望画髓。 院中可真熱鬧掘剪,春花似錦、人聲如沸雀扶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽愚墓。三九已至,卻和暖如春昂勉,著一層夾襖步出監(jiān)牢的瞬間浪册,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工岗照, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留村象,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓攒至,卻偏偏與公主長得像厚者,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子迫吐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評論 2 359