欢迎来到Rice博客...
Rice

OpenStack + Ceph 融合架构计算节点安全下线操作指南

OpenStack + Ceph 融合架构计算节点安全下线操作指南

1. 适用场景与核心原则

  • 适用场景:Kolla-Ansible 容器化部署的 OpenStack 融合架构,需要永久下线一台兼具 Compute (计算)、Network (网络代理) 与 Ceph OSD (存储) 角色的服务器。

  • 核心原则:先让 Ceph 数据安全搬迁,同时在控制面隔离该节点,最后再物理关停并清理数据。

  • 危险警告:永久剔除节点时,严禁执行 ceph osd set norecover / nobackfill / norebalance。必须保证集群具备数据自愈能力。

2. 操作前置检查

  • 确认虚拟机已清空:目标节点 ty1-z1-2cpu-computer110 上没有任何运行中的业务虚拟机。

  • 确认 Ceph 剩余容量:执行 docker exec ceph_mon ceph df,确认集群剩余空间足够接纳该节点释放的数据。

3. 完整操作步骤

阶段一:触发 Ceph 数据重平衡 (数据搬迁)

执行位置:Ceph Mon 节点或 OpenStack 控制节点

docker exec ceph_mon ceph osd out 53
docker exec ceph_mon ceph osd out 56
docker exec ceph_mon ceph osd out 82
docker exec ceph_mon ceph osd out 96

# 观察集群状态
docker exec ceph_mon ceph -w

阶段二:OpenStack 控制面服务剥离

执行位置:OpenStack 控制节点 (需加载 admin-openrc.sh 环境变量)

1. 剥离 Nova 计算服务

openstack compute service list --host ty1-z1-2cpu-computer110
openstack compute service set --disable ty1-z1-2cpu-computer110 nova-compute
openstack compute service delete <ID>

2. 剥离 Cinder 块存储服务

openstack volume service set --disable ty1-z1-2cpu-computer110@rbd-1 cinder-volume
openstack volume service set --disable ty1-z1-2cpu-computer110 cinder-backup

# 彻底清理 cinder-volume 记录

docker exec -it cinder_api cinder-manage service remove cinder-volume ty1-z1-2cpu-computer110@rbd-1

# 彻底清理 cinder-backup 记录

docker exec -it cinder_api cinder-manage service remove cinder-backup ty1-z1-2cpu-computer110

3. 剥离 Neutron 网络服务

openstack network agent list --host ty1-z1-2cpu-computer110
openstack network agent delete <Agent_ID_1> <Agent_ID_2> <Agent_ID_3>

阶段三:计算节点 OpenStack 容器关停

执行位置:目标下线节点 (ty1-z1-2cpu-computer110)

警告:仅关停OpenStack组件,绝不能关停 ceph_osd_* 容器!

docker stop nova_compute nova_libvirt nova_ssh neutron_metadata_agent neutron_l3_agent neutron_openvswitch_agent openvswitch_vswitchd openvswitch_db cinder_backup cinder_volume ceilometer_compute cron kolla_toolbox fluentd

docker rm nova_compute nova_libvirt nova_ssh neutron_metadata_agent neutron_l3_agent neutron_openvswitch_agent openvswitch_vswitchd openvswitch_db cinder_backup cinder_volume ceilometer_compute cron kolla_toolbox fluentd

阶段四:等待 Ceph 数据搬迁完毕

执行位置:Ceph Mon 节点

执行 docker exec ceph_mon ceph -s,必须满足以下条件:

  • 1. 集群健康状态恢复为 HEALTH_OK

  • 2. PG 状态全部为 active+clean

  • 3. degraded 和 misplaced 对象归零

阶段五:Ceph OSD 物理停机与彻底剔除

1. 关停 OSD 容器 (目标下线节点执行)

docker stop ceph_osd_53 ceph_osd_56 ceph_osd_82 ceph_osd_96
docker rm ceph_osd_53 ceph_osd_56 ceph_osd_82 ceph_osd_96

2. 清除 Ceph 注册信息 (Mon 节点执行)

docker exec ceph_mon ceph osd purge 53 --yes-i-really-mean-it
docker exec ceph_mon ceph osd purge 56 --yes-i-really-mean-it
docker exec ceph_mon ceph osd purge 82 --yes-i-really-mean-it
docker exec ceph_mon ceph osd purge 96 --yes-i-really-mean-it

阶段六:更新 Ansible 部署资产清单

执行位置:Kolla-Ansible 部署节点

  • 编辑主机清单文件,在各个组件及存储组中删除 ty1-z1-2cpu-computer110 这一行。

4. 剔除完成的全局检查确认命令

完成上述所有步骤后,执行以下命令进行最终确认。如果以下命令均符合预期,则说明节点彻底且干净地下线。

