背景:
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可正常使用
原文地址:https://www.cnblogs.com/System-hjf/p/10261461.html
时间: 2024-11-12 05:49:40