1. 程式人生 > >Ceph常見的幾種異常狀態——運維

Ceph常見的幾種異常狀態——運維

【報錯1】:HEALTH_WARN mds cluster is degraded!!!

解決辦法有2步,第一步啟動所有節點:

service ceph -a start

如果重啟後狀態未ok,那麼可以將ceph服務stop後再進行重啟

 

第二步,啟用osd節點(我這裡有2個osd節點HA-163和mysql-164,請根據自己osd節點的情況修改下面的語句):

ceph-deploy osd activate HA-163:/var/local/osd0 mysql-164:/var/local/osd1

 

【報錯2】:1 requests are blocked > 32 sec

原因:

有可能是在資料遷移過程中, 使用者正在對該資料塊進行訪問, 但訪問還沒有完成, 資料就遷移到別的 OSD 中, 那麼就會導致有請求被 block, 對使用者也是有影響的

解決方法

尋找 block 的請求

# ceph health detail HEALTH_WARN 1 requests are blocked > 32 sec; 1 osds have slow requests 1 ops are blocked > 33554.4 sec 1 ops are blocked > 33554.4 sec on osd.16 1 osds have slow requests

可以看到 osd.16 具有一個操作 block

查詢 osd 對應主機

# ceph osd tree

重啟 osd

# /etc/init.d/ceph stop osd.16 # /etc/init.d/ceph start osd.16

系統會對該 osd 執行 recovery 操作, recovery 過程中, 會斷開 block request, 那麼這個 request 將會重新請求 mon 節點, 並重新獲得新的 pg map, 得到最新的資料訪問位置, 從而解決上述問題

參考恢復後的狀態

[[email protected] ~]# ceph -s cluster dc4f91c1-8792-4948-b68f-2fcea75f53b9 health HEALTH_OK

 

【報錯3】:too few PGs per OSD (16 < min 30)

$ sudo ceph osd lspools

0 rbd,

檢視rbd pool的PGS

$ sudo ceph osd pool get rbd pg_num

pg_num: 64

pgs為64,因為是2副本的配置,所以當有8個osd的時候,每個osd上均分了64/8 *2=16個pgs,也就是出現瞭如上的錯誤小於最小配置30個

64/5*1=13《 30

解決辦法:

修改預設pool rbd的pgs

$ sudo ceph osd pool set rbd pg_num 128

set pool 0 pg_num to 128

$ sudo ceph -s

cluster 257faba1-f259-4164-a0f9-1726bd70b05a

health HEALTH_WARN

64 pgs stuck inactive

64 pgs stuck unclean

pool rbd pg_num 128 > pgp_num 64

monmap e1: 1 mons at {bdc217=192.168.13.217:6789/0}

election epoch 2, quorum 0 bdc217

osdmap e52: 8 osds: 8 up, 8 in

flags sortbitwise

pgmap v121: 128 pgs, 1 pools, 0 bytes data, 0 objects

715 MB used, 27550 GB / 29025 GB avail

64 active+clean

64 creating

發現需要把pgp_num也一併修改,預設兩個pg_num和pgp_num一樣大小均為64,此處也將兩個的值都設為128

$ sudo ceph osd pool set rbd pgp_num 128

set pool 0 pgp_num to 128

最後檢視叢集狀態,顯示為OK。

 

【報錯】: too many PGs per OSD (704 > max 300)

問題原因為叢集osd 數量較少,測試過程中建立了大量的pool,每個pool要咋用一些pg_num 和pgs ,ceph叢集預設每塊磁碟都有預設值,好像每個osd 為128個pgs,預設值可以調整,調整過大或者過小都會對叢集效能優影響,此為測試環境以快速解決問題為目的,解決此報錯的方法就是,調大叢集的此選項的告警閥值;方法如下,在mon節點的ceph.conf 配置檔案中新增:

[global]

.......

mon_pg_warn_max_per_osd = 1000

然後重啟服務:

/etc/init.d/ceph restart mon

 

臨時生效:

# ceph tell 'mon.*' injectargs "--mon_pg_warn_max_per_osd 0"

使用tell命令修改的配置只是臨時的,只要服務一重啟,配置就會回到解放前,從ceph.conf 中讀取配置。所以長久之計是把這個配置加到Ceph Mon節點的配置檔案裡,然後重啟Mon服務。

 

 

【報錯3】:若安裝部署osd失敗,怎麼處理?

# ceph-deploy disk zap compute1s:sdb

# ceph-deploy --overwrite-conf osd create compute1s:sdb

 

 

【報錯4】:狀態是HEALTH_WARN,Monitor clock skew detected

ceph叢集監控狀態是HEALTH_WARN, clock skew detected on mon.cephmon154, Monitor clock skew detected

說明2個mon之間的時間相差超過允許值了,需要做同步。

Log報錯資訊:[WRN] mon.1 10.2.180.183:6789/0 clock skew 0.207341s > max 0.05s

【解決方法】在ceph上面/etc/ceph/ceph.conf中設定monitor間的允許時鐘偏移最大值

[mon]

mon clock drift allowed = 2 #允許在mon之間差多少時間,預設為0.050秒

重啟ceph

#service ceph restart

 

【報錯】:root空間爆滿,導致mon節點被自動踢出叢集

# service ceph restart