Ceph心跳機(jī)制

1. 心跳介紹

心跳是用于節(jié)點(diǎn)間檢測(cè)對(duì)方是否故障的,以便及時(shí)發(fā)現(xiàn)故障節(jié)點(diǎn)進(jìn)入相應(yīng)的故障處理流程。

問(wèn)題:

  • 故障檢測(cè)時(shí)間和心跳報(bào)文帶來(lái)的負(fù)載之間做權(quán)衡。
  • 心跳頻率太高則過(guò)多的心跳報(bào)文會(huì)影響系統(tǒng)性能。
  • 心跳頻率過(guò)低則會(huì)延長(zhǎng)發(fā)現(xiàn)故障節(jié)點(diǎn)的時(shí)間,從而影響系統(tǒng)的可用性。

故障檢測(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):網(wǎng)絡(luò)偶爾延遲。
  • 擴(kuò)散機(jī)制:節(jié)點(diǎn)存活狀態(tài)改變導(dǎo)致的元信息變化需要通過(guò)某種機(jī)制擴(kuò)散到整個(gè)集群。

2. Ceph 心跳檢測(cè)

ceph_heartbeat_1.png

OSD節(jié)點(diǎn)會(huì)監(jiān)聽public、cluster、front和back四個(gè)端口

  • public端口:監(jiān)聽來(lái)自Monitor和Client的連接。
  • cluster端口:監(jiān)聽來(lái)自O(shè)SD Peer的連接。
  • front端口:供客戶端連接集群使用的網(wǎng)卡, 這里臨時(shí)給集群內(nèi)部之間進(jìn)行心跳。
  • back端口:供客集群內(nèi)部使用的網(wǎng)卡。集群內(nèi)部之間進(jìn)行心跳。
  • hbclient:發(fā)送ping心跳的messenger。

3. Ceph OSD之間相互心跳檢測(cè)

ceph_heartbeat_osd.png

步驟:

  • 同一個(gè)PG內(nèi)OSD互相心跳,他們互相發(fā)送PING/PONG信息。
  • 每隔6s檢測(cè)一次(實(shí)際會(huì)在這個(gè)基礎(chǔ)上加一個(gè)隨機(jī)時(shí)間來(lái)避免峰值)。
  • 20s沒(méi)有檢測(cè)到心跳回復(fù),加入failure隊(duì)列。

4. Ceph OSD與Mon心跳檢測(cè)

ceph_heartbeat_mon.png

OSD報(bào)告給Monitor:

  • OSD有事件發(fā)生時(shí)(比如故障、PG變更)。
  • 自身啟動(dòng)5秒內(nèi)。
  • OSD周期性的上報(bào)給Monito
    • 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。
  • 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下線。

5. Ceph心跳檢測(cè)總結(jié)

Ceph通過(guò)伙伴OSD匯報(bào)失效節(jié)點(diǎn)和Monitor統(tǒng)計(jì)來(lái)自O(shè)SD的心跳兩種方式判定OSD節(jié)點(diǎn)失效。

  • 及時(shí):伙伴OSD可以在秒級(jí)發(fā)現(xiàn)節(jié)點(diǎn)失效并匯報(bào)Monitor,并在幾分鐘內(nèi)由Monitor將失效OSD下線。
  • 適當(dāng)?shù)膲毫Γ?/strong>由于有伙伴OSD匯報(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è)條件:
    • 目標(biāo)OSD的失效時(shí)間大于通過(guò)固定量osd_heartbeat_grace和歷史網(wǎng)絡(luò)條件動(dòng)態(tài)確定的閾值。
    • 來(lái)自不同主機(jī)的匯報(bào)達(dá)到mon_osd_min_down_reporters。
    • 滿足前兩個(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)化交互邏輯。

6. 心跳設(shè)置

6.1 配置監(jiān)視器/ OSD互動(dòng)

您已完成初始Ceph的配置之后,您可以部署和運(yùn)行的Ceph。當(dāng)你執(zhí)行一個(gè)命令,如ceph health 或 ceph -s , Ceph的監(jiān)視器將報(bào)告CEPH存儲(chǔ)集群的當(dāng)前狀態(tài)。Ceph的監(jiān)視器通過(guò)每個(gè)Ceph的OSD守護(hù)實(shí)例,以及相鄰的Ceph OSD守護(hù)實(shí)例,了解Ceph的存儲(chǔ)集群的相關(guān)狀態(tài)。Ceph的監(jiān)視器如果沒(méi)有收到報(bào)告,或者如果它接收Ceph的存儲(chǔ)集群的變化的報(bào)告,Ceph的監(jiān)視器更新的的CEPH集群映射圖的狀態(tài)。

