當(dāng)前位置:首頁 > 公眾號精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]來自:DBAplus社群 作者介紹 鄒春華,新炬網(wǎng)絡(luò)中間件專家。10年軟件開發(fā)工作經(jīng)驗,9年運營商行業(yè)IT系統(tǒng)維護(hù)經(jīng)驗。精通C、C++、JAVA、PHP、SHELL等語言,有著深厚的大型IT軟件系統(tǒng)開發(fā)功底,精通MQ、Redis、Zookeeper、nginx、tomcat等技術(shù)組件的配置和優(yōu)化,


運維老鳥告訴你這個經(jīng)典Zookeeper問題的根因

來自:DBAplus社群

作者介紹

鄒春華,新炬網(wǎng)絡(luò)中間件專家。10年軟件開發(fā)工作經(jīng)驗,9年運營商行業(yè)IT系統(tǒng)維護(hù)經(jīng)驗。精通C、C++、JAVA、PHP、SHELL等語言,有著深厚的大型IT軟件系統(tǒng)開發(fā)功底,精通MQ、Redis、Zookeeper、nginx、tomcat等技術(shù)組件的配置和優(yōu)化,也擅長zabbix、Grafana 、cacti、ansbile等組件的運用,有大量的自動化運維開發(fā)實踐。


大家好,我是一名有著近二十年工作經(jīng)驗的運維老鳥。


你問運維干什么的?呵呵…運維就像三國里的軍師,擅長排兵布陣,能夠運籌帷幄,統(tǒng)籌大局。再爛的系統(tǒng),運維也能玩得轉(zhuǎn)!


你說什么?重啟能夠解決運維90%的問題?


嗯…嗯…其實…你說的對!重啟能夠解決90%的問題,如果不行的話…那就再重啟一次試試!


好吧,看看大家眼中的運維是什么樣的吧:


運維老鳥告訴你這個經(jīng)典Zookeeper問題的根因


至于我對運維的理解…給大家講講我們最近解決的一個小問題吧。


一、問題緣由


最近從業(yè)務(wù)部門納管了一批ZooKeeper集群,在對納管集群進(jìn)行巡檢的時候,發(fā)現(xiàn)其中一個5節(jié)點的集群存在兩個leader節(jié)點的情況。經(jīng)與業(yè)務(wù)部門確認(rèn),該集群影響多個重要業(yè)務(wù)系統(tǒng),所以在處理問題的時候既要保證ZooKeeper集群能夠恢復(fù)正常服務(wù),又需要確保所有的業(yè)務(wù)數(shù)據(jù)不能丟失。


問題集群為三機(jī)房部署的可容災(zāi)集群,集群信息如下(本文所有IP等關(guān)鍵信息已脫敏):


運維老鳥告訴你這個經(jīng)典Zookeeper問題的根因


正常情況下一個ZooKeeper集群只能有一個leader節(jié)點,若干個follower節(jié)點。如下圖:


運維老鳥告訴你這個經(jīng)典Zookeeper問題的根因


但是該集群在兩個leader節(jié)點的情況下,各節(jié)點依然狀態(tài)正常,并能夠正常提供服務(wù),確實有點奇怪。為了能夠說明清楚該問題,我們先了解下ZooKeeper集群的選舉原則。


二、ZooKeeper集群選舉原則


ZooKeeper集群的leader選舉三原則:


  • 集群中只有超過半數(shù)以上的節(jié)點啟動,集群才能正常工作;

  • 在集群正常服務(wù)前,myid小的節(jié)點給myid大的節(jié)點投票,直到集群正常,選出Leader;

  • 選出Leader之后,之前的節(jié)點狀態(tài)由Looking變?yōu)镕ollowing,以后的節(jié)點都是Follower。


假設(shè)一個5節(jié)點的集群,myid分別是1、2、3、4、5,依序啟動:


1)節(jié)點1啟動


  • 各節(jié)點狀態(tài)(1:啟動;2:關(guān)停;3:關(guān)停;4:關(guān)停;5:關(guān)停)

  • 選取狀態(tài)(1: LOOKING;2:-;3:-;4:-;5:-)

  • 集群狀態(tài)(節(jié)點未滿半數(shù):失?。?/span>


2)節(jié)點2啟動


  • 各節(jié)點狀態(tài)(1:啟動;2:啟動;3:關(guān)停;4:關(guān)停;5:關(guān)停)

  • 選取狀態(tài)(1: LOOKING;2:LOOKING;3:-;4:-;5:-)

  • 集群狀態(tài)(節(jié)點未滿半數(shù):失?。?/span>


3)節(jié)點3啟動


  • 各節(jié)點狀態(tài)(1:啟動;2:啟動;3:啟動;4:關(guān)停;5:關(guān)停)

  • 選取狀態(tài)(1: FOLLOWING;2:FOLLOWING;3:LEADING;4:-;5:-)

  • 集群狀態(tài)(節(jié)點過半數(shù):成功)


4)節(jié)點4啟動


  • 各節(jié)點狀態(tài)(1:啟動;2:啟動;3:啟動;4:啟動;5:關(guān)停)

  • 選取狀態(tài)(1: FOLLOWING;2:FOLLOWING;3:LEADING;4:FOLLOWING;5:-)

  • 集群狀態(tài)(節(jié)點過半數(shù):成功)


5)節(jié)點5啟動


  • 各節(jié)點狀態(tài)(1:啟動;2:啟動;3:啟動;4:啟動;5:啟動)

  • 選取狀態(tài)(1: FOLLOWING;2:FOLLOWING;3:LEADING;4:FOLLOWING;5:FOLLOWING)

  • 集群狀態(tài)(節(jié)點過半數(shù):成功)


三、問題分析


根據(jù)集群信息表:


運維老鳥告訴你這個經(jīng)典Zookeeper問題的根因


查看192.176.238.219的日志發(fā)現(xiàn)4號節(jié)點成為LEADING狀態(tài)時,集群中有3個節(jié)點:



[myid:4] - INFO  [QuorumPeer[myid=4]/0:0:0:0:0:0:0:0:2181:Leader@946] - Have quorum of supporters, sids: [ 1,2,4 ];


滿足節(jié)點數(shù)過半的原則,集群正常服務(wù),但是查看節(jié)點內(nèi)容,發(fā)現(xiàn)節(jié)點1、2的內(nèi)容和4不一致,反而是節(jié)點1、2、3、5內(nèi)容是一致的。


查看節(jié)點4的內(nèi)容:


運維老鳥告訴你這個經(jīng)典Zookeeper問題的根因


查看節(jié)點5內(nèi)容:


運維老鳥告訴你這個經(jīng)典Zookeeper問題的根因


通過內(nèi)容排查可以看出節(jié)點1、2、3、5內(nèi)容一致,可能屬于同一集群,那么節(jié)點4為什么和其它節(jié)點內(nèi)容不一致呢?


繼續(xù)排查節(jié)點的配置信息,發(fā)現(xiàn)節(jié)點4配置的內(nèi)部通訊端口:選舉端口與其它節(jié)點配置的不一致!


節(jié)點4配置情況:


運維老鳥告訴你這個經(jīng)典Zookeeper問題的根因


節(jié)點1、2、3、5的配置情況:


運維老鳥告訴你這個經(jīng)典Zookeeper問題的根因


通過配置排查可以確認(rèn)1、2、3、5是屬于同一個集群,那4節(jié)點又是哪個集群呢?


繼續(xù)排查發(fā)現(xiàn),在同一批主機(jī)下面部署了另一個ZooKeeper實例,開放的服務(wù)端口是2182,而其配置的內(nèi)部通訊端口:選舉端口正是2888:3888。


運維老鳥告訴你這個經(jīng)典Zookeeper問題的根因


通過排查這個集群節(jié)點的內(nèi)容發(fā)現(xiàn):節(jié)點1、2的內(nèi)容和上面集群的節(jié)點4內(nèi)容是一致的,而這個集群3、4、5節(jié)點的內(nèi)容又是一致的!通過推斷,集群狀態(tài)如下表:


運維老鳥告訴你這個經(jīng)典Zookeeper問題的根因


