Ceph集羣縮容及相關故障處理

引言

因爲目前機器比較緊張,須要將我集羣中的一批機器提供給其餘業務使用,這時問題來了,集羣機器的退出意味着數據要從新分佈,數據遷移的過程當中比較容易出故障。node

處理過程

處理測試POOL對應的機器

集羣中有不少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對應的機器

對於業務用到的POOL分佈在了10臺機器上,如今要從這10臺機器中釋放出五臺,這須要涉及到數據遷移了。有三種辦法進行處理。code

方法一之設置out

將要退出的機器依次設置爲out狀態。一臺機器作完後作另一臺,由系統負責將數據遷走;進程

方法二之設置權重

將要推出的機器權重調整爲0,由系統負責將數據遷走;v8

方法三 構建新規則

  1. 構建新group,將要保留的機器放到新group下;
  2. 構建新crushrule, take from newgroup;
  3. 將業務pool的規則設置爲new crush rule下;

這是最快的辦法,只涉及到一次遷移,等待數據遷移完畢後,就能夠將不須要的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進程退出,這是須要作兩方面工做:

  1. 調低osd backfill的線程數量,下降osd工做負載;
  2. down掉的osd即時恢復,要不會有不少Pg狀態異常,osd回覆後這些異常的pg也會很快恢復正常;
相關文章
相關標籤/搜索