架構(gòu)設(shè)計(jì)之「數(shù)據(jù)庫(kù)從主備到主主的高可用方案」

來(lái)自:不止思考(微信號(hào):bzsikao)

在互聯(lián)網(wǎng)項(xiàng)目中为迈,當(dāng)業(yè)務(wù)規(guī)模越來(lái)越大若贮,數(shù)據(jù)越來(lái)越多题涨,隨之而來(lái)的就是數(shù)據(jù)庫(kù)壓力會(huì)越來(lái)越大霜定。慢慢就會(huì)發(fā)現(xiàn)肺缕,數(shù)據(jù)庫(kù)層可能已經(jīng)成為了整個(gè)系統(tǒng)的關(guān)鍵點(diǎn)和性能瓶頸了勋锤,因此實(shí)現(xiàn)數(shù)據(jù)層的高可用就成為了我們項(xiàng)目中經(jīng)常要解決的問(wèn)題痘番。

本文我們就來(lái)聊一聊如何實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)層的高可用方案掸犬。在保障數(shù)據(jù)層的高性能與高穩(wěn)定方面珊楼,最容易想到的方式就是對(duì)數(shù)據(jù)進(jìn)行分片通殃、多份、冗余等厕宗,很多架構(gòu)的本質(zhì)其實(shí)也是基于這幾點(diǎn)來(lái)實(shí)現(xiàn)的画舌。

這里先不看細(xì)節(jié),即先不管底層數(shù)據(jù)源是什么數(shù)據(jù)庫(kù)已慢,我們先只聊架構(gòu)方案曲聂,因?yàn)闊o(wú)論底層是關(guān)系型數(shù)據(jù)庫(kù),還是NoSQL數(shù)據(jù)庫(kù)佑惠,無(wú)論是 Mysql 還是 Redis朋腋、MongoDB,我們?cè)诩軜?gòu)設(shè)計(jì)上都是相通的膜楷。

大體上旭咽,單中心雙機(jī)的常見(jiàn)方案有以下這些:

  • 一主一備的架構(gòu)(主備式)

  • 一主一從的架構(gòu)(主從式)

  • 互為主從的架構(gòu)(主主式)

以上方案從上至下,依次是從簡(jiǎn)單到復(fù)雜赌厅,從基礎(chǔ)到豐富穷绵。下面我們來(lái)具體看看:

一、一主一備的架構(gòu)(主備式)

主備式架構(gòu)是雙機(jī)部署中最簡(jiǎn)單的一種架構(gòu)了特愿,幾乎市面上所有的數(shù)據(jù)庫(kù)系統(tǒng)都會(huì)自帶這個(gè)主備功能仲墨。

如圖勾缭,

image

其思路也特別的簡(jiǎn)單:將數(shù)據(jù)庫(kù)部署到兩臺(tái)機(jī)器,其中一臺(tái)機(jī)器(代號(hào)A)作為日常提供數(shù)據(jù)讀寫(xiě)服務(wù)的機(jī)器目养,稱(chēng)為「主機(jī)」俩由。另外一臺(tái)機(jī)器(代號(hào)B)并不提供線上服務(wù),但會(huì)實(shí)時(shí)的將「主機(jī)」的數(shù)據(jù)同步過(guò)來(lái)癌蚁,稱(chēng)為「?jìng)錂C(jī)」幻梯。一旦「主機(jī)」出了故障,通過(guò)人工的方式匈勋,手動(dòng)的將「主機(jī)」踢下線礼旅,將「?jìng)錂C(jī)」改為「主機(jī)」來(lái)繼續(xù)提供服務(wù)。

這個(gè)架構(gòu)的優(yōu)缺點(diǎn)都很明顯洽洁,優(yōu)點(diǎn)就是幾乎不需要做什么開(kāi)發(fā)改造痘系,各類(lèi)數(shù)據(jù)庫(kù)就支持這種模式,部署維護(hù)起來(lái)也簡(jiǎn)單饿自,并沒(méi)有引入額外的系統(tǒng)復(fù)雜度和瓶頸汰翠。