Ceph為Ceph的監(jiān)視器/ Ceph的OSD守護(hù)程序交互提供合理的默認(rèn)設(shè)置。但是,您可以覆蓋默認(rèn)值。以下部分描述如何用Ceph的監(jiān)視器和Ceph的OSD守護(hù)實(shí)例互動(dòng)來(lái)達(dá)到Ceph的存儲(chǔ)集群監(jiān)控的目的。

6.2. OSDS檢查心跳

每個(gè)Ceph的OSD守護(hù)程序檢查其他Ceph的OSD守護(hù)進(jìn)程的心跳每6秒。Ceph的配置文件下的[OSD]部分加入OSD osd heartbeat interval ,或通過(guò)設(shè)定值在運(yùn)行時(shí),您可以更改心跳間隔。如果在20秒的寬限期內(nèi)鄰居的Ceph的OSD守護(hù)進(jìn)程不顯示心跳,Ceph的OSD守護(hù)進(jìn)程可能考慮周邊的Ceph OSD守護(hù)掛掉,并向一個(gè)Ceph的Monitor報(bào)告,這將更新的CEPH集群地圖。一個(gè)OSD osd heartbeat grace 可以在Ceph的配置文件下的[OSD]部分設(shè)置,或在運(yùn)行時(shí),你通過(guò)設(shè)置這個(gè)值改變這個(gè)寬限期。

6.3. OSDS報(bào)告掛掉的OSD

默認(rèn)情況下,Ceph的OSD守護(hù)程序必須向Ceph的監(jiān)視器報(bào)告三次:另一個(gè)Ceph的OSD守護(hù)程序已經(jīng)掛掉,在Ceph的Monitor承認(rèn)該報(bào)告Ceph的OSD守護(hù)掛掉之前。在(早期V0.62版本之前)Ceph的配置文件下的[MON]部分添加 osd min down reports setting,或者通過(guò)設(shè)定值在運(yùn)行時(shí),您可以更改OSD報(bào)告的掛掉的最低數(shù)量 。默認(rèn)情況下,只有一個(gè)Ceph的OSD守護(hù)進(jìn)程是必需報(bào)告另一個(gè)Ceph的OSD守護(hù)進(jìn)程。您可以更改向Ceph監(jiān)視器報(bào)告Ceph的OSD守護(hù)進(jìn)程的Ceph的OSD Daemones 的數(shù)量,通過(guò)添加一個(gè)mon osd min down reporters設(shè)置在Ceph的配置文件中,或者通過(guò)設(shè)定值在運(yùn)行時(shí)。

6.4. 凝視失敗的OSD報(bào)告

Ceph的OSD守護(hù)進(jìn)程如果不能和Ceph的配置文件(或群集地圖)中定義的OSD守護(hù)同行,它將每30秒ping一個(gè)Ceph的監(jiān)視器,為了最新副本的集群映射圖。Ceph的配置文件 下的[OSD]部分加入 osd mon heartbeat interval 設(shè)置,或通過(guò)在運(yùn)行時(shí)設(shè)定值,您可以更改Ceph的監(jiān)控心跳間隔。

6.5. OSDS報(bào)告其狀態(tài)

Ceph的OSD守護(hù)進(jìn)程如果不向Ceph的監(jiān)視器報(bào)告,至少每120秒一次,Ceph的監(jiān)視器會(huì)考慮Ceph的OSD守護(hù)已經(jīng)掛掉。您可以更改Ceph的監(jiān)控報(bào)告間隔,通過(guò)加入 osd mon report interval max 設(shè)置在Ceph的配置文件的[OSD]部分,或者通過(guò)設(shè)置在運(yùn)行時(shí)的值。Ceph的OSD守護(hù)進(jìn)程會(huì)嘗試報(bào)告其狀態(tài)每30秒。在Ceph的配置文件下的[OSD]部分加入 osd mon report interval min s設(shè)置,或者通過(guò)設(shè)定值在運(yùn)行時(shí),您可以更改Ceph的OSD守護(hù)報(bào)告間隔。

