从Ceph集群中删除OSD节点

从集群中删除OSD节点

使用cephadm部署的Ceph集群,再尝试从集群中删除OSD节点的时候遇到了各种问题……

既然自动化工具目前不太完善(或者说在文档里目前还没看到使用cephadm删除OSD节点的方法),那么就手动删除吧!记录一次使用cephadm搭建的集群如何删除OSD节点。当然使用其他方式部署的OSD要删除的话也是大同小异的。

ceph版本:ceph version 15.2.4 (7447c15c6ff58d7fce91843b705a268a1917325c) octopus (stable)

查看集群OSD状态

先查看集群内OSD的状态,并找到要删除的OSD节点。现在准备删除osd.4osd.5这两个节点,他们都在vm2这台主机上。

ceph osd tree

ceph-rm-osd-tree-2020-07-31

ceph osd dump

ceph-rm-osd-dump-2020-07-31

可以留意一下ID,之后便于确认ID所对应的块设备名(如:/dev/sdx或/dev/nvmex)

删除OSD节点节点

使用cephadm删除OSD节点

目前使用cephadm删除OSD节点后也需要手动的释放磁盘占用

ceph orch osd rm <svc_id>... [--replace] [--force]

要删除osd.4osd.5节点则执行:ceph orch osd rm 4 5

删除的过程需要一段时间,会重新分配集群内的PG,删除CRUSH图节点信息,删除这两个OSD所对应的用户和密钥环。

查看自动删除状态进度ceph orch osd rm status,如果长时间无响应或者依旧没有删除,可以开始尝试手动删除OSD节点

手动删除OSD节点

移除daemon守护进程

接下来的操作请确保你对整个集群拥有admin权限并且对要删除OSD节点的主机有root权限。

登录到拥有Ceph集群admin权限的主机,执行如下命令:

ceph orch daemon rm osd.4 osd.5 --force

返回结果如下,已经移除他们容器的守护进程:

1
2
Removed osd.4 from host 'vm2'
Removed osd.5 from host 'vm2'

此时查看集群中这两个OSD的状态:

要删除osd.4osd.5这两个节点的状态变成了DOWN。接下来就可以从crush表中将他们移除。

ceph-rm-osd-tree-2-2020-07-31

如果还没有使用cephadm管理集群,此处你可以登录到vm2这台主机中手动的将他们的systemd守护进程disable

1
2
systemctl disable --now  ceph-osd@4
systemctl disable --now ceph-osd@5

删除CRUSH图中所对应的OSD节点

删除CRUSH图中的OSD节点信息

ceph osd crush remove osd.4

ceph osd crush remove osd.5

执行成功返回结果:

1
2
removed item id 4 name 'osd.4' from crush map
removed item id 5 name 'osd.5' from crush map

此时再次手动检查集群内的OSD节点中是否还包含osd.4osd.5

已经从CRUSH图标中删除,此处已经看不到这两个OSD节点。

ceph-rm-osd-tree-3-2020-07-31

删除osd节点

ceph osd rm osd.4 osd.5

返回执行成功结果:removed osd.4, osd.5

ceph-osd-rm-2020-07-31

删除osd用户

ceph auth ls | grep ^osd -A4

ceph-auth-ls-2020-07-31

发现Ceph的OSD用户未被删除,残留在此处(会影响下一次添加OSD时,导致密钥环不匹配的错误)。执行如下命令删除:

ceph auth rm osd.4

ceph auth rm osd.5

删除OSD配置(如果有的话)

如果额外对OSD进行了额外配置的话需要手动删除当时的配置信息。登录到这台被删除OSD节点的主机上,修改配置文件:vim /etc/ceph/ceph.conf,将对该OSD节点额外配置的信息删除。

之后把更新过的ceph.conf文件要拷贝到其他集群主机的/etc/ceph/目录下。

解除Ceph对磁盘的占用

之后的操作都需要在移除OSD节点的主机(vm2)上通过root用户特权执行操作。

当删除了OSD之后,由于先前的配置,Ceph仍然对磁盘进行占用。需要移除这块OSD磁盘的DM状态,并之后对其格式化,这样才完整的手动移除一个OSD节点(磁盘)。

查询磁盘DM状态并移除编码

dmsetup status

dmset-status-2020-07-31

注意在一开始要留意的哪个ID,在这里用来识别要删除哪个磁盘的DM标记。

dmsetup remove ceph--14c75e65--a33e--459a--8bc7--c95add15d8a3-osd--block--d2af5a38--54b9--4112--9bbf--8ea313c673f1

dmsetup remove ceph--6ceb7c60--8b90--44fc--b159--34bd3d8c8e0f-osd--block--5f1d52fa--e50c--4915--b059--f672684ce571

执行完上面的命令后,再检查一下DM状态,发现已经成功被删除DM标记:

dmset-status-2-2020-07-31

wipefs格式化文件系统

在使用wipefs工具清除文件系统前,要找到所对应的块设备名称。

执行lsblk -f命令:

下面的图片中可以看到,nvme0n2nvme0n3这两个块设备已经没有了像nvme0n4下方的ID标记,所以可以判定nvme0n2nvme0n3和两块磁盘是我们移除的OSD节点所使用的磁盘。

fdisk-f-2020-07-31

接下来对nvme0n2nvme0n3两个块设备格式他们的文件系统,执行命令:

wipefs -a /dev/nvme0n2 /dev/nvme0n3

wipefs-2020-07-31

到此,完成的将OSD节点从集群中移除。你可以使用lsblk工具或稍后一段时间后在拥有集群admin权限的主机上执行ceph orch device ls命令查看这两个OSD节点所使用的磁盘是否是可以用的状态了。现在你可以将这两个磁盘取出或者在这两块磁盘上重新部署OSD节点…

fdisk-f-clean-2020-07-31

ceph-orch-device-ls-2020-07-31