但是缺點(diǎn)呢,就是當(dāng)「主機(jī)」出現(xiàn)故障的時(shí)候昭雌,需要人工去干預(yù)啊复唤,運(yùn)維同學(xué)很辛苦的,而且處理還不一定及時(shí)烛卧。再還有一個(gè)缺點(diǎn)就是佛纫,主備架構(gòu)會(huì)造成嚴(yán)重浪費(fèi)資源,畢竟需要一臺(tái)與「主機(jī)」同等配置的「?jìng)錂C(jī)」長(zhǎng)期備著总放,但又不作為線上服務(wù)來(lái)使用呈宇,你說(shuō)浪費(fèi)不浪費(fèi)。

為了解決這個(gè)資源浪費(fèi)問(wèn)題局雄,我們就得想一個(gè)把「?jìng)錂C(jī)」也用起來(lái)的方案:主從式架構(gòu)甥啄。

二、一主一從的架構(gòu)(主從式)

主從式架構(gòu)大體上與上述的主備式架構(gòu)差不多炬搭。區(qū)別就是主備式的「?jìng)錂C(jī)」平時(shí)是不干活的的蜈漓,主要起到備份的作用。而主從式的「?jìng)錂C(jī)」改為了「從機(jī)」宫盔,平時(shí)也要提供服務(wù)融虽,跟「主機(jī)」一樣隨時(shí)隨刻的在干活的。

如圖灼芭,

image

主從式架構(gòu)中的「從機(jī)」雖然也在隨時(shí)隨刻提供服務(wù)有额,但是它只提供「讀」服務(wù),并不提供「寫(xiě)」服務(wù)∽晃猓「主機(jī)」會(huì)實(shí)時(shí)的將線上數(shù)據(jù)同步到「從機(jī)」,以保證「從機(jī)」能夠正常的提供讀操作苛预。

這種架構(gòu)相比較主備式句狼,對(duì)資源是一種節(jié)約,畢竟「從機(jī)」也在提供服務(wù)热某,沒(méi)有白白的浪費(fèi)腻菇。并且在「主機(jī)」出現(xiàn)故障時(shí),在人工介入之前昔馋,好歹「從機(jī)」也是能夠提供數(shù)據(jù)的「讀」操作的筹吐,畢竟大多數(shù)業(yè)務(wù)都是「讀」多「寫(xiě)」少,因此對(duì)穩(wěn)定性又提高了一個(gè)層次秘遏。

缺點(diǎn)就是架構(gòu)稍微復(fù)雜了一點(diǎn)丘薛,畢竟「主機(jī)」和「從機(jī)」都有「讀」服務(wù),那么前端業(yè)務(wù)系統(tǒng)就需要用一定策略去判斷該路由到哪一臺(tái)去讀取數(shù)據(jù)邦危。還有就是洋侨,延遲問(wèn)題,「主機(jī)」的數(shù)據(jù)同步到「從機(jī)」難免會(huì)有一定程度的延遲倦蚪,這個(gè)延遲可能會(huì)對(duì)數(shù)據(jù)實(shí)時(shí)性要求較高的業(yè)務(wù)有一定影響希坚。

通過(guò)上面內(nèi)容可以看到,雖然這個(gè)架構(gòu)一定程度解決了資源浪費(fèi)陵且,但是并沒(méi)有解決人工干預(yù)的問(wèn)題裁僧,當(dāng)出現(xiàn)了故障后還是需要人工去處理。
如果想讓架構(gòu)更智能一點(diǎn)慕购,那么我們就需要引入「主從雙機(jī)自動(dòng)切換」的功能聊疲。

主從雙機(jī)自動(dòng)切換:是指當(dāng)主機(jī)出現(xiàn)故障后,從機(jī)能夠自動(dòng)檢測(cè)發(fā)現(xiàn)脓钾。同時(shí)從機(jī)將自己迅速切換為主機(jī)售睹,將原來(lái)的主機(jī)立即下線服務(wù),或轉(zhuǎn)換為從機(jī)狀態(tài)可训。

要實(shí)現(xiàn)「主從雙機(jī)自動(dòng)切換」昌妹,有幾個(gè)關(guān)鍵點(diǎn)需要考慮:

  1. 主機(jī)與從機(jī)之間的狀態(tài)如何判斷?
    必須有一個(gè)機(jī)制能監(jiān)測(cè)兩臺(tái)機(jī)器的運(yùn)行狀態(tài)握截,以此來(lái)決定是否應(yīng)該切換飞崖。
    我們比較常用的狀態(tài)傳遞方式有兩種:
  • 「雙機(jī)互連模式」

  • 「第三方中介模式」

