Zookeeper 集群如何高可用部署问潭?

Zookeeper 集群如何高可用部署?

簡書滌生沙峻。
轉(zhuǎn)載請注明原創(chuàng)出處睦授,謝謝!
如果讀完覺得有收獲的話摔寨,歡迎點贊加關(guān)注去枷。

介紹

Zookeeper 我想大家都不陌生,在很多場合都聽到它的名字是复。它是 Apache 的一個頂級項目删顶,為分布式應(yīng)用提供一致性高性能協(xié)調(diào)服務(wù)∈缋龋可以用來做:配置維護(hù)逗余、域名服務(wù)、分布式鎖等季惩。有很多開源組件录粱,尤其是中間件領(lǐng)域腻格,使用 Zookeeper 作為配置中心或者注冊中心。例如啥繁,它是 Hadoop 和 HBase 的重要組件菜职,是 Kafka 的管理和協(xié)調(diào)服務(wù),是 Dubbo 等服務(wù)框架的注冊中心等旗闽。

本文不探討它的優(yōu)缺點酬核,僅著眼于如何對 Zookeeper 進(jìn)行高可用部署。

原理

在介紹高可用部署前适室,我們先了解下 Zookeeper 的基本知識嫡意,這對充分理解它的高可用部署非常重要。

架構(gòu)

下圖是 Zookeeper 的架構(gòu)圖捣辆,ZooKeeper 集群中包含 Leader蔬螟、Follower 以及 Observer 三個角色:

  • Leader:負(fù)責(zé)進(jìn)行投票的發(fā)起和決議,更新系統(tǒng)狀態(tài)罪帖,Leader 是由選舉產(chǎn)生;
  • Follower: 用于接受客戶端請求并向客戶端返回結(jié)果促煮,在選主過程中參與投票;
  • Observer:可以接受客戶端連接,接受讀寫請求整袁,寫請求轉(zhuǎn)發(fā)給 Leader菠齿,但 Observer 不參加投票過程,只同步 Leader 的狀態(tài)坐昙,Observer 的目的是為了擴(kuò)展系統(tǒng)绳匀,提高讀取速度。

Client 是 Zookeeper 的客戶端炸客,請求發(fā)起方疾棵。


Zookeeper 集群架構(gòu)

高可用

Zookeeper 系統(tǒng)中只要集群中存在超過一半的節(jié)點(這里指的是投票節(jié)點即非 Observer 節(jié)點)能夠正常工作,那么整個集群就能夠正常對外服務(wù)

基于此痹仙,如果想搭建一個能夠允許 N 臺機(jī)器 down 掉的集群是尔,那么就要部署一個由 2*N+1 臺服務(wù)器構(gòu)成的 ZooKeeper 集群。
因此开仰,如果部署了 3 個 Zookeeper 節(jié)點(非 Observer)拟枚,則如果至少有 2個節(jié)點可用則整個集群就可用,意味著 1 個節(jié)點故障众弓,不影響 Zookeeper 集群對外提供服務(wù)恩溅;如果部署了 5 個節(jié)點,意味著 2 個節(jié)點同時故障谓娃,Zookeeper 集群依然能夠正常對外提供服務(wù)脚乡。

Zookeeper 集群部署的節(jié)點(非 Observer)數(shù)一般為奇數(shù)個

部署的節(jié)點數(shù)一般為奇數(shù)個,這里不是說不能為偶數(shù)個滨达。例如如果部署了 4 個節(jié)點奶稠,這意味著需要 4/2+1 = 3 個節(jié)點正常俯艰,集群才能正常對外服務(wù),即可以容忍 1 個節(jié)點故障窒典,但是這個部署 3 個節(jié)點蟆炊,其實效果是一樣的稽莉,也就是說部署偶數(shù)個瀑志,從高可用方面來說只是浪費了 1 臺機(jī)器而已。

部署

既然只要 Zookeeper 集群中存在超過一半的節(jié)點能夠正常工作污秆,集群就能夠正常服務(wù)劈猪,那 Zookeeper 如果想要 Zookeeper 高可用豈不是很簡單,是不是多部署幾個節(jié)點不就好了呢良拼?

多部署節(jié)點就高可用了战得?

