11.4. 从 Ceph Storage 节点移除 OSD
此流程演示了如何从节点中删除 OSD。它假定以下与环境有关:
-
服务器(
ceph-storage0
)有一个在/dev/sde
上运行的 OSD (ceph-osd@4
)。 -
Ceph 监控服务(
ceph-mon
)在controller0
上运行。 - 有足够的 OSD 来确保存储集群不达到其 near-full 比率。
有关 Ceph OSD 的更多信息,请参阅 Red Hat Ceph Storage Operations 指南中的 Ceph OSD。
流程
-
SSH 连接到
ceph-storage0
,并以root
身份登录。 禁用和停止 OSD 服务:
[root@ceph-storage0 ~]# systemctl disable ceph-osd@4 [root@ceph-stoarge0 ~]# systemctl stop ceph-osd@4
-
从
ceph-storage0
断开连接。 -
SSH 连接到
controller0
,然后以root
身份登录。 识别 Ceph 监控容器的名称:
[root@controller0 ~]# podman ps | grep ceph-mon ceph-mon-controller0 [root@controller0 ~]#
启用 Ceph 监控容器,将不需要的 OSD 标记为
out
:[root@controller0 ~]# podman exec ceph-mon-controller0 ceph osd out 4
注意此命令会导致 Ceph 重新平衡存储集群,并将数据复制到集群中的其他 OSD。在重新平衡完成前,集群会临时保留
active+clean
状态。运行以下命令并等待存储集群状态变为
active+clean
:[root@controller0 ~]# podman exec ceph-mon-controller0 ceph -w
从 CRUSH map 中删除 OSD,使其不再接收数据:
[root@controller0 ~]# podman exec ceph-mon-controller0 ceph osd crush remove osd.4
删除 OSD 身份验证密钥:
[root@controller0 ~]# podman exec ceph-mon-controller0 ceph auth del osd.4
删除 OSD:
[root@controller0 ~]# podman exec ceph-mon-controller0 ceph osd rm 4
-
从
controller0
断开连接。 -
以
stack
用户身份通过 SSH 连接到 undercloud,再找到您定义CephAnsibleDisksConfig
参数的 heat 环境文件。 注意 heat 模板包含四个 OSD:
parameter_defaults: CephAnsibleDisksConfig: devices: - /dev/sdb - /dev/sdc - /dev/sdd - /dev/sde osd_scenario: lvm osd_objectstore: bluestore
修改模板以删除
/dev/sde
。parameter_defaults: CephAnsibleDisksConfig: devices: - /dev/sdb - /dev/sdc - /dev/sdd osd_scenario: lvm osd_objectstore: bluestore
运行
openstack overcloud deploy
以更新 overcloud。注意在本例中,您将从具有 OSD 的所有主机中删除
/dev/sde
设备。如果您没有从所有节点中删除同一设备,请更新 heat 模板。有关如何使用不同devices
列表定义主机的详情,请参考 第 5.5 节 “覆盖用于忽略 Ceph Storage 节点的参数”。