新聞中心
從Ceph看分布式系統(tǒng)故障檢測(cè)
作者:王康 2017-12-19 10:37:16
存儲(chǔ)
存儲(chǔ)軟件
分布式 不同的分布式系統(tǒng)由于其本身的結(jié)構(gòu)不同,以及對(duì)一致性、可用性、可擴(kuò)展性的需求不同,會(huì)針對(duì)以上幾點(diǎn)作出不同的抉擇或取舍。下面我們就來(lái)看看Ceph是怎么做的。

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供淳安網(wǎng)站建設(shè)、淳安做網(wǎng)站、淳安網(wǎng)站設(shè)計(jì)、淳安網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、淳安企業(yè)網(wǎng)站模板建站服務(wù),10多年淳安做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
節(jié)點(diǎn)的故障檢測(cè)是分布式系統(tǒng)無(wú)法回避的問(wèn)題,集群需要感知節(jié)點(diǎn)的存活,并作出適當(dāng)?shù)恼{(diào)整。通常我們采用心跳的方式來(lái)進(jìn)行故障檢測(cè),并認(rèn)為能正常與外界保持心跳的節(jié)點(diǎn)便能夠正常提供服務(wù)。一個(gè)好的故障檢測(cè)策略應(yīng)該能夠做到:
- 及時(shí):節(jié)點(diǎn)發(fā)生異常如宕機(jī)或網(wǎng)絡(luò)中斷時(shí),集群可以在可接受的時(shí)間范圍內(nèi)感知;
- 適當(dāng)?shù)膲毫Γ喊▽?duì)節(jié)點(diǎn)的壓力,和對(duì)網(wǎng)絡(luò)的壓力;
- 容忍網(wǎng)絡(luò)抖動(dòng)
- 擴(kuò)散機(jī)制:節(jié)點(diǎn)存活狀態(tài)改變導(dǎo)致的元信息變化需要通過(guò)某種機(jī)制擴(kuò)散到整個(gè)集群;
不同的分布式系統(tǒng)由于其本身的結(jié)構(gòu)不同,以及對(duì)一致性、可用性、可擴(kuò)展性的需求不同,會(huì)針對(duì)以上幾點(diǎn)作出不同的抉擇或取舍。下面我們就來(lái)看看Ceph是怎么做的。
Ceph故障檢測(cè)機(jī)制
Ceph作為有中心的分布式結(jié)構(gòu),元信息的維護(hù)和更新自然的都由其中心節(jié)點(diǎn)Ceph Monitor來(lái)負(fù)責(zé)。節(jié)點(diǎn)的存活狀態(tài)發(fā)生改變時(shí),也需要Monitor來(lái)發(fā)現(xiàn)并更新元信息并通知給所有的OSD節(jié)點(diǎn)。最自然的,我們可以想到讓中心節(jié)點(diǎn)Monitor保持與所有OSD節(jié)點(diǎn)之間頻繁的心跳,但如此一來(lái),當(dāng)有成百上千的OSD節(jié)點(diǎn)時(shí)Monitor變會(huì)有比較大的壓力。之前在Ceph Monitor and Paxos中介紹過(guò)Ceph的設(shè)計(jì)思路是通過(guò)更智能的OSD和Client來(lái)減少對(duì)中心節(jié)點(diǎn)Monitor的壓力。同樣的,在節(jié)點(diǎn)的故障檢測(cè)方面也需要OSD和Monitor的配合完成。下面的介紹基于當(dāng)前***的11.0.0版本。
OSD之間心跳
屬于同一個(gè)pg的OSD我們稱之為伙伴OSD,他們會(huì)相互發(fā)送PING\PONG信息,并且記錄發(fā)送和接收的時(shí)間。OSD在cron中發(fā)現(xiàn)有伙伴OSD相應(yīng)超時(shí)后,會(huì)將其加入failure_queue隊(duì)列,等待后續(xù)匯報(bào)。
參數(shù):
osd_heartbeat_interval(6): 向伙伴OSD發(fā)送ping的時(shí)間間隔。實(shí)際會(huì)在這個(gè)基礎(chǔ)上加一個(gè)隨機(jī)時(shí)間來(lái)避免峰值。
osd_heartbeat_grace(20):多久沒(méi)有收到回復(fù)可以認(rèn)為對(duì)方已經(jīng)down
OSD向Monitor匯報(bào)伙伴OSD失效
1. OSD發(fā)送錯(cuò)誤報(bào)告
- OSD周期性的檢查failure_queue中的伙伴OSD失敗信息;
- 向Monitor發(fā)送失效報(bào)告,并將失敗信息加入failure_pending隊(duì)列,然后將其從failure_queue移除;
- 收到來(lái)自failure_queue或者failure_pending中的OSD的心跳時(shí),將其從兩個(gè)隊(duì)列中移除,并告知Monitor取消之前的失效報(bào)告;
- 當(dāng)發(fā)生與Monitor網(wǎng)絡(luò)重連時(shí),會(huì)將failure_pending中的錯(cuò)誤報(bào)告加回到failure_queue中,并再次發(fā)送給Monitor。
2. Monitor統(tǒng)計(jì)下線OSD
Monitor收集來(lái)自O(shè)SD的伙伴失效報(bào)告;
當(dāng)錯(cuò)誤報(bào)告指向的OSD失效超過(guò)一定閾值,且有足夠多的OSD報(bào)告其失效時(shí),將該OSD下線。
參數(shù):
osd_heartbeat_grace(20): 可以確認(rèn)OSD失效的時(shí)間閾值;
mon_osd_reporter_subtree_level(“host”):在哪一個(gè)級(jí)別上統(tǒng)計(jì)錯(cuò)誤報(bào)告數(shù),默認(rèn)為host,即計(jì)數(shù)來(lái)自不同主機(jī)的osd報(bào)告
mon_osd_min_down_reporters(2): 最少需要多少來(lái)自不同的mon_osd_reporter_subtree_level的osd的錯(cuò)誤報(bào)告
mon_osd_adjust_heartbeat_grace(true):在計(jì)算確認(rèn)OSD失效的時(shí)間閾值時(shí),是否要考慮該OSD歷史上的延遲,因此失效的時(shí)間閾值通常會(huì)大于osd_heartbeat_grace指定的值
OSD到Monitor心跳
- OSD當(dāng)有pg狀態(tài)改變等事件發(fā)生,或達(dá)到一定的時(shí)間間隔后,會(huì)向Monitor發(fā)送MSG_PGSTATS消息,這里稱之為OSD到Monitor的心跳。
- Monitor收到消息,回復(fù)MSG_PGSTATSACK,并記錄心跳時(shí)間到last_osd_report。
- Monitor周期性的檢查所有OSD的last_osd_report,發(fā)現(xiàn)失效的節(jié)點(diǎn),并標(biāo)記為Down。
參數(shù):
mon_osd_report_timeout(900):多久沒(méi)有收到osd的匯報(bào),Monitor會(huì)將其標(biāo)記為Down;
osd_mon_report_interval_max(600):OSD最久多長(zhǎng)時(shí)間向Monitor匯報(bào)一次;
osd_mon_report_interval_min(5):OSD向Monitor匯報(bào)的最小時(shí)間間隔
總結(jié)
可以看出,Ceph中可以通過(guò)伙伴OSD匯報(bào)失效節(jié)點(diǎn)和Monitor統(tǒng)計(jì)來(lái)自O(shè)SD的心跳兩種方式發(fā)現(xiàn)OSD節(jié)點(diǎn)失效?;氐皆谖恼麻_(kāi)頭提到的一個(gè)合格的故障檢測(cè)機(jī)制需要做到的幾點(diǎn),結(jié)合Ceph的實(shí)現(xiàn)方式來(lái)理解其設(shè)計(jì)思路。
- 及時(shí):伙伴OSD可以在秒級(jí)發(fā)現(xiàn)節(jié)點(diǎn)失效并匯報(bào)Monitor,并在幾分鐘內(nèi)由Monitor將失效OSD下線。當(dāng)然,由于Ceph對(duì)一致性的要求,這個(gè)過(guò)程中客戶端寫(xiě)入會(huì)不可避免的被阻塞;
- 適當(dāng)?shù)膲毫Γ河捎谟谢锇镺SD匯報(bào)機(jī)制,Monitor與OSD之間的心跳統(tǒng)計(jì)更像是一種保險(xiǎn)措施,因此OSD向Monitor發(fā)送心跳的間隔可以長(zhǎng)達(dá)600秒,Monitor的檢測(cè)閾值也可以長(zhǎng)達(dá)900秒。Ceph實(shí)際上是將故障檢測(cè)過(guò)程中中心節(jié)點(diǎn)的壓力分散到所有的OSD上,以此提高中心節(jié)點(diǎn)Monitor的可靠性,進(jìn)而提高整個(gè)集群的可擴(kuò)展性;
- 容忍網(wǎng)絡(luò)抖動(dòng):Monitor收到OSD對(duì)其伙伴OSD的匯報(bào)后,并沒(méi)有馬上將目標(biāo)OSD下線,而是周期性的等待幾個(gè)條件:1,目標(biāo)OSD的失效時(shí)間大于通過(guò)固定量osd_heartbeat_grace和歷史網(wǎng)絡(luò)條件動(dòng)態(tài)確定的閾值;2,來(lái)自不同主機(jī)的匯報(bào)達(dá)到mon_osd_min_down_reporters。3,滿足前兩個(gè)條件前失效匯報(bào)沒(méi)有被源OSD取消。
- 擴(kuò)散:作為中心節(jié)點(diǎn)的Monitor并沒(méi)有在更新OSDMap后嘗試廣播通知所有的OSD和Client,而是惰性的等待OSD和Client來(lái)獲取。以此來(lái)減少M(fèi)onitor壓力并簡(jiǎn)化交互邏輯。
文章名稱:從Ceph看分布式系統(tǒng)故障檢測(cè)
分享URL:http://www.5511xx.com/article/cdspcis.html


咨詢
建站咨詢
