当磁盘损坏或者集群需要进行缩容时,需要对磁盘进行删除。在Ceph中,一个OSD通常是一台主机上的一个ceph-osd守护进程,它运行在一个磁盘之上。如果集群有多个磁盘损坏,删除这些磁盘需要依次对这些磁盘所对应的OSD进行移除。

一、删除OSD前先确定一下当前集群的容量状况,确保删除OSD后不会使集群达到near full比率,可以通过以下命令进行查看:
  1. ceph osd df tree
二、设置noout、norebalance,防止数据发生恢复迁移等操作。切记操作完成后要取消此项设置。
  1. ceph osd set noout
  2. ceph osd set norebalance
三、删除OSD前,需要先把OSD踢出集群,命令格式如下:
  1. ceph osd out {osd-num}

假设现在需要删除的OSD的num为0,以下是一个可供参考的示例:

  1. ceph osd out 0
四、做完上面的操作,此时OSD的状态是up且out,删除前还需要先停止OSD进程,命令格式如下:
  1. systemctl stop ceph-osd@{osd-num}

以下是一个可供参考的示例:

  1. systemctl stop ceph-osd@0
五、此时OSD的状态为down,在Luminous版中,可以直接使用purge对osd进行清除,命令格式如下:
  1. ceph osd purge {osd-num} --yes-i-really-mean-it

以下是一个可供参考的示例:

  1. ceph osd purge 0 --yes-i-really-mean-it
六、删除ceph.conf中对应OSD的条目,并把修改好的配置文件拷贝到其他主机。内容示例如下:
  1. [osd.0]
  2. osd_data = /var/lib/ceph/osd/ceph-0
  3. host = node1

注:L版的配置文件中已经没有这个内容了

七、卸载磁盘分区,并清除数据目录,命令格式如下:
  1. umount /var/lib/ceph/osd/ceph-{osd-num}
  2. rm -rf /var/lib/ceph/osd/ceph-{osd-num}

以下是一个可供参考的示例:

  1. umount /var/lib/ceph/osd/ceph-0
  2. rm -rf /var/lib/ceph/osd/ceph-0
八、取消noout、norebalance,命令如下:
  1. ceph osd unset noout
  2. ceph osd unset norebalance