Ceph心跳機制
1. 心跳介紹
心跳是用於節點間檢測對方是否故障的,以便及時發現故障節點進入相應的故障處理流程。
問題:
- 故障檢測時間和心跳報文帶來的負載之間做權衡。
- 心跳頻率太高則過多的心跳報文會影響系統效能。
- 心跳頻率過低則會延長發現故障節點的時間,從而影響系統的可用性。
故障檢測策略應該能夠做到:
- 及時:節點發生異常如當機或網路中斷時,叢集可以在可接受的時間範圍內感知。
- 適當的壓力:包括對節點的壓力,和對網路的壓力。
- 容忍網路抖動:網路偶爾延遲。
- 擴散機制:節點存活狀態改變導致的元資訊變化需要透過某種機制擴散到整個叢集。
2. Ceph 心跳檢測
OSD節點會監聽public、cluster、front和back四個埠
- public埠:監聽來自Monitor和Client的連線。
- cluster埠:監聽來自OSD Peer的連線。
- front埠:供客戶端連線叢集使用的網路卡, 這裡臨時給叢集內部之間進行心跳。
- back埠:供客叢集內部使用的網路卡。叢集內部之間進行心跳。
- hbclient:傳送ping心跳的messenger。
3. Ceph OSD之間相互心跳檢測
步驟:
- 同一個PG內OSD互相心跳,他們互相傳送PING/PONG資訊。
- 每隔6s檢測一次(實際會在這個基礎上加一個隨機時間來避免峰值)。
- 20s沒有檢測到心跳回復,加入failure佇列。
4. Ceph OSD與Mon心跳檢測
OSD報告給Monitor:
- OSD有事件發生時(比如故障、PG變更)。
- 自身啟動5秒內。
- OSD週期性的上報給Monito
- OSD檢查failure_queue中的夥伴OSD失敗資訊。
- 向Monitor傳送失效報告,並將失敗資訊加入failure_pending佇列,然後將其從failure_queue移除。
- 收到來自failure_queue或者failure_pending中的OSD的心跳時,將其從兩個佇列中移除,並告知Monitor取消之前的失效報告。
- 當發生與Monitor網路重連時,會將failure_pending中的錯誤報告加回到failure_queue中,並再次傳送給Monitor。
- Monitor統計下線OSD
- Monitor收集來自OSD的夥伴失效報告。
- 當錯誤報告指向的OSD失效超過一定閾值,且有足夠多的OSD報告其失效時,將該OSD下線。
5. Ceph心跳檢測總結
Ceph透過夥伴OSD彙報失效節點和Monitor統計來自OSD的心跳兩種方式判定OSD節點失效。
- 及時:夥伴OSD可以在秒級發現節點失效並彙報Monitor,並在幾分鐘內由Monitor將失效OSD下線。
- 適當的壓力:由於有夥伴OSD彙報機制,Monitor與OSD之間的心跳統計更像是一種保險措施,因此OSD向Monitor傳送心跳的間隔可以長達600秒,Monitor的檢測閾值也可以長達900秒。Ceph實際上是將故障檢測過程中中心節點的壓力分散到所有的OSD上,以此提高中心節點Monitor的可靠性,進而提高整個叢集的可擴充套件性。
-
容忍網路抖動:Monitor收到OSD對其夥伴OSD的彙報後,並沒有馬上將目標OSD下線,而是週期性的等待幾個條件:
- 目標OSD的失效時間大於透過固定量osd_heartbeat_grace和歷史網路條件動態確定的閾值。
- 來自不同主機的彙報達到mon_osd_min_down_reporters。
- 滿足前兩個條件前失效彙報沒有被源OSD取消。
- 擴散:作為中心節點的Monitor並沒有在更新OSDMap後嘗試廣播通知所有的OSD和Client,而是惰性的等待OSD和Client來獲取。以此來減少Monitor壓力並簡化互動邏輯。
6. 心跳設定
6.1 配置監視器/ OSD互動
您已完成初始Ceph的配置之後,您可以部署和執行的Ceph。當你執行一個命令,如ceph health 或 ceph -s , 將報告 的當前狀態。Ceph的監視器透過每個 例項,以及相鄰的Ceph OSD守護例項,瞭解Ceph的儲存叢集的相關狀態。Ceph的監視器如果沒有收到報告,或者如果它接收Ceph的儲存叢集的變化的報告,Ceph的監視器更新的的 對映圖的狀態。
Ceph為Ceph的監視器/ Ceph的OSD守護程式互動提供合理的預設設定。但是,您可以覆蓋預設值。以下部分描述如何用Ceph的監視器和Ceph的OSD守護例項互動來達到Ceph的儲存叢集監控的目的。
6.2. OSDS檢查心跳
每個Ceph的OSD守護程式檢查其他Ceph的OSD守護程式的心跳每6秒。Ceph的配置檔案下的[OSD]部分加入OSD osd heartbeat interval ,或透過設定值在執行時,您可以更改心跳間隔。如果在20秒的寬限期內鄰居的Ceph的OSD守護程式不顯示心跳,Ceph的OSD守護程式可能考慮周邊的Ceph OSD守護掛掉,並向一個Ceph的Monitor報告,這將更新的CEPH叢集地圖。一個OSD osd heartbeat grace 可以在Ceph的配置檔案下的[OSD]部分設定,或在執行時,你透過設定這個值改變這個寬限期。
6.3. OSDS報告掛掉的OSD
預設情況下,Ceph的OSD守護程式必須向Ceph的監視器報告三次:另一個Ceph的OSD守護程式已經掛掉,在Ceph的Monitor承認該報告Ceph的OSD守護掛掉之前。在(早期V0.62版本之前)Ceph的配置檔案下的[MON]部分新增 osd min down reports setting,或者透過設定值在執行時,您可以更改OSD報告的掛掉的最低數量 。預設情況下,只有一個Ceph的OSD守護程式是必需報告另一個Ceph的OSD守護程式。您可以更改向Ceph監視器報告Ceph的OSD守護程式的Ceph的OSD Daemones 的數量,透過新增一個mon osd min down reporters設定在Ceph的配置檔案中,或者透過設定值在執行時。
6.4. 凝視失敗的OSD報告
Ceph的OSD守護程式如果不能和Ceph的配置檔案(或群集地圖)中定義的OSD守護同行,它將每30秒ping一個Ceph的監視器,為了最新副本的叢集對映圖。Ceph的配置檔案 下的[OSD]部分加入 osd mon heartbeat interval 設定,或透過在執行時設定值,您可以更改Ceph的監控心跳間隔。
6.5. OSDS報告其狀態
Ceph的OSD守護程式如果不向Ceph的監視器報告,至少每120秒一次,Ceph的監視器會考慮Ceph的OSD守護已經掛掉。您可以更改Ceph的監控報告間隔,透過加入 osd mon report interval max 設定在Ceph的配置檔案的[OSD]部分,或者透過設定在執行時的值。Ceph的OSD守護程式會嘗試報告其狀態每30秒。在Ceph的配置檔案下的[OSD]部分加入 osd mon report interval min s設定,或者透過設定值在執行時,您可以更改Ceph的OSD守護報告間隔。
7. 配置設定
修改心跳設定時,你應該將它們包括在 您的配置檔案的[global]部分。
7.1 監視器MONITOR設定
引數 | 說明 | 型別 | 預設值 |
---|---|---|---|
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估計會腐爛的秒數 | int | 60 * 60 |
mon osd laggy weight | laggy估計衰減的新樣本的權重 | double | 0.3 |
mon osd adjust heartbeat grace | 如果設定為true,Ceph將在laggy估計的基礎上擴充套件 | bool | true |
mon osd adjust down out interval | 如果設定為true,Ceph基於laggy估計擴充套件 | bool | true |
mon osd auto mark in | Ceph將標記任何引導的Ceph的OSD守護程式作為在 CEPH儲存叢集 | bool | false |
mon osd auto mark auto out in | Ceph的標記引導Ceph的OSD守護 Ceph的儲存叢集,叢集中的自動標記 | bool | true |
mon osd auto mark new in | 頭孢將迎來啟動新的Ceph的OSD守護在 Ceph的儲存叢集 | bool | true |
mon osd down out subtree limit | 最大的 單位Ceph的型別,會自動標記出來 | String | rack |
mon osd report timeout | 寬限期秒下來在宣告反應遲鈍Ceph的OSD守護前 | 32-bit Integer | 900 |
mon osd min down reporters | Ceph的OSD守護報告向下 Ceph的OSD守護所需的最低數量 | 32-bit Integer | 1 |
mon osd min down reports | Ceph的OSD守護的最低次數必須報告說,另一個Ceph的OSD守護下來 | 32-bit Integer | 3 |
7.2 OSD設定
引數 | 說明 | 型別 | 預設值 |
---|---|---|---|
OSD heartbeat address | 一個Ceph的OSD守護程式的網路地址的心跳 | Address | The host address |
OSD heartbeat interval | 多久Ceph的OSD守護坪及其同行(以秒計) | 32-bit Integer | 6 |
OSD heartbeat grace | Ceph的OSD當一個守護程式並沒有表現出心跳Ceph的儲存叢集認為,經過時間的 | 32-bit Integer | 20 |
OSD mon heartbeat interval | Ceph的的OSD守護坪一個Ceph的監視器如果它沒有的CEPH OSD守護同行,多久 | 32-bit Integer | 30 |
OSD mon report interval max | Ceph的OSD守護程式報告Ceph的監視器Ceph的監視器前認為Ceph的OSD守護下來的時間以秒為單位的最大 | 32-bit Integer | 120 |
OSD mon report inteval min | 秒為Ceph的OSD的守護Ceph的監視器,以防止Ceph的監視器考慮Ceph的OSD守護的最低數量 | 32-bit Integer | 5 (有效範圍:應小於OSD 週一 報告 間隔 最大) |
OSD mon ACK timeout | 等待的秒數為Ceph的監視器確認請求統計 | 32-bit Integer |
|
作者:李航
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559758/viewspace-2675478/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一次ceph心跳機制異常的處理
- 心跳檢測機制
- 聊聊心跳機制及netty心跳實現Netty
- xxl-job心跳機制
- Kafka消費與心跳機制Kafka
- 理解WebSocket心跳及重連機制(五)Web
- Netty(一) SpringBoot 整合長連線心跳機制NettySpring Boot
- 如何設計一個優雅的心跳機制
- UAV心跳機制與容器、程式資料採集
- [原始碼解析] 從TimeoutException看Flink的心跳機制原始碼Exception
- 螞蟻金服通訊框架 SOFABolt 解析 | 超時控制機制及心跳機制框架
- Spark RPC框架原始碼分析(三)Spark心跳機制分析SparkRPC框架原始碼
- hadoop原始碼_hdfs啟動流程_3_心跳機制Hadoop原始碼
- uni-app中websocket的使用 斷開重連、心跳機制APPWeb
- 我的javascript心跳機JavaScript
- Spring Cloud Eureka原始碼分析之心跳續約及自我保護機制SpringCloud原始碼
- 沃趣微講堂 | Oracle叢集技術(五):叢集中的三種心跳機制Oracle
- 心跳包
- 面試官:Netty心跳檢測機制是什麼,怎麼自定義檢測間隔時間?面試Netty
- 從零開始實現簡單 RPC 框架 9:網路通訊之心跳與重連機制RPC框架
- 將虛擬機器跑在ceph之中虛擬機
- 無人機get新技能,惹黑熊心跳加速無人機
- 基於Netty的簡單IM(流程圖詳解互動過程、使用到的Handler以及心跳機制)Netty流程圖
- 高效 實現長連線保活:手把手教你實現 自適應的心跳保活機制
- 高效維持網路長連線:手把手教你實現 自適應的心跳保活機制
- HDFS 02 - HDFS 的機制:副本機制、機架感知機制、負載均衡機制負載
- 心跳檢測
- 即時通訊技術文集(第12期):網路保活、心跳機制等文章彙總 [共23篇]
- Ceph df分析
- Ceph核心元件元件
- ceph叢集
- Ceph介紹
- CEPH-4:ceph RadowGW物件儲存功能詳解物件
- CEPH-5:ceph叢集基本概念與管理
- ceph:忘記 甚至 從ceph裡刪除了 ceph.client.admin密碼,怎麼處理?client密碼
- 萬字長文:手把手教你實現一套高效的IM長連線自適應心跳保活機制
- JavaScript執行緒機制與事件機制JavaScript執行緒事件
- 快速失敗機制&失敗安全機制