检查 1:确认 Ceph 集群状态健康

docker exec ceph_mon ceph -s

预期结果:显示 health: HEALTH_OK,并且 osd 总数减少 4 个,没有任何降级 (degraded) 或错位 (misplaced) 信息。

检查 2:确认 Nova 计算服务已清理

openstack compute service list | grep ty1-z1-2cpu-computer110

预期结果:无任何输出(说明该节点的计算服务已彻底从数据库中删除)。

检查 3:确认 Neutron 网络代理已清理

openstack network agent list | grep ty1-z1-2cpu-computer110

预期结果:无任何输出(说明该节点的所有网络组件已彻底删除)。

检查 4:确认 Cinder 存储服务已清理

openstack volume service list | grep ty1-z1-2cpu-computer110

预期结果:无任何输出。如果仍能看到服务记录,其 Status 必须是 disabled 且 State 必须是 down。

5.下线实例被开机自动拉入了集群问题处理

一、现象

root@ty1-controller001:/opt/xunjian_log# cat xunjianlog20260827.txt  | grep ty1-z1-2cpu-computer105
| 79d908f3-df33-42bb-9465-377e2d110798 | nova-compute   | ty1-z1-2cpu-computer105  | nova             | enabled  | down  | -                          | -               | False       |
| cinder-backup    | ty1-z1-2cpu-computer105       | nova | enabled | down  | 2026-08-27T08:27:30.000000 | -       | -               |               |
| cinder-volume    | ty1-z1-2cpu-computer105@rbd-1 | nova | enabled | down  | 2026-08-27T08:27:31.000000 | -       | -               | -             |
| 15616f62-de03-4888-b2f6-b14e53278356 | Metadata agent     | ty1-z1-2cpu-computer105  | None              | XXX   | UP    | neutron-metadata-agent    |
| 8b10acdc-606c-4b23-9973-10f6d16154a7 | L3 agent           | ty1-z1-2cpu-computer105  | nova              | XXX   | UP    | neutron-l3-agent          |

二、清理

1、清理nova-compute

root@c9c20f67dc0c:/# openstack compute service set --disable ty1-z1-2cpu-computer105 nova-compute
root@c9c20f67dc0c:/# openstack compute service list | grep 105
| 79d908f3-df33-42bb-9465-377e2d110798 | nova-compute   | ty1-z1-2cpu-computer105  | nova             | disabled | down  | 2026-08-27T09:48:13.000000 |
root@c9c20f67dc0c:/# openstack compute service delete 79d908f3-df33-42bb-9465-377e2d110798
Failed to delete compute service with ID '79d908f3-df33-42bb-9465-377e2d110798': HttpException: 500: Server Error for url: http://10.8.12.8:8774/v2.1/os-services/79d908f3-df33-42bb-9465-377e2d110798, Unexpected API Error. Please report this at http://bugs.launchpad.net/nova/ and attach the Nova API log if possible.
<class 'nova.exception.ComputeHostNotFound'>
1 of 1 compute services failed to delete.

#解决方式在数据库中收到清理:
#1、查询残留数据
MariaDB [nova]> SELECT id, host, `binary`, deleted, uuid 
    -> FROM services 
    -> WHERE uuid = '79d908f3-df33-42bb-9465-377e2d110798';
+-----+-------------------------+--------------+---------+--------------------------------------+
| id  | host                    | binary       | deleted | uuid                                 |
+-----+-------------------------+--------------+---------+--------------------------------------+
| 208 | ty1-z1-2cpu-computer105 | nova-compute |       0 | 79d908f3-df33-42bb-9465-377e2d110798 |
+-----+-------------------------+--------------+---------+--------------------------------------+
1 row in set (0.001 sec)
#2、删除残留数据
UPDATE services 
SET deleted = id, deleted_at = NOW() 
WHERE uuid = '79d908f3-df33-42bb-9465-377e2d110798';

#3、清理 Placement 记录:
openstack resource provider list | grep ty1-z1-2cpu-computer105
# 复制上面查出来的 UUID,然后删除它
openstack resource provider delete <UUID>

#4、清理 Cell 映射:
nova-manage cell_v2 delete_host --host ty1-z1-2cpu-computer105

2、清理cinder

#清理 cinder-volume 服务:
docker exec -it cinder_api cinder-manage service remove cinder-volume ty1-z1-2cpu-computer105@rbd-1

#清理 cinder-backup 服务:
docker exec -it cinder_api cinder-manage service remove cinder-backup ty1-z1-2cpu-computer105

3、清除neutron

openstack network agent list --host ty1-z1-2cpu-computer110
openstack network agent delete <Agent_ID_1> <Agent_ID_2> <Agent_ID_3>

评论