ceph - pg 常見狀態(tài)

官網(wǎng):http://docs.ceph.com/docs/master/rados/operations/pg-states/

說明

pg ( placement group ) 是數(shù)據(jù)存儲的重要單位
在使用 ceph 的時候, pg 會經(jīng)常發(fā)生狀態(tài)的變化, 參考下面例子

當(dāng)創(chuàng)建池的時候, 將會創(chuàng)建相應(yīng)的 pg, 那么可以看到 pg creating 狀態(tài)
當(dāng)部分 pg 創(chuàng)建成功后, 將會發(fā)現(xiàn) pg 會進(jìn)入 peering 狀態(tài)
當(dāng)所有 pg peering 完成后, 將可見到狀態(tài)變成 active+clean

常見的 pg 狀態(tài)

creating (創(chuàng)建中)

PG 正在被創(chuàng)建, 通常當(dāng)存儲池正在卑創(chuàng)建或增加一個存儲池的 PG 數(shù)量時, PG 會呈現(xiàn)這個狀態(tài)

Down (失效)

PG 處于失效狀態(tài), PG 應(yīng)該處于離線狀態(tài)

repair(修復(fù))

PG 正在被檢查, 被發(fā)現(xiàn)的任何不一致都將盡可能被修復(fù).

peering (等待互聯(lián))

1 當(dāng) ceph peering pg, ceph 將會把 pg 副本協(xié)定導(dǎo)入 osd, 當(dāng) ceph 完成 peering, 意味著 osd 同意當(dāng)前 PG 狀態(tài), 并允許寫入
2 PG 處于 peering 過程中, peering 由主 osd 發(fā)起的使存放 PG 副本的所有 OSD 就 PG 的所有對象和元素數(shù)據(jù)的狀態(tài)達(dá)成一致的過程, peering 過程完成后, 主 OSD 就可以接受客戶端寫請求.

Active (活動)

1 當(dāng) ceph 完成 peering 過程, pg 將會變成 active, active 狀態(tài)意味著 pg 中的數(shù)據(jù)變得可用, 主 pg 將可執(zhí)行讀寫操作
2 PG 是活動的, 意味著 PG 中的數(shù)據(jù)可以被讀寫, 對該 PG 的操作請求都講會被處理.

Clean (干凈)

1 當(dāng) pg 顯示 clean 狀態(tài), 主 osd 與副本 osd 成功同步并且沒有異步復(fù)制, ceph 在 pg 中所有對象具有正確的副本數(shù)量
2 PG 中的所有對象都已經(jīng)卑復(fù)制了規(guī)定的副本數(shù)量.

Replay (重做)

某 OSD 崩潰后, PG 正在等待客戶端重新發(fā)起操作

undersized

PG沒有滿足設(shè)定的replicas數(shù)量要求.

Degraded (降級)

  1. 當(dāng)客戶端寫對象到主 osd, 主 OSD 會把數(shù)據(jù)寫復(fù)制到對應(yīng)復(fù)制 OSD, 在主 OSD 把對象寫入存儲后, PG 會顯示為 degraded 狀態(tài), 直到主 osd 從復(fù)制 OSD 中接收到創(chuàng)建副本對象完成信息;
  1. PG 處于 active+degraded 原因是因為 OSD 是處于活躍, 但并沒有完成所有的對象副本寫入, 假如 OSD DOWN, CEPH 標(biāo)記每個 PG 分配到這個相關(guān) OSD 的狀態(tài)為 degraded, 當(dāng) OSD 重新上線, OSD 將會重新恢復(fù);
  1. 假如 OSD DOWN 并且 degraded 狀態(tài)持續(xù), CEPH 會標(biāo)記 DOWN OSD, 并會對集群遷移相關(guān) OSD 的數(shù)據(jù), 對應(yīng)時間由 mon osd down out interval 參數(shù)決定;
  1. PG 可以被降級為 degraded, 因為 ceph 在對應(yīng) PG 中無法找到一個或者多個相關(guān)的對象, 你不可以讀寫 unfound 對象, 你仍然可以訪問標(biāo)記為 degraded PG 的其他數(shù)據(jù)

5 PG 中部分對象的副本數(shù)量未達(dá)到規(guī)定的數(shù)量

Inconsistent (不一致)

PG副本出現(xiàn)不一致, 對象大小不正確或者恢復(fù)借宿后某個副本出現(xiàn)對象丟失現(xiàn)象

recoverying (恢復(fù)中)

ceph 設(shè)備故障容忍在一定范圍的軟件與硬件問題, 當(dāng) OSD 變 DOWN, 那么包含該 OSD 的 PG 副本都會有問題, 當(dāng) OSD 恢復(fù), OSD 對應(yīng)的 PG 將會更新
并反映出當(dāng)前狀態(tài), 在一段時間周期后, OSD 將會恢復(fù) recoverying 狀態(tài)

recovery 并非永遠(yuǎn)都有效, 因為硬件故障可能會導(dǎo)致多個 OSD 故障, 例如, 網(wǎng)絡(luò)交換機(jī)故障, 可以導(dǎo)致集群中的多個主機(jī)及主機(jī)包含的 OSD 故障
當(dāng)網(wǎng)絡(luò)恢復(fù)之后, 每個 OSD 都必須執(zhí)行恢復(fù)

CEPH 提供一定數(shù)量的設(shè)定在新服務(wù)請求與恢復(fù) PG 中數(shù)據(jù)對象時的資源平衡,
osd recovery delay start 設(shè)定允許 osd 重啟, re-peer 并在啟動 恢復(fù)之前處理一些回應(yīng)請求,
osd recovery threads 設(shè)定了恢復(fù)過程中線程限制 (默認(rèn) 1 )
osd recovery thread timeout 設(shè)定線程超時, 因為可能出現(xiàn)多個 osd 故障, 重啟后在 re-peer 過程中可能出現(xiàn)污染
osd recovery max active 設(shè)定限制對一個 osd 從故障后, 恢復(fù)請求并發(fā)數(shù)量
osd recovery max chunk 限制恢復(fù)時的數(shù)據(jù) chunk 大小, 預(yù)防網(wǎng)絡(luò)堵塞

PG 正在遷移或者同步對象及其副本, 一個 OSD 停止服務(wù)(DOWN), 其內(nèi)容將會落后與 PG 內(nèi)的其他副本, 這時 PG 將會進(jìn)入 recoverying 狀態(tài), 該 OSD 上的對象將從其他副本同步過來

BACK FILLING (回填)

當(dāng)新 OSD 加入集群, CRUSH 將會為集群新添加的 OSD 重新分配 PG, 強制新的 OSD 接受重新分配的 PG 并把一定數(shù)量的負(fù)載轉(zhuǎn)移到新 OSD 中
back filling OSD 會在后臺處理, 當(dāng) backfilling 完成, 新的 OSD 完成后, 將開始對請求進(jìn)行服務(wù)

在 backfill 操作期間, 你可以看到多種狀態(tài),
backfill_wait 表示 backfill 操作掛起, 但 backfill 操作還沒有開始 ( PG 正在等待開始回填操作 )
backfill 表示 backfill 操作正在執(zhí)行
backfill_too_full 表示在請求 backfill 操作, 由于存儲能力問題, 但不可以完成,

ceph 提供設(shè)定管理裝載重新分配 PG 關(guān)聯(lián)到新的 OSD
osd_max_backfills 設(shè)定最大數(shù)量并發(fā) backfills 到一個 OSD, 默認(rèn) 10
osd backfill full ratio 當(dāng) osd 達(dá)到負(fù)載, 允許 OSD 拒絕 backfill 請求, 默認(rèn) 85%,
假如 OSD 拒絕 backfill 請求, osd backfill retry interval 將會生效, 默認(rèn) 10 秒后重試
osd backfill scan min , osd backfill scan max 管理檢測時間間隔

一個新 OSD 加入集群后, CRUSH 會把集群先有的一部分 PG 分配給他, 該過程稱為回填, 回填進(jìn)程完成后, 新 OSD 準(zhǔn)備好了就可以對外提供服務(wù)

REMAPPED (重映射)

當(dāng) pg 改變, 數(shù)據(jù)從舊的 osd 遷移到新的 osd, 新的主 osd 應(yīng)該請求將會花費一段時間, 在這段時間內(nèi), 將會繼續(xù)向舊主 osd 請求服務(wù), 直到
PG 遷移完成, 當(dāng)數(shù)據(jù)遷移完成, mapping 將會使用新的 OSD 響應(yīng)主 OSD 服務(wù)

當(dāng) PG 的 action set 變化后, 數(shù)據(jù)將會從舊 acting set 遷移到新 action set, 新主 OSD 需要過一段時間后才能提供服務(wù), 因此它會讓老的主 OSD 繼續(xù)提供服務(wù), 知道 PG 遷移完成, 數(shù)據(jù)遷移完成后, PG map 將會使用新 acting set 中的主 OSD

參考例子

[root@hh-yun-ceph-cinder015-128055 ~]# ceph osd map volumes rbd_id.volume-1421625f-a9a2-41d0-8023-4cec54b33a57
osdmap e5276 pool 'volumes' (1) object 'rbd_id.volume-1421625f-a9a2-41d0-8023-4cec54b33a57' -> pg 1.2cdd8028 (1.28) -> up ([32,26,41], p32) acting ([32,26,41], p32)

STALE (舊)

當(dāng) ceph 使用 heartbeat 確認(rèn)主機(jī)與進(jìn)程是否運行, ceph osd daemon 可能由于網(wǎng)絡(luò)臨時故障, 獲得一個卡住狀態(tài) (stuck state) 沒有得到心跳回應(yīng)
默認(rèn), osd daemon 會每 0.5 秒報告 PG, up 狀態(tài), 啟動與故障分析,
假如 PG 中主 OSD 因為故障沒有回應(yīng) monitor 或者其他 OSD 報告 主 osd down, 那么 monitor 將會標(biāo)記 PG stale,
當(dāng)你重啟集群, 通常會看到 stale 狀態(tài), 直到 peering 處理完成,
在集群運行一段時候, 看到 stale 狀態(tài), 表示主 osd PG DOWN 或者沒有主 osd 沒有報告 PG 信息到 monitor 中

PG 處于未知狀態(tài), monitors 在 PG map 改變后還沒有收到過 PG 的更新, 啟用一個集群后, 常常會看到主 peering 過程結(jié)束前 PG 處于該狀態(tài)

Scrubbing (清理中)

PG 在做不一至性校驗

有問題的 PG

inactive

PG 很長時間沒有顯示為 acitve 狀態(tài), (不可執(zhí)行讀寫請求), PG 不可以執(zhí)行讀寫, 因為等待 OSD 更新數(shù)據(jù)到最新的備份狀態(tài)

unclean

PG 很長時間都不是 clean 狀態(tài) (不可以完成之前恢復(fù)的操作), PG 包含對象沒有完成相應(yīng)的復(fù)制副本數(shù)量, 通常都要執(zhí)行恢復(fù)操作

stale

PG 狀態(tài)很長時間沒有被 ceph-osd 更新過, 標(biāo)識存儲在該 GP 中的節(jié)點顯示為 DOWN, PG 處于 unknown 狀態(tài), 因為 OSD 沒有報告 monitor 由 mon osd report timeout 定義超時時間

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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