因爲目前機器比較緊張,須要將我集羣中的一批機器提供給其餘業務使用,這時問題來了,集羣機器的退出意味着數據要從新分佈,數據遷移的過程當中比較容易出故障。node
集羣中有不少POOL, 有些POOL是客戶數據,這很是重要;有些POOL是我測試用,這些POOL對應的OSD能夠直接刪除,即時集羣報pg異常,也無需關心,在刪除對應OSD後將對應POOL刪除便可,相應的pg異常也消失。app
注:爲了不關閉OSD的過程當中發生數據遷移,請設置norecover標記。測試
ceph osd set norecover
刪除對應主機上的全部OSD信息的命令以下:線程
killall -9 ceph-osd for i in {108..119} do ceph osd out osd.$i; ceph osd crush remove osd.$i; ceph auth del osd.$i; ceph osd rm $i; ceph auth del osd.$i; done ceph osd crush remove hostname removed item id -10 name 'hostname' from crush map
對於業務用到的POOL分佈在了10臺機器上,如今要從這10臺機器中釋放出五臺,這須要涉及到數據遷移了。有三種辦法進行處理。code
將要退出的機器依次設置爲out狀態。一臺機器作完後作另一臺,由系統負責將數據遷走;進程
將要推出的機器權重調整爲0,由系統負責將數據遷走;v8
這是最快的辦法,只涉及到一次遷移,等待數據遷移完畢後,就能夠將不須要的OSD關閉並移除了。rem
症狀表現,在集羣狀態中顯示少許PG狀態異常。 active + remapped + backfilling active + remappedit
[root@gnop029-ct-zhejiang_wenzhou-16-11 ~]# ceph -s cluster c6e7e7d9-2b91-4550-80b0-6fa46d0644f6 health HEALTH_WARN 2 pgs backfilling 3 pgs stuck unclean recovery 24/2148593 objects misplaced (0.001%) norecover,noscrub,nodeep-scrub flag(s) set monmap e3: 3 mons at {a=101.71.4.11:6789/0,b=101.71.4.12:6789/0,c=101.71.4.13:6789/0} election epoch 446, quorum 0,1,2 a,b,c osdmap e69909: 120 osds: 120 up, 120 in; 3 remapped pgs flags norecover,noscrub,nodeep-scrub pgmap v8678900: 10256 pgs, 16 pools, 2763 GB data, 1047 kobjects 7029 GB used, 197 TB / 214 TB avail 24/2148593 objects misplaced (0.001%) 10253 active+clean 2 active+remapped+backfilling 1 active+remapped
[root@ceph]# ceph pg dump_stuck unclean ok pg_stat state up up_primary acting acting_primary 23.1c1 active+remapped+backfilling [59,37] 59 [76,84] 76 23.23b active+remapped [35,7] 35 [82,119] 82 23.221 active+remapped+backfilling [15,18] 15 [70,82] 70
後來我開啓了scrub和deepscrub, 將全部pg掃描後就恢復爲active + clean。io
在發生數據遷移時,有時候某些osd會由於負載太高,致使osd進程退出,這是須要作兩方面工做: