Ceph剔除主机,Crushmap遗留脏数据

Posted system-hjf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ceph剔除主机,Crushmap遗留脏数据相关的知识,希望对你有一定的参考价值。

背景:

  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可正常使用

 

以上是关于Ceph剔除主机,Crushmap遗留脏数据的主要内容,如果未能解决你的问题,请参考以下文章

015 Ceph管理和自定义CRUSHMAP

ceph crushmap

ceph rack故障域调整

Ceph实验室:第八课:查看Ceph_CRUSH_map

ceph存储扩容(新盘新建存储池)

ceph学习笔记之七 数据平衡