7. 配置設(shè)置

修改心跳設(shè)置時(shí),你應(yīng)該將它們包括在 您的配置文件的[global]部分。

7.1 監(jiān)視器MONITOR設(shè)置

參數(shù) 說(shuō)明 類型 默認(rèn)值
mon OSD min up ratio Ceph的OSD未掛掉的最低比率在Ceph的OSD守護(hù)程序被仍定掛掉之前 double 0.3
mon OSD min in ratio Ceph的OSD實(shí)例的最低比率在Ceph的OSD守護(hù)程序被仍定出局之前 double 0.3
mon osd laggy halflife laggy估計(jì)會(huì)腐爛的秒數(shù) int 60 * 60
mon osd laggy weight laggy估計(jì)衰減的新樣本的權(quán)重 double 0.3
mon osd adjust heartbeat grace 如果設(shè)置為true,Ceph將在laggy估計(jì)的基礎(chǔ)上擴(kuò)展 bool true
mon osd adjust down out interval 如果設(shè)置為true,Ceph基于laggy估計(jì)擴(kuò)展 bool true
mon osd auto mark in Ceph將標(biāo)記任何引導(dǎo)的Ceph的OSD守護(hù)進(jìn)程作為在 CEPH存儲(chǔ)集群 bool false
mon osd auto mark auto out in Ceph的標(biāo)記引導(dǎo)Ceph的OSD守護(hù) Ceph的存儲(chǔ)集群,集群中的自動(dòng)標(biāo)記 bool true
mon osd auto mark new in 頭孢將迎來(lái)啟動(dòng)新的Ceph的OSD守護(hù)在 Ceph的存儲(chǔ)集群 bool true
mon osd down out subtree limit 最大的CRUSH單位Ceph的類型,會(huì)自動(dòng)標(biāo)記出來(lái) String rack
mon osd report timeout 寬限期秒下來(lái)在聲明反應(yīng)遲鈍Ceph的OSD守護(hù)前 32-bit Integer 900
mon osd min down reporters Ceph的OSD守護(hù)報(bào)告向下 Ceph的OSD守護(hù)所需的最低數(shù)量 32-bit Integer 1
mon osd min down reports Ceph的OSD守護(hù)的最低次數(shù)必須報(bào)告說(shuō),另一個(gè)Ceph的OSD守護(hù)下來(lái) 32-bit Integer 3

7.2 OSD設(shè)置

參數(shù) 說(shuō)明 類型 默認(rèn)值
OSD heartbeat address 一個(gè)Ceph的OSD守護(hù)進(jìn)程的網(wǎng)絡(luò)地址的心跳 Address The host address
OSD heartbeat interval 多久Ceph的OSD守護(hù)坪及其同行(以秒計(jì)) 32-bit Integer 6
OSD heartbeat grace Ceph的OSD當(dāng)一個(gè)守護(hù)進(jìn)程并沒(méi)有表現(xiàn)出心跳Ceph的存儲(chǔ)集群認(rèn)為,經(jīng)過(guò)時(shí)間的 32-bit Integer 20
OSD mon heartbeat interval Ceph的的OSD守護(hù)坪一個(gè)Ceph的監(jiān)視器如果它沒(méi)有的CEPH OSD守護(hù)同行,多久 32-bit Integer 30
OSD mon report interval max Ceph的OSD守護(hù)進(jìn)程報(bào)告Ceph的監(jiān)視器Ceph的監(jiān)視器前認(rèn)為Ceph的OSD守護(hù)下來(lái)的時(shí)間以秒為單位的最大 32-bit Integer 120
OSD mon report inteval min 秒為Ceph的OSD的守護(hù)Ceph的監(jiān)視器,以防止Ceph的監(jiān)視器考慮Ceph的OSD守護(hù)的最低數(shù)量 32-bit Integer 5 (有效范圍:應(yīng)小于OSD 周一 報(bào)告 間隔 最大)
OSD mon ACK timeout 等待的秒數(shù)為Ceph的監(jiān)視器確認(rèn)請(qǐng)求統(tǒng)計(jì) 32-bit Integer 30
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容