背景:
1. 一個集群總共有5台主機(Host11,Host12,Host13,Host14,Host16),由於資源過剩,需要剔除兩台主機用於其他用途,host11-13都是monitor+node,Pool的副本數目是2。所以優先考慮剔除主機14和16
操作步驟:
1. Monitor操作,將OSD的狀態設置Out
2. 登錄對應OSD節點 ,停止OSD守護進程
3. Crushmap中刪除OSD
4. 刪除OSD的認證信息
5. 登錄對應OSD節點 ,取消掛載文件系統
注意事項:
1. 由於副本數目是2,同一時間不能有兩個OSD或者以上不工作。
2. 停止OSD和刪除Crushmao的信息,都將導致PG的重新收斂,所以最好每一個步驟都確保當前ceph狀態是OK才進行下一步。
######參考腳本
#!/bin/sh ####judge state of ceph judge() { while true do sleep 5 ceph -s |grep HEALTH_OK if [[ $? -eq 0 ]] then break else sleep 60 fi done } ####rdel osd from host14 while true do for host in `seq 31 39` do echo "now.... ,del osd.$host from host14" >>stat.txt ceph osd out $host judge ssh 192.168.220.14 "/etc/init.d/ceph stop osd.$host" judge ceph osd crush remove osd.$host judge ceph auth del osd.$host judge ceph osd rm osd.$host judge ssh 192.168.220.14 "umount /var/lib/ceph/osd/ceph-$host" judge echo "del osd.$host from host14 suceess!!!!" >>stat.txt done break done ######del osd from host16 while true do for host in `seq 40 45` do echo "now.... ,del osd.$host from host16" >>stat.txt ceph osd out $host judge ssh 192.168.220.16 "/etc/init.d/ceph stop osd.$host" judge ceph osd crush remove osd.$host judge ceph auth del osd.$host judge ceph osd rm osd.$host judge ssh 192.168.220.16 "umount /var/lib/ceph/osd/ceph-$host" judge echo "del osd.$host from host16 suceess!!!!" >>stat.txt done break done
故障現象以及解決方案:
1. 剔除完OSD之后,使用ceph -s狀態正常,但是使用ceph osd tree查看列表的時候,依舊發現了host14和host16的存在。此時兩台主機都沒有任何OSD,列表中有他們倆算是無用的臟數據
2. crushmap的一些架構圖,是不會動態修改的,所以需要手工的修改crushmap,修改進行如下的操作
ceph osd getcrushmap -o old.map //導出crushmap crushtool -d old.map -o old.txt //將crushmap轉成文本文件,方便vim修改 cp old.txt new.txt //做好備份工作 vim new.txt host node14 { xxxxx xxxxx } host node16 { xxxxx xxxxx } root default { item node14 weight 0.098 item node16 weight 0.098 } ###把以上的內容都刪除掉,然后重新編譯為二進制文件,最后將二進制map應用到當前map中 curshtool -c new.txt -o new.map ceph osd setcrushmap -i new.map ###此時ceph會重新收斂,等待收斂完畢后,ceph可正常使用