溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

怎么檢測(cè)一臺(tái)機(jī)器是否宕機(jī)

發(fā)布時(shí)間:2021-10-22 10:42:36 來(lái)源:億速云 閱讀:264 作者:小新 欄目:系統(tǒng)運(yùn)維

這篇文章主要介紹了怎么檢測(cè)一臺(tái)機(jī)器是否宕機(jī),具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

檢測(cè)一臺(tái)機(jī)器是否宕機(jī)的應(yīng)用場(chǎng)景如下:

1, 工作機(jī)器宕機(jī),總控節(jié)點(diǎn)需要能夠檢測(cè)到并且將原有服務(wù)遷移到集群中的其它節(jié)點(diǎn)。

2, 總控節(jié)點(diǎn)宕機(jī),總控節(jié)點(diǎn)的備份節(jié)點(diǎn)(一般稱(chēng)為Slave)需要能夠檢測(cè)到并替換成主節(jié)點(diǎn)繼續(xù)對(duì)外服務(wù)。

檢測(cè)一臺(tái)機(jī)器是否宕機(jī)必須是可靠的。在大規(guī)模集群中,機(jī)器可能出現(xiàn)各種異常,比如停電,磁盤(pán)故障,過(guò)于繁忙導(dǎo)致假死等。對(duì)于機(jī)器假死,如果總控節(jié)點(diǎn)認(rèn)為機(jī)器宕機(jī)并將服務(wù)遷移到其它節(jié)點(diǎn),假死的機(jī)器又認(rèn)為自己還可以提供服務(wù),則會(huì)出現(xiàn)多個(gè)節(jié)點(diǎn)服務(wù)同一份數(shù)據(jù)而導(dǎo)致數(shù)據(jù)不一致的情況。

首先必須明確,理論上檢測(cè)另外一臺(tái)機(jī)器是否宕機(jī)是無(wú)法做到的,有興趣的同學(xué)可以參考Fischer的論文??梢院?jiǎn)單理解如下:A機(jī)器往B機(jī)器發(fā)送心跳包,如果B機(jī)器不發(fā)送響應(yīng),A無(wú)法確定B機(jī)器是宕機(jī)了還是過(guò)于繁忙,由于A和B兩臺(tái)機(jī)器的時(shí)鐘可能不同步,B機(jī)器也無(wú)法確定多久沒(méi)有收到A機(jī)器的心跳包可以認(rèn)為必須停止服務(wù)。因此,A機(jī)器沒(méi)有辦法確定B機(jī)器已經(jīng)宕機(jī)或者采取措施強(qiáng)制B機(jī)器停止服務(wù)。

當(dāng)然,工程實(shí)踐中,由于機(jī)器之間會(huì)進(jìn)行時(shí)鐘同步,我們總是假設(shè)A和B兩臺(tái)機(jī)器的本地時(shí)鐘相差不大,比如相差不超過(guò)0.5秒。這樣,我們可以通過(guò)Lease機(jī)制進(jìn)行宕機(jī)檢測(cè)。Lease機(jī)制就是帶有超時(shí)時(shí)間的一種授權(quán)。假設(shè)總控節(jié)點(diǎn)需要檢測(cè)工作節(jié)點(diǎn)是否宕機(jī),總控節(jié)點(diǎn)可以給工作節(jié)點(diǎn)發(fā)放Lease授權(quán),工作節(jié)點(diǎn)持有有效期內(nèi)的Lease才允許提供服務(wù),否則主動(dòng)下線(xiàn)停止服務(wù)。工作節(jié)點(diǎn)的Lease快要到期的時(shí)候向總控節(jié)點(diǎn)重新申請(qǐng)Lease(一般稱(chēng)為renewLease),總控節(jié)點(diǎn)定時(shí)檢測(cè)所有工作機(jī)的Lease授權(quán)是否合法,如果發(fā)現(xiàn)某臺(tái)工作機(jī)Lease失效,可以將工作機(jī)上的服務(wù)遷移到集群中的其它機(jī)器,這時(shí)因?yàn)楣ぷ鳈C(jī)發(fā)現(xiàn)自己Lease失效會(huì)主動(dòng)停止服務(wù)。當(dāng)然,這里需要注意,由于總控節(jié)點(diǎn)和工作機(jī)的時(shí)鐘可能不一致且有網(wǎng)絡(luò)延遲,總控節(jié)點(diǎn)上的Lease超時(shí)時(shí)間要長(zhǎng),也就是說(shuō),如果工作節(jié)點(diǎn)的Lease超時(shí)時(shí)間是12秒,總控節(jié)點(diǎn)可能需要13秒后才能確認(rèn)工作節(jié)點(diǎn)已經(jīng)停止了服務(wù),從而避免數(shù)據(jù)不一致問(wèn)題。

