Ceph心跳機制

java06051515發表於2020-02-13

1. 心跳介紹

心跳是用於節點間檢測對方是否故障的,以便及時發現故障節點進入相應的故障處理流程。

問題:

  • 故障檢測時間和心跳報文帶來的負載之間做權衡。
  • 心跳頻率太高則過多的心跳報文會影響系統效能。
  • 心跳頻率過低則會延長發現故障節點的時間,從而影響系統的可用性。

故障檢測策略應該能夠做到:

  • 及時:節點發生異常如當機或網路中斷時,叢集可以在可接受的時間範圍內感知。
  • 適當的壓力:包括對節點的壓力,和對網路的壓力。
  • 容忍網路抖動:網路偶爾延遲。
  • 擴散機制:節點存活狀態改變導致的元資訊變化需要透過某種機制擴散到整個叢集。

2. Ceph 心跳檢測

Ceph心跳機制
ceph_heartbeat_1.png

OSD節點會監聽public、cluster、front和back四個埠

  • public埠:監聽來自Monitor和Client的連線。
  • cluster埠:監聽來自OSD Peer的連線。
  • front埠:供客戶端連線叢集使用的網路卡, 這裡臨時給叢集內部之間進行心跳。
  • back埠:供客叢集內部使用的網路卡。叢集內部之間進行心跳。
  • hbclient:傳送ping心跳的messenger。

3. Ceph OSD之間相互心跳檢測

Ceph心跳機制
ceph_heartbeat_osd.png

步驟:

  • 同一個PG內OSD互相心跳,他們互相傳送PING/PONG資訊。
  • 每隔6s檢測一次(實際會在這個基礎上加一個隨機時間來避免峰值)。
  • 20s沒有檢測到心跳回復,加入failure佇列。

4. Ceph OSD與Mon心跳檢測

Ceph心跳機制
ceph_heartbeat_mon.png

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章