1. 心跳介紹
心跳是用于節(jié)點間檢測對方是否故障的疚宇,以便及時發(fā)現(xiàn)故障節(jié)點進入相應(yīng)的故障處理流程。
問題:
- 故障檢測時間和心跳報文帶來的負載之間做權(quán)衡。
- 心跳頻率太高則過多的心跳報文會影響系統(tǒng)性能。
- 心跳頻率過低則會延長發(fā)現(xiàn)故障節(jié)點的時間欧聘,從而影響系統(tǒng)的可用性非春。
故障檢測策略應(yīng)該能夠做到:
- 及時:節(jié)點發(fā)生異常如宕機或網(wǎng)絡(luò)中斷時御吞,集群可以在可接受的時間范圍內(nèi)感知宽堆。
- 適當(dāng)?shù)膲毫Γ喊▽?jié)點的壓力郑原,和對網(wǎng)絡(luò)的壓力唉韭。
- 容忍網(wǎng)絡(luò)抖動:網(wǎng)絡(luò)偶爾延遲。
- 擴散機制:節(jié)點存活狀態(tài)改變導(dǎo)致的元信息變化需要通過某種機制擴散到整個集群犯犁。
2. Ceph 心跳檢測
OSD節(jié)點會監(jiān)聽public属愤、cluster、front和back四個端口
- public端口:監(jiān)聽來自Monitor和Client的連接栖秕。
- cluster端口:監(jiān)聽來自O(shè)SD Peer的連接春塌。
- front端口:供客戶端連接集群使用的網(wǎng)卡, 這里臨時給集群內(nèi)部之間進行心跳。
- back端口:供客集群內(nèi)部使用的網(wǎng)卡。集群內(nèi)部之間進行心跳只壳。
- hbclient:發(fā)送ping心跳的messenger俏拱。
3. Ceph OSD之間相互心跳檢測
步驟:
- 同一個PG內(nèi)OSD互相心跳,他們互相發(fā)送PING/PONG信息吼句。
- 每隔6s檢測一次(實際會在這個基礎(chǔ)上加一個隨機時間來避免峰值)锅必。
- 20s沒有檢測到心跳回復(fù),加入failure隊列惕艳。
4. Ceph OSD與Mon心跳檢測
OSD報告給Monitor:
- OSD有事件發(fā)生時(比如故障搞隐、PG變更)。
- 自身啟動5秒內(nèi)远搪。
- OSD周期性的上報給Monito
- OSD檢查failure_queue中的伙伴OSD失敗信息劣纲。
- 向Monitor發(fā)送失效報告,并將失敗信息加入failure_pending隊列谁鳍,然后將其從failure_queue移除癞季。
- 收到來自failure_queue或者failure_pending中的OSD的心跳時,將其從兩個隊列中移除倘潜,并告知Monitor取消之前的失效報告绷柒。
- 當(dāng)發(fā)生與Monitor網(wǎng)絡(luò)重連時,會將failure_pending中的錯誤報告加回到failure_queue中涮因,并再次發(fā)送給Monitor废睦。
- Monitor統(tǒng)計下線OSD
- Monitor收集來自O(shè)SD的伙伴失效報告。
- 當(dāng)錯誤報告指向的OSD失效超過一定閾值养泡,且有足夠多的OSD報告其失效時嗜湃,將該OSD下線。
5. Ceph心跳檢測總結(jié)
Ceph通過伙伴OSD匯報失效節(jié)點和Monitor統(tǒng)計來自O(shè)SD的心跳兩種方式判定OSD節(jié)點失效瓤荔。
- 及時:伙伴OSD可以在秒級發(fā)現(xiàn)節(jié)點失效并匯報Monitor净蚤,并在幾分鐘內(nèi)由Monitor將失效OSD下線。
- 適當(dāng)?shù)膲毫Γ?/strong>由于有伙伴OSD匯報機制输硝,Monitor與OSD之間的心跳統(tǒng)計更像是一種保險措施今瀑,因此OSD向Monitor發(fā)送心跳的間隔可以長達600秒,Monitor的檢測閾值也可以長達900秒点把。Ceph實際上是將故障檢測過程中中心節(jié)點的壓力分散到所有的OSD上橘荠,以此提高中心節(jié)點Monitor的可靠性,進而提高整個集群的可擴展性郎逃。
-
容忍網(wǎng)絡(luò)抖動:Monitor收到OSD對其伙伴OSD的匯報后哥童,并沒有馬上將目標(biāo)OSD下線,而是周期性的等待幾個條件:
- 目標(biāo)OSD的失效時間大于通過固定量osd_heartbeat_grace和歷史網(wǎng)絡(luò)條件動態(tài)確定的閾值褒翰。
- 來自不同主機的匯報達到mon_osd_min_down_reporters贮懈。
- 滿足前兩個條件前失效匯報沒有被源OSD取消匀泊。
- 擴散:作為中心節(jié)點的Monitor并沒有在更新OSDMap后嘗試廣播通知所有的OSD和Client,而是惰性的等待OSD和Client來獲取朵你。以此來減少Monitor壓力并簡化交互邏輯各聘。
6. 心跳設(shè)置
6.1 配置監(jiān)視器/ OSD互動
您已完成初始Ceph的配置之后,您可以部署和運行的Ceph抡医。當(dāng)你執(zhí)行一個命令躲因,如ceph health 或 ceph -s , Ceph的監(jiān)視器將報告CEPH存儲集群的當(dāng)前狀態(tài)忌傻。Ceph的監(jiān)視器通過每個Ceph的OSD守護實例大脉,以及相鄰的Ceph OSD守護實例,了解Ceph的存儲集群的相關(guān)狀態(tài)水孩。Ceph的監(jiān)視器如果沒有收到報告镰矿,或者如果它接收Ceph的存儲集群的變化的報告,Ceph的監(jiān)視器更新的的CEPH集群映射圖的狀態(tài)荷愕。
Ceph為Ceph的監(jiān)視器/ Ceph的OSD守護程序交互提供合理的默認設(shè)置衡怀。但是,您可以覆蓋默認值安疗。以下部分描述如何用Ceph的監(jiān)視器和Ceph的OSD守護實例互動來達到Ceph的存儲集群監(jiān)控的目的。
6.2. OSDS檢查心跳
每個Ceph的OSD守護程序檢查其他Ceph的OSD守護進程的心跳每6秒够委。Ceph的配置文件下的[OSD]部分加入OSD osd heartbeat interval 荐类,或通過設(shè)定值在運行時,您可以更改心跳間隔茁帽。如果在20秒的寬限期內(nèi)鄰居的Ceph的OSD守護進程不顯示心跳玉罐,Ceph的OSD守護進程可能考慮周邊的Ceph OSD守護掛掉,并向一個Ceph的Monitor報告潘拨,這將更新的CEPH集群地圖吊输。一個OSD osd heartbeat grace 可以在Ceph的配置文件下的[OSD]部分設(shè)置,或在運行時铁追,你通過設(shè)置這個值改變這個寬限期季蚂。
6.3. OSDS報告掛掉的OSD
默認情況下,Ceph的OSD守護程序必須向Ceph的監(jiān)視器報告三次:另一個Ceph的OSD守護程序已經(jīng)掛掉琅束,在Ceph的Monitor承認該報告Ceph的OSD守護掛掉之前扭屁。在(早期V0.62版本之前)Ceph的配置文件下的[MON]部分添加 osd min down reports setting,或者通過設(shè)定值在運行時涩禀,您可以更改OSD報告的掛掉的最低數(shù)量 料滥。默認情況下,只有一個Ceph的OSD守護進程是必需報告另一個Ceph的OSD守護進程艾船。您可以更改向Ceph監(jiān)視器報告Ceph的OSD守護進程的Ceph的OSD Daemones 的數(shù)量葵腹,通過添加一個mon osd min down reporters設(shè)置在Ceph的配置文件中高每,或者通過設(shè)定值在運行時。
6.4. 凝視失敗的OSD報告
Ceph的OSD守護進程如果不能和Ceph的配置文件(或群集地圖)中定義的OSD守護同行践宴,它將每30秒ping一個Ceph的監(jiān)視器觉义,為了最新副本的集群映射圖。Ceph的配置文件 下的[OSD]部分加入 osd mon heartbeat interval 設(shè)置浴井,或通過在運行時設(shè)定值晒骇,您可以更改Ceph的監(jiān)控心跳間隔。
6.5. OSDS報告其狀態(tài)
Ceph的OSD守護進程如果不向Ceph的監(jiān)視器報告磺浙,至少每120秒一次洪囤,Ceph的監(jiān)視器會考慮Ceph的OSD守護已經(jīng)掛掉。您可以更改Ceph的監(jiān)控報告間隔撕氧,通過加入 osd mon report interval max 設(shè)置在Ceph的配置文件的[OSD]部分瘤缩,或者通過設(shè)置在運行時的值。Ceph的OSD守護進程會嘗試報告其狀態(tài)每30秒伦泥。在Ceph的配置文件下的[OSD]部分加入 osd mon report interval min s設(shè)置剥啤,或者通過設(shè)定值在運行時,您可以更改Ceph的OSD守護報告間隔不脯。
7. 配置設(shè)置
修改心跳設(shè)置時府怯,你應(yīng)該將它們包括在 您的配置文件的[global]部分。
7.1 監(jiān)視器MONITOR設(shè)置
參數(shù) | 說明 | 類型 | 默認值 |
---|---|---|---|
mon OSD min up ratio | Ceph的OSD未掛掉的最低比率在Ceph的OSD守護程序被仍定掛掉之前 | double | 0.3 |
mon OSD min in ratio | Ceph的OSD實例的最低比率在Ceph的OSD守護程序被仍定出局之前 | double | 0.3 |
mon osd laggy halflife | laggy估計會腐爛的秒數(shù) | int | 60 * 60 |
mon osd laggy weight | laggy估計衰減的新樣本的權(quán)重 | double | 0.3 |
mon osd adjust heartbeat grace | 如果設(shè)置為true防楷,Ceph將在laggy估計的基礎(chǔ)上擴展 | bool | true |
mon osd adjust down out interval | 如果設(shè)置為true牺丙,Ceph基于laggy估計擴展 | bool | true |
mon osd auto mark in | Ceph將標(biāo)記任何引導(dǎo)的Ceph的OSD守護進程作為在 CEPH存儲集群 | bool | false |
mon osd auto mark auto out in | Ceph的標(biāo)記引導(dǎo)Ceph的OSD守護 Ceph的存儲集群,集群中的自動標(biāo)記 | bool | true |
mon osd auto mark new in | 頭孢將迎來啟動新的Ceph的OSD守護在 Ceph的存儲集群 | bool | true |
mon osd down out subtree limit | 最大的CRUSH單位Ceph的類型复局,會自動標(biāo)記出來 | String | rack |
mon osd report timeout | 寬限期秒下來在聲明反應(yīng)遲鈍Ceph的OSD守護前 | 32-bit Integer | 900 |
mon osd min down reporters | Ceph的OSD守護報告向下 Ceph的OSD守護所需的最低數(shù)量 | 32-bit Integer | 1 |
mon osd min down reports | Ceph的OSD守護的最低次數(shù)必須報告說冲簿,另一個Ceph的OSD守護下來 | 32-bit Integer | 3 |
7.2 OSD設(shè)置
參數(shù) | 說明 | 類型 | 默認值 |
---|---|---|---|
OSD heartbeat address | 一個Ceph的OSD守護進程的網(wǎng)絡(luò)地址的心跳 | Address | The host address |
OSD heartbeat interval | 多久Ceph的OSD守護坪及其同行(以秒計) | 32-bit Integer | 6 |
OSD heartbeat grace | Ceph的OSD當(dāng)一個守護進程并沒有表現(xiàn)出心跳Ceph的存儲集群認為,經(jīng)過時間的 | 32-bit Integer | 20 |
OSD mon heartbeat interval | Ceph的的OSD守護坪一個Ceph的監(jiān)視器如果它沒有的CEPH OSD守護同行亿昏,多久 | 32-bit Integer | 30 |
OSD mon report interval max | Ceph的OSD守護進程報告Ceph的監(jiān)視器Ceph的監(jiān)視器前認為Ceph的OSD守護下來的時間以秒為單位的最大 | 32-bit Integer | 120 |
OSD mon report inteval min | 秒為Ceph的OSD的守護Ceph的監(jiān)視器峦剔,以防止Ceph的監(jiān)視器考慮Ceph的OSD守護的最低數(shù)量 | 32-bit Integer | 5 (有效范圍:應(yīng)小于OSD 周一 報告 間隔 最大) |
OSD mon ACK timeout | 等待的秒數(shù)為Ceph的監(jiān)視器確認請求統(tǒng)計 | 32-bit Integer | 30 |