同構(gòu)節(jié)點(diǎn)之間的選主也有一個(gè)宕機(jī)檢測(cè)問(wèn)題。比如總控節(jié)點(diǎn)宕機(jī),備份節(jié)點(diǎn)需要能夠檢測(cè)并升級(jí)為主節(jié)點(diǎn)繼續(xù)對(duì)外服務(wù)。Mysql數(shù)據(jù)庫(kù)經(jīng)常采用Heartbeat + DRBD (Distributed Replicated Block Device) + Mysql的高可用性方案,據(jù)說(shuō)能夠達(dá)到3個(gè)9的高可用性,主節(jié)點(diǎn)和備節(jié)點(diǎn)維持Heartbeat心跳,當(dāng)提供服務(wù)的主節(jié)點(diǎn)出現(xiàn)故障時(shí),備節(jié)點(diǎn)的Heartbeat檢測(cè)到主節(jié)點(diǎn)沒(méi)有心跳(例如,Ping不通主節(jié)點(diǎn)),備節(jié)點(diǎn)自動(dòng)接管虛擬IP,升級(jí)為主節(jié)點(diǎn)提供Mysql讀寫(xiě)服務(wù)。由于Heartbeat檢測(cè)機(jī)器主節(jié)點(diǎn)宕機(jī)不可靠,這個(gè)方案存在眾所周知的腦裂問(wèn)題,即集群中可能同時(shí)存在多個(gè)主節(jié)點(diǎn)同時(shí)提供服務(wù)。解決這個(gè)問(wèn)題本質(zhì)上還是需要引入仲裁節(jié)點(diǎn),比如Heartbeat + DRBD方案中引入Fence節(jié)點(diǎn)使出現(xiàn)問(wèn)題的節(jié)點(diǎn)從集群中脫離,或者引入分布式鎖服務(wù),比如Chubby的開(kāi)源實(shí)現(xiàn)Zookeeper服務(wù)。分布式鎖服務(wù)實(shí)現(xiàn)主節(jié)點(diǎn)選舉大致如下:主節(jié)點(diǎn)和備節(jié)點(diǎn)到Chubby中搶鎖,搶到鎖的節(jié)點(diǎn)在鎖的有效期(Lease期)內(nèi)提供服務(wù),當(dāng)主節(jié)點(diǎn)鎖的Lease快要到期時(shí),主節(jié)點(diǎn)申請(qǐng)延長(zhǎng)鎖的超時(shí)時(shí)間,正常情況下分布式鎖服務(wù)總是優(yōu)先滿(mǎn)足主節(jié)點(diǎn)的請(qǐng)求,當(dāng)主節(jié)點(diǎn)出現(xiàn)故障時(shí),備節(jié)點(diǎn)能夠搶到鎖切換為主節(jié)點(diǎn)提供服務(wù)。

***還有一個(gè)問(wèn)題,假設(shè)總控節(jié)點(diǎn)通過(guò)Lease機(jī)制檢測(cè)工作節(jié)點(diǎn)是否宕機(jī),這種方案是可靠的,不過(guò)當(dāng)總控節(jié)點(diǎn)宕機(jī)時(shí),如果不采取任何措施,集群中的所有工作節(jié)點(diǎn)都將因?yàn)闊o(wú)法重新申請(qǐng)Lease而停止服務(wù),這就是帶有總控節(jié)點(diǎn)的設(shè)計(jì)固有的脆弱性,某個(gè)設(shè)計(jì)或者編碼的錯(cuò)誤都有可能造成嚴(yán)重的影響。解決這個(gè)問(wèn)題一般會(huì)有一個(gè)叫做Grace Period的機(jī)制,工作節(jié)點(diǎn)Lease超時(shí)時(shí)將停止服務(wù),但是工作節(jié)點(diǎn)并不一開(kāi)始就重啟或者下線(xiàn),而是處于一種危險(xiǎn)狀態(tài)(稱(chēng)為Jeopardy),這種狀態(tài)持續(xù)一個(gè)Grace Period,比如45秒。如果在Grace Period 內(nèi)總控節(jié)點(diǎn)重啟,工作節(jié)點(diǎn)和總控節(jié)點(diǎn)重新聯(lián)系上從而可以切換為正常狀態(tài)繼續(xù)提供服務(wù)。

如果需要較好地理解宕機(jī)及選舉相關(guān)的問(wèn)題,可以閱讀并思考Paxos相關(guān)的論文,比如Paxos made simple, The Part-time Parliament, Paxos made live, Paxos made practical, Chubby等。有任何問(wèn)題,歡迎討論。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“怎么檢測(cè)一臺(tái)機(jī)器是否宕機(jī)”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI