ceph pg+down+peering 故障排查與osd誤刪恢復

PG又稱放置組,是ceph中存放文件object的單位,相當於管理文件的分組。
down+peering
參考ceph pg狀態表:
Creating
Ceph 仍在創建歸置組。
Active
Ceph 可處理到歸置組的請求。
Clean
Ceph 把歸置組內的對象複製了規定次數。
Down
包含必備數據的副本掛了,所以歸置組離線。
Replay
某 OSD 崩潰後,歸置組在等待客戶端重放操作。
Splitting
Ceph 正在把一歸置組分割爲多個。(實現了?)
Scrubbing
Ceph 正在檢查歸置組的一致性。
Degraded
歸置組內的對象還沒複製到規定次數。
Inconsistent
Ceph 檢測到了歸置組內一或多個副本間不一致(如各對象大小不一、恢復後對象還沒複製到副本那裏、等等)。
Peering
歸置組正在互聯。
Repair
Ceph 正在檢查歸置組、並試圖修復發現的不一致(如果可能的話)。
Recovering
Ceph 正在遷移/同步對象及其副本。
Backfill
Ceph 正在掃描並同步整個歸置組的內容,而不是根據日誌推算哪些最新操作需要同步。 Backfill 是恢復的一種特殊情況。
Wait-backfill
歸置組正在排隊,等候回填。
Backfill-toofull
一回填操作在等待,因爲目標 OSD 使用率超過了佔滿率。
Incomplete
Ceph 探測到某一歸置組可能丟失了寫入信息,或者沒有健康的副本。如果你看到了這個狀態,試着啓動一下有可能包含所需信息的失敗 OSD 、或者臨時調整一下 min_size 以完成恢復。
Stale
歸置組處於一種未知狀態——從歸置組運行圖變更起就沒再收到它的更新。
Remapped
歸置組被臨時映射到了另外一組 OSD ,它們不是 CRUSH 算法指定的。
Undersized
此歸置組的副本數小於配置的存儲池副本水平。
Peered
此歸置組已互聯,但是不能向客戶端提供服務,因爲其副本數沒達到本存儲池的配置值( min_size 參數)。在此狀態下可以進行恢復,所以此歸置組最終能達到 min_size 。


down+peering表示ceph中的pgs處於互聯狀態但是發現對方卻不在線了,這種情況原因一般爲peering對象pg所在osd down或者損壞了。
在一次故障排查中,起因爲ceph中一塊硬盤損壞了,後來由於誤刪了一個osd(當時是由於該osd處於down狀態,所以將其remove),竟然造成集羣中pg中文件unfound!,pg的恢復也一直stuck,
後來試了很多辦法都沒有解決。
直到後來我仔細查看了該pg的query

ceph pg x.xx qyery

1、創建osd

ceph osd create

該命令會自動創建一個osd,返回osd號,但是需要的osd號必須跟誤刪的osd號相同,所以可以多次執行該命令創建osd,直到返回的osd號與誤刪的osd相同爲止,此時ceph osd tree中已經創建了很多osd,在此只需要
保留我們所需的osd,將其他的空osd刪除。

2、掛載osd

df -h
/dev/mapper/logs-log             40G  7.1G   31G  19% /var/log
/dev/mapper/mysql-root           40G  3.3G   35G   9% /var/lib/mysql
/dev/mapper/horizon-horizontmp   20G   33M   20G   1% /var/lib/horizon
/dev/sdb3                       279G  167G  112G  61% /var/lib/ceph/osd/ceph-0
//顯示該osd掛載的目錄

將osd與該目錄關聯

ceph auth add osd.0 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-0/keyring

注意:在此過程中可能會出現keyring not match錯誤,可執行如下命令

ceph auth del osd.{num}

然後再進行掛載。

3、添加root node

ceph osd crush add [osdnum] [weight] host=controller-01

“ceph osd crush add 0 1.0 host=controller-01”表示在controller-01上添加osd.0 weight設置爲1.0

4、啓動osd

sudo start ceph-osd id={num}

5、 添加ceph node到default root

ceph osd crush move osd1 root=default

然後等待恢復就可以了。
對於unfound 的PG ,可以選擇delete或者revert

ceph pg {pg-id} mark_unfound_lost revert|delete

參考:
歸置組:http://docs.ceph.org.cn/rados/operations/placement-groups/
https://yq.aliyun.com/articles/17193
http://www.cnblogs.com/zhangzhengyan/p/6407403.html
http://docs.ceph.org.cn/rados/troubleshooting/troubleshooting-osd/#id8

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章