由于集群2和集群3都有三個節(jié)點,配置的總節(jié)點數(shù)是5,均滿足節(jié)點數(shù)過半的原則!


四、問題影響


那么這種情況下會出現(xiàn)什么問題呢?


本來正常情況下A類業(yè)務(wù)系統(tǒng)只讀寫2181端口的集群、B類業(yè)務(wù)系統(tǒng)只讀寫2182端口的集群,而現(xiàn)在集群2既可以服務(wù)A類業(yè)務(wù),又可服務(wù)B類業(yè)務(wù),如果集群2的數(shù)據(jù)丟失,將影響兩類業(yè)務(wù)的正常運行。


運維老鳥告訴你這個經(jīng)典Zookeeper問題的根因


五、解決問題


集群2是一個異常集群,但是如果將集群2的節(jié)點恢復(fù)正常并分別加入到集群1和集群3后,集群2的數(shù)據(jù)勢必會丟失。由于ZooKeeper集群的數(shù)據(jù)是由A類業(yè)務(wù)系統(tǒng)和B類業(yè)務(wù)系統(tǒng)進(jìn)行讀寫的,解決的方法首先需要將集群2的數(shù)據(jù)導(dǎo)出并根據(jù)業(yè)務(wù)類型進(jìn)行區(qū)分,待集群恢復(fù)正常后,再將這部分?jǐn)?shù)據(jù)依據(jù)業(yè)務(wù)歸屬分別重新寫入到對應(yīng)的集群。


集群恢復(fù)步驟:


1)為防止數(shù)據(jù)丟失,備份集群1、集群2、集群3的數(shù)據(jù)(snapshot和log)。


2)提取集群2的數(shù)據(jù),并依據(jù)業(yè)務(wù)類型將數(shù)據(jù)分類,并準(zhǔn)備重新寫入。


3)關(guān)停集群2節(jié)點4(192.176.238.219:2181)實例,集群2剩余2個節(jié)點,不滿足半數(shù)要求,集群重新進(jìn)行選舉,由于集群2的1、2兩個節(jié)點的通訊、選舉端口和集群3配置一致,并且集群3已經(jīng)選舉了節(jié)點5為leader,那么集群2的節(jié)點1、2將加入到集群3成為follower,形成5節(jié)點的集群。


4)修改集群2節(jié)點4(192.176.238.219:2181)的內(nèi)部通訊端口:選舉端口為2889:3889


5)啟動192.176.238.219:2181實例,由于該實例的通訊、選舉端口和集群1配置一致,并且集群1已經(jīng)選舉了節(jié)點5為leader, 該實例將加入集群1成為follower,形成5節(jié)點的集群。


6)分別將原集群2的數(shù)據(jù)分類后重新寫入到集群1和集群3。


7)檢查集群狀態(tài),檢查集群數(shù)據(jù)信息,并進(jìn)行業(yè)務(wù)測試。


恢復(fù)后的集群信息如下:


運維老鳥告訴你這個經(jīng)典Zookeeper問題的根因


通過以上操作步驟后,集群恢復(fù)正常,丟失數(shù)據(jù)重新寫入,所有業(yè)務(wù)驗證正常。


六、小結(jié)


該問題根因很簡單,只是一個配置的小問題,但是處理卻很容易出錯。因為這是一個已經(jīng)在線運行了很久的系統(tǒng),往往不會懷疑是配置的問題,在處理該問題時,如果沒有理清楚問題根因,只是簡單將問題集群重啟,表面上問題已經(jīng)解決,但是大量數(shù)據(jù)將會丟失會嚴(yán)重影響到業(yè)務(wù),并且根因沒有找到,問題依舊存在,隨時可能復(fù)發(fā)…


說了這么多,你還認(rèn)為運維只是簡單的重啟就能解決問題嗎?那什么是運維呢?


其實啊,運維是個灶臺,上面背著個黑鍋,下面還有個大坑…



特別推薦一個分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:

運維老鳥告訴你這個經(jīng)典Zookeeper問題的根因

長按訂閱更多精彩▼

運維老鳥告訴你這個經(jīng)典Zookeeper問題的根因

如有收獲,點個在看,誠摯感謝

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