多部署節(jié)點,貌似確實是能夠增強(qiáng)可用性庸推,但是這里還需要考慮以下兩個問題:

  • 多增加節(jié)點對性能和寫可用性有影響
    增加節(jié)點常侦,意味了能夠容忍非正常節(jié)點數(shù)更多,聽起來高可用是更高了贬媒。但是聋亡,節(jié)點數(shù)越多意味著 Leader 發(fā)出的提案需要更多的節(jié)點(半數(shù)以上)來接受提案,這必然增加提案 commit 的耗時际乘,也就意味著對寫請求的性能以及可用性影響比較大坡倔。因此,對于正常的業(yè)務(wù)系統(tǒng)來說需要完美的權(quán)衡利弊脖含,來調(diào)整節(jié)點的個數(shù)罪塔。一般為 5 個或者 7 個節(jié)點。

  • 需要考慮容災(zāi)需求
    部署還得結(jié)合容災(zāi)要求养葵,需要能在機(jī)房故障征堪,地區(qū)故障時整個 Zookeeper 集群是否能正常對外提供服務(wù)。

機(jī)房容災(zāi)

如果要保證在整個機(jī)房出現(xiàn)故障的情況下关拒,保證 Zookeeper 集群的高可用佃蚜,是要對 Zookeeper 做跨機(jī)房部署的。

單機(jī)房

我們先看下單機(jī)房部署情況下夏醉,下圖是單個機(jī)房 5 個節(jié)點的部署情況爽锥。在單機(jī)房部署的情況下是不能做到機(jī)房容災(zāi)的,一旦機(jī)房出現(xiàn)問題畔柔,整個 Zookeeper 集群就不能對外工作氯夷。
單機(jī)房部署還需考慮所選的節(jié)點應(yīng)該盡量不在同一個宿主機(jī),不同機(jī)柜靶擦,避免多個節(jié)點同時出現(xiàn)問題腮考。


單機(jī)房部署

同城雙機(jī)房

既然單機(jī)房做不到機(jī)房容災(zāi)雇毫,那雙機(jī)房呢?
如下圖在“機(jī)房 1”部署 3 個節(jié)點踩蔚,“機(jī)房 2”部署 2 個節(jié)點棚放,總共 5 個節(jié)點的 Zookeeper 集群,這能做到機(jī)房容災(zāi)嗎馅闽?任意一個機(jī)房故障飘蚯,集群都能正常對外提供工作嗎?
其實福也,還是不行的局骤。假如“機(jī)房 2”故障,“機(jī)房 1”正常暴凑,這種情況下峦甩,因為“機(jī)房 1”存在 3 個節(jié)點,大于半數(shù)现喳,因此還是能夠正常工作的凯傲;但是,假如“機(jī)房 1”故障嗦篱,那存活節(jié)點數(shù)只有 2 個冰单,整個集群是不能正常工作的。
因此默色,Zookeeper 雙機(jī)房部署球凰,是不能夠做到機(jī)房容災(zāi)的。


雙機(jī)房部署

同城三機(jī)房

我們再來看看三機(jī)房部署腿宰,三機(jī)房部署呕诉,是能夠做到機(jī)房容災(zāi)的。還是以 5 個節(jié)點的集群為例:
如下圖吃度,在“機(jī)房 1”甩挫、“機(jī)房 2”同時部署 2 個節(jié)點,而“機(jī)房 3” 部署 1 個節(jié)點椿每。在任意一個機(jī)房故障的情況下伊者,都能滿足正常節(jié)點數(shù)大于半數(shù)及以上,所以能夠保證機(jī)房容災(zāi)间护。


三機(jī)房部署

異地容災(zāi)

僅僅做到機(jī)房級別的容災(zāi)亦渗,對于一般的業(yè)務(wù)應(yīng)該就夠了,不過目前很多公司采用的是兩地三中心模式汁尺,螞蟻金服甚至做到了三地五中心法精。在這種情況下,我們的 Zookeeper 集群應(yīng)該如何部署呢?

兩地三中心

“兩地三中心”即生產(chǎn)數(shù)據(jù)中心搂蜓、同城災(zāi)備中心狼荞、異地災(zāi)備中心建設(shè)方案。這種模式下帮碰,兩個城市的三個數(shù)據(jù)中心互聯(lián)互通相味,如果一個數(shù)據(jù)中心發(fā)生故障或災(zāi)難,其他數(shù)據(jù)中心可以正常運行并對關(guān)鍵業(yè)務(wù)或全部業(yè)務(wù)實現(xiàn)接管殉挽。


兩地三中心架構(gòu)

在兩地三中心的的模式下丰涉,Zookeeper 集群的部署有哪些考量呢?
如下圖此再,一般兩地三中心采用的是下面這種部署方式昔搂。在“地區(qū) 1”有兩個同城數(shù)據(jù)中心,“中心 1”和“中心2”输拇,在異地“地區(qū) 2” 有一個異地中心“中心 1”。這里你可能有兩個疑問:


兩地三中心部署
  • 為什么投票節(jié)點(Follower 和 Leader)都放在“地區(qū) 1 中心 1”贤斜,而不是按照三機(jī)房類似的方案在三個中心都進(jìn)行部署呢策吠?
    這里是因為由于異地之間的物理距離比較長,網(wǎng)絡(luò)傳輸時延比較大瘩绒,導(dǎo)致集群的投票節(jié)點的決策時間比較長猴抹,進(jìn)而影響寫性能。試想一下锁荔,如果兩地選用的是北京和上海兩座城市蟀给,走專線網(wǎng)絡(luò)延時約 30ms,在寫數(shù)據(jù)時阳堕,需要半數(shù)節(jié)點同意提案跋理,一個寫請求才能成功。因此恬总,一次寫成功的時間會比較長前普。
    另外,異地之間的網(wǎng)絡(luò)比較復(fù)雜壹堰,很容易出現(xiàn)集群重新選舉拭卿,導(dǎo)致整個集群不可用,而且選舉時間會比較長贱纠。
    因此峻厚,一般只在一個中心內(nèi)做到三機(jī)房部署,其他中心都是用 Observer 節(jié)點谆焊,可以看出惠桃,部署上 Zookeeper 集群無法做到異地容災(zāi)的。

  • 為什么引入了 Observer 節(jié)點?
    Observer 能很好的對 Zookeeper 集群進(jìn)行擴(kuò)展刽射,Observer 可以提供 Client 讀寫军拟,但不參與投票。因此誓禁,Observer 節(jié)點對集群不影響投票耗時懈息,也不影響集群選舉。另外摹恰,加入 Observer 對讀性能是一個很大的提升辫继。

三中心優(yōu)化

為了保護(hù)集群,在三個中心都部署上 Observer 節(jié)點俗慈,而 Client 只與 Observer 機(jī)點進(jìn)行交互姑宽,用這種方式可以降低投票節(jié)點的工作負(fù)載,降低 Leader 和 Follower 的不穩(wěn)定性闺阱,從而提高整個集群的穩(wěn)定性和可用性炮车。


兩地三中心部署優(yōu)化

總結(jié)

Zookeeper 的高可用在部署上也是有很多考量的,Zookeeper 集群在部署上可以做到機(jī)房容災(zāi)酣溃,但是做不到異地容災(zāi)瘦穆。另外,為了提升集群的擴(kuò)展性和穩(wěn)定性赊豌,可以引入 Observer 節(jié)點扛或,提升讀性能,保護(hù) Leader 與 Follower 節(jié)點碘饼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末熙兔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子艾恼,更是在濱河造成了極大的恐慌住涉,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒂萎,死亡現(xiàn)場離奇詭異秆吵,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)五慈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門纳寂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人泻拦,你說我怎么就攤上這事毙芜。” “怎么了争拐?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵腋粥,是天一觀的道長晦雨。 經(jīng)常有香客問我,道長隘冲,這世上最難降的妖魔是什么闹瞧? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮展辞,結(jié)果婚禮上奥邮,老公的妹妹穿的比我還像新娘。我一直安慰自己罗珍,他們只是感情好洽腺,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著覆旱,像睡著了一般蘸朋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上扣唱,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天藕坯,我揣著相機(jī)與錄音,去河邊找鬼画舌。 笑死堕担,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的曲聂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼佑惠,長吁一口氣:“原來是場噩夢啊……” “哼朋腋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起膜楷,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤旭咽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后赌厅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體穷绵,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年特愿,在試婚紗的時候發(fā)現(xiàn)自己被綠了仲墨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡揍障,死狀恐怖目养,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情毒嫡,我是刑警寧澤癌蚁,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響努释,放射性物質(zhì)發(fā)生泄漏碘梢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一伐蒂、第九天 我趴在偏房一處隱蔽的房頂上張望煞躬。 院中可真熱鬧,春花似錦饿自、人聲如沸汰翠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽复唤。三九已至,卻和暖如春烛卧,著一層夾襖步出監(jiān)牢的瞬間佛纫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工总放, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留呈宇,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓局雄,卻偏偏與公主長得像甥啄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子炬搭,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

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