一、ceph 集群维护
1.1 通过套接字进行部分操作{不考虑}
1 | root@ceph-node3:~# ls /var/run/ceph/32e044ec-8fb1-11f1-a636-000c29b8ae8b/ |
1 | root@ceph-node3:~# ceph --admin-daemon --help |
1 | #查看配置 |
1.2 ceph 集群的停止或重启
重启之前,要提前设置 ceph 集群不要将 OSD 标记为 out,避免 node 节点关闭服务后被踢出 ceph 集群外:
1 | root@ceph-node1:~# ceph osd set noout |
1.2.1 原地换盘(维护模式)
1 | # 1. 进入维护模式(停止所有服务,设置noout) |
1.2.2 添加服务器(扩容)
安装docker-时间同步
cephadm shell ceph orch host add ceph-node4 10.10.0.234
1.2.3 删除 OSD 或服务器
把故障的 OSD 从 ceph 集群删除
1 | # 1. 将OSD标记为out(触发数据迁移) |
停止服务器之前要把服务器的 OSD 先停止并从 ceph 集群删除
- 把 osd 踢出集群
ceph osd out 1 - 等一段时间
- 停止 osd.x 进程
- 删除 osd
ceph osd rm 1会清理crush - 当前主机的其它磁盘重复以上操作
- OSD 全部操作完成后下线主机
ceph osd crush rm ceph-node1#从 crush 删除 ceph-node1
节点设置进入维护模式
1 | #集群空间充足 |
1.2.4 永久下线节点
1. 排空节点 (Drain the Host)
这是最关键的一步。该操作会排空节点上所有的守护进程(特别是 OSD),将其上的数据安全地迁移到集群中的其他节点上,为后续的移除做准备。
使用 ceph orch host drain 命令,并指定要下线的主机名:
1 | ceph orch host drain <hostname> |
自动操作:
drain命令会自动为要下线的主机打上_no_schedule标签,并调度其上的所有 OSD 进入移除流程。监控进度:你可以使用以下命令来查看数据迁移和 OSD 移除的进度:
1
ceph orch osd rm status
验证状态:当排空完成后,你可以检查该节点上是否还有守护进程在运行:
1
ceph orch ps <hostname>
2. 移除节点 (Remove the Host)
当确认 ceph orch ps <hostname> 输出为空,即所有守护进程均已成功迁移后,就可以安全地将该节点从集群中移除了。
使用 ceph orch host rm 命令,将 <hostname> 替换为对应的主机名:
1 | ceph orch host rm <hostname> |
执行后,该节点便不再是 Ceph 集群的一部分了。
3. ⚠️ 特殊场景:节点已离线且无法恢复
如果你需要移除的节点已经彻底宕机,无法通过 SSH 连接,也无需迁移数据,则必须使用强制移除命令。这个操作有潜在的数据丢失风险,谨慎执行。
在命令中加上 --offline 和 --force 标志:
1 | ceph orch host rm <hostname> --offline --force |
这个命令会通过调用 osd purge-actual 来强制清理该主机上的所有 OSD 记录。但如果该主机仍然在线,执行此命令可能会报错,此时应使用上面的标准流程。
1.2.5 完整集群关闭 (Planned Shutdown)
这是计划内数据中心断电等场景的标准方法,由 cephadm 工具处理,能自动化完成复杂的流程。务必确保集群健康 (HEALTH_OK),并且所有客户端都已停止使用,否则可能导致数据丢失。
1. 关闭前
1 | ceph -s |
确认状态。
设置:
1 | root@ceph-node1:~# ceph osd set noout |
2. 关机
1 | shutdown -h now |
#启动服务后取消
1 | ceph osd unset noout |