「雙機(jī)互連模式」:是指在主機(jī)和從機(jī)之間建立一條用于狀態(tài)通訊的通道。通過(guò)這個(gè)通道谨胞,主機(jī)和從機(jī)之間可以共享服務(wù)狀態(tài)固歪,一旦發(fā)現(xiàn)對(duì)方宕機(jī)或者停止服務(wù)了,就可以立即將自己切換為主服務(wù)。不過(guò)這種方式需要關(guān)注通道的健壯性牢裳,一旦通道自身不穩(wěn)定了逢防,可能會(huì)導(dǎo)致假消息出現(xiàn),比如主機(jī)并沒(méi)有宕機(jī)蒲讯,但是通道壞了忘朝,導(dǎo)致從機(jī)以為出現(xiàn)了異常,就將自己切換為了主機(jī)判帮,那就出現(xiàn)了2個(gè)主機(jī)了局嘁,因此通道本身也是一個(gè)可能的故障點(diǎn)。

「第三方中介模式」:是指在主機(jī)和從機(jī)之外晦墙,再建立一個(gè)中介機(jī)器悦昵,這個(gè)中介機(jī)器專(zhuān)門(mén)用來(lái)維護(hù)各節(jié)點(diǎn)(主機(jī)/從機(jī))狀態(tài)的,主機(jī)/從機(jī)實(shí)時(shí)的將自身狀態(tài)上報(bào)給中介機(jī)器晌畅,中介機(jī)器來(lái)決定是否應(yīng)該切換但指、何時(shí)切換。MongoDB的Replica Set就是采用的這種模式抗楔。

  1. 除了狀態(tài)判斷枚赡,還需要考慮切換的策略是什么? 也就是說(shuō)發(fā)生異常幾次/多久后開(kāi)始切換谓谦,是否有一個(gè)緩沖機(jī)制等贫橙。另外切換完成后,當(dāng)原主機(jī)又恢復(fù)正常之后是否需要自動(dòng)再切換回來(lái)等策略反粥。

  2. 另外就是需要注意在切換過(guò)程中雙機(jī)數(shù)據(jù)如果發(fā)生沖突時(shí)卢肃,以哪個(gè)為準(zhǔn)?處理機(jī)制是什么才顿。

這些細(xì)節(jié)都是在設(shè)計(jì)主從自動(dòng)切換架構(gòu)時(shí)候莫湘,要提前規(guī)劃的。

三郑气、互為主從的架構(gòu)(主主式)

互為主從的架構(gòu)是指兩臺(tái)機(jī)器自己都是主機(jī)幅垮,并且也都是作為對(duì)方的從機(jī)。兩臺(tái)機(jī)器都提供完整的讀寫(xiě)服務(wù)尾组,因此無(wú)需切換忙芒,客戶(hù)機(jī)在調(diào)用的時(shí)候隨機(jī)挑選一臺(tái)即可,當(dāng)其中一臺(tái)宕機(jī)了讳侨,另外一臺(tái)還可以繼續(xù)服務(wù)呵萨。

如圖,

image

采用 互為主從架構(gòu) 有個(gè)復(fù)雜點(diǎn)就是跨跨,因?yàn)閮膳_(tái)主機(jī)都接受寫(xiě)數(shù)據(jù)潮峦,那就需要將寫(xiě)的最新數(shù)據(jù)實(shí)時(shí)的同步給對(duì)方,需要將數(shù)據(jù)進(jìn)行兩臺(tái)主機(jī)的雙向復(fù)制。而雙向復(fù)制不可避免的會(huì)在一定程度上帶來(lái)數(shù)據(jù)延遲忱嘹、極端情況下甚至有數(shù)據(jù)丟失等問(wèn)題嘱腥。在實(shí)際業(yè)務(wù)中,有些業(yè)務(wù)數(shù)據(jù)對(duì)一致性要求是非常高的拘悦,并不能接受數(shù)據(jù)的延遲爹橱、丟失,因此這類(lèi)業(yè)務(wù)也不適合互為主從的模式窄做,比如金融業(yè)務(wù)。但是我們互聯(lián)網(wǎng)業(yè)務(wù)中大多數(shù)場(chǎng)景還是沒(méi)有這么高要求的慰技,所以這種模式對(duì)于一般場(chǎng)景還是用的蠻多椭盏。

以上,就是對(duì)數(shù)據(jù)庫(kù)從主備架構(gòu)吻商、到主從架構(gòu)掏颊、再到主主架構(gòu)的高可用方案基本講解了,接下來(lái)會(huì)繼續(xù)分享數(shù)據(jù)庫(kù)在多機(jī)集群模式下的技術(shù)架構(gòu)艾帐,歡迎大家關(guān)注交流乌叶。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市柒爸,隨后出現(xiàn)的幾起案子准浴,更是在濱河造成了極大的恐慌,老刑警劉巖捎稚,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乐横,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡今野,警方通過(guò)查閱死者的電腦和手機(jī)葡公,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)条霜,“玉大人催什,你說(shuō)我怎么就攤上這事≡姿” “怎么了蒲凶?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)拆内。 經(jīng)常有香客問(wèn)我豹爹,道長(zhǎng),這世上最難降的妖魔是什么矛纹? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任臂聋,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘孩等。我一直安慰自己艾君,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布肄方。 她就那樣靜靜地躺著冰垄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪权她。 梳的紋絲不亂的頭發(fā)上虹茶,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音隅要,去河邊找鬼蝴罪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛步清,可吹牛的內(nèi)容都是我干的要门。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼廓啊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼欢搜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起谴轮,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤炒瘟,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后第步,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體唧领,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年雌续,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了斩个。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡驯杜,死狀恐怖受啥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鸽心,我是刑警寧澤滚局,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站顽频,受9級(jí)特大地震影響藤肢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜糯景,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一嘁圈、第九天 我趴在偏房一處隱蔽的房頂上張望省骂。 院中可真熱鬧,春花似錦最住、人聲如沸钞澳。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)轧粟。三九已至,卻和暖如春脓魏,著一層夾襖步出監(jiān)牢的瞬間兰吟,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工茂翔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留混蔼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓檩电,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親府树。 傳聞我的和親對(duì)象是個(gè)殘疾皇子俐末,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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

  • 存儲(chǔ)高可用方案的本質(zhì)都是通過(guò)將數(shù)據(jù)復(fù)制到多個(gè)存儲(chǔ)設(shè)備,通過(guò)數(shù)據(jù)冗余的方式來(lái)實(shí)現(xiàn)高可用奄侠,其復(fù)雜性主要體現(xiàn)在如何應(yīng)對(duì)復(fù)...
    d_quan閱讀 71評(píng)論 0 1
  • 對(duì)任何一個(gè)高可用存儲(chǔ)方案卓箫,我們需要從以下幾個(gè)方面去進(jìn)行思考和分析: 數(shù)據(jù)如何復(fù)制? 各個(gè)節(jié)點(diǎn)的職責(zé)是什么垄潮? 如何應(yīng)...
    hedgehog1112閱讀 1,329評(píng)論 0 0
  • ——————————————————摘抄自《極客時(shí)間 李運(yùn)華 從0開(kāi)始學(xué)架構(gòu)》存儲(chǔ)高可用方案的本質(zhì)都是通過(guò)將數(shù)據(jù)復(fù)...
    woshishui1243閱讀 1,566評(píng)論 0 0
  • 上一期我講了高可用存儲(chǔ)架構(gòu)中常見(jiàn)的雙機(jī)架構(gòu)烹卒,分別為主備復(fù)制、主從復(fù)制弯洗、雙機(jī)切換和主主復(fù)制旅急,并分析了每類(lèi)架構(gòu)的優(yōu)缺點(diǎn)...
    d_quan閱讀 136評(píng)論 0 1
  • 今天,小池的玩伴弟弟要走了牡整,他又提起暑期報(bào)班的問(wèn)題藐吮,他覺(jué)得報(bào)多了,英語(yǔ)老師的節(jié)奏快內(nèi)容增加多逃贝,開(kāi)始暴露出心里的不適...
    池淺笑安然閱讀 415評(píng)論 0 1