天天看點

ceph叢集報錯:HEALTH_ERR 1 pgs inconsistent; 1 scrub errors

報錯資訊如下:

[root@ceph-6-11 ~]# ceph health detail

HEALTH_ERR 1 pgs inconsistent; 1 scrub errors; 

pg 2.37c is active+clean+inconsistent, acting [75,6,35]

1 scrub errors

報錯資訊總結:

問題PG:2.37c

OSD編号:75,6,35

執行正常修複:

ceph pg repair 2.37c

檢視修複結果:

HEALTH_ERR 1 pgs inconsistent; 1 scrub errors

問題依然存在,異常pg沒有修複;

然後執行:

要洗刷一個pg組,執行指令:

ceph pg scrub 2.37c   

ceph pg deep-scrub  2.37c

以上指令執行後均未修複,依然報上面的錯誤,檢視相關osd 日志報錯如下:

2017-07-24 17:31:10.585305 7f72893c4700  0 log_channel(cluster) log [INF] : 2.37c repair starts

2017-07-24 17:31:10.710517 7f72893c4700 -1 log_channel(cluster) log [ERR] : 2.37c repair 1 errors, 0 fixed

此時已經被坑了好久了,決定修複pg 設定的三塊osd ,執行指令如下:

ceph osd repair 75

ceph osd repair 6

ceph osd repair 35

修複指令執行後等待一段時間,osd 修複完成,發現錯誤依然存在!!!!!!!!!此時想做下面兩個操作,

1:找到pg object資訊,把主osd 上面的資料删掉,讓後讓叢集修複;

2:修改pg現在使用的主osd資訊,現在是osd 75 ,改成别的磁盤(沒找到方法修改);

此時看到ceph社群的一個bug 資訊:

http://tracker.ceph.com/issues/12577

發現有些嘗試有人已經做過了,而且又是一個bug!!!!!!!!!!

最後決定用一個最粗暴的方法解決,關閉有問題pg 所使用的主osd 75

查詢pg 使用主osd資訊

ceph pg  2.37c query |grep primary 

                "blocked_by": [],

                "up_primary": 75,

                "acting_primary": 75

執行操作如下:

systemctl stop ceph-osd@75

此時ceph開始資料恢複,将osd75 上面的資料在其它節點恢複,等待一段時間,發現資料滾動完成,執行指令檢視叢集狀态。

[root@ceph-6-11 ~]# ceph health detail  

pg 2.37c is active+clean+inconsistent, acting [8,38,17]

看到上面的資訊,心都要碎了!為啥還是這樣?不報希望的執行以下正常修複!

[root@ceph-6-11 ~]# ceph pg repair 2.37c

'instructing pg 2.37c on osd.8 to repair

然後檢視叢集狀态:

HEALTH_OK

上一篇: MDS INET 300
下一篇: MDS EL7052

繼續閱讀