HMK's blog

保持思考|00后|等待


  • Home
  • Archive
  • Tags
  •   

© 2026 Hekang

Theme Typography by Makito

Proudly published with Hexo

ceph_cluster_maintenance

Posted at 2026-08-06 Storage 

一、ceph 集群维护

1.1 通过套接字进行部分操作{不考虑}

1
2
3
4
root@ceph-node3:~# ls /var/run/ceph/32e044ec-8fb1-11f1-a636-000c29b8ae8b/
ceph-client.ceph-exporter.ceph-node3.asok ceph-mon.ceph-node3.asok ceph-osd.5.asok
ceph-mds.myfs.ceph-node3.ydxqjg.asok ceph-osd.2.asok

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
root@ceph-node3:~# ceph --admin-daemon --help
usage: ceph [-h] [-c CEPHCONF] [-i INPUT_FILE] [-o OUTPUT_FILE] [--setuser SETUSER] [--setgroup SETGROUP] [--id CLIENT_ID]
[--name CLIENT_NAME] [--cluster CLUSTER] [--admin-daemon ADMIN_SOCKET] [-s] [-w] [--watch-debug] [--watch-info] [--watch-sec]
[--watch-warn] [--watch-error] [-W WATCH_CHANNEL] [--version] [--verbose] [--concise]
[--daemon-output-file DAEMON_OUTPUT_FILE] [-f {json,json-pretty,xml,xml-pretty,plain,yaml}]
[--connect-timeout CLUSTER_TIMEOUT] [--block] [--period PERIOD]
ceph: error: argument --admin-daemon: expected one argument
root@ceph-node3:~#

#先将 admin 认证文件同步到 mon 或者 node 节点:
scp /etc/ceph/ceph.client.admin.keyring 10.10.0.232:/etc/ceph/

ceph --admin-daemon /var/run/ceph/32e044ec-8fb1-11f1-a636-000c29b8ae8b/ceph-osd.5.asok --help

root@ceph-node3:~# ceph --admin-daemon /var/run/ceph/32e044ec-8fb1-11f1-a636-000c29b8ae8b/ceph-osd.2.asok bluefs stats
1 : device size 0x4ffc00000(20 GiB) : using 0x63b4000(100 MiB)
wal_total:0, db_total:20397110067, slow_total:0

1
2
3
#查看配置
root@ceph-node3:~# ceph --admin-daemon /var/run/ceph/32e044ec-8fb1-11f1-a636-000c29b8ae8b/ceph-osd.2.asok config show

1.2 ceph 集群的停止或重启

重启之前,要提前设置 ceph 集群不要将 OSD 标记为 out,避免 node 节点关闭服务后被踢出 ceph 集群外:

1
2
3
4
5
6
root@ceph-node1:~# ceph osd set noout
noout is set

root@ceph-node1:~# ceph osd unset noout
noout is unset

1.2.1 原地换盘(维护模式)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 1. 进入维护模式(停止所有服务,设置noout)
ceph orch host maintenance enter node3



# 2. 标记OSD准备更换(保留槽位)
ceph orch osd rm 5 --replace


# 3. 确认销毁旧OSD
ceph orch osd destroy 5

## 2. 一键清理旧OSD(保留槽位)
#ceph orch osd rm 5 --replace --zap
# 4. 物理更换磁盘

# 5. 重新创建OSD
ceph orch apply osd --all-available-devices

# 6. 退出维护模式(重新上线)
ceph orch host maintenance exit node3

root@ceph-node1:~# ceph orch host maintenance exit ceph-node3
Ceph cluster 32e044ec-8fb1-11f1-a636-000c29b8ae8b on ceph-node3 has exited maintenance mode

1.2.2 添加服务器(扩容)

安装docker-时间同步

  1. cephadm shell ceph orch host add ceph-node4 10.10.0.234

1.2.3 删除 OSD 或服务器

把故障的 OSD 从 ceph 集群删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 1. 将OSD标记为out(触发数据迁移)
# 等一段时间
ceph osd out osd.x

# 2. 停止OSD容器
ceph orch daemon stop osd.x

# 3. 从集群中移除OSD(清理所有痕迹)
ceph orch daemon rm osd.x --force
# 手动清理残留
# 从 CRUSH map 中移除 OSD:
ceph osd crush remove osd.<id>

# 从集群中删除该 OSD 的认证信息:
ceph auth rm osd.<id>
# 清除磁盘上的数据以便后续使用
ceph orch device zap <hostname> /dev/<device> --force



ceph orch osd rm <id> --zap
# 整体移除与清理:这是一个更高级、更完整的命令。它会先移除 OSD,并同时清除其相关的 LVM 逻辑卷和物理磁盘上的数据

停止服务器之前要把服务器的 OSD 先停止并从 ceph 集群删除

  1. 把 osd 踢出集群 ceph osd out 1
  2. 等一段时间
  3. 停止 osd.x 进程
  4. 删除 osd ceph osd rm 1 会清理crush
  5. 当前主机的其它磁盘重复以上操作
  6. OSD 全部操作完成后下线主机
  7. ceph osd crush rm ceph-node1 #从 crush 删除 ceph-node1

节点设置进入维护模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#集群空间充足
#流程:进入维护模式 -> noout 生效 -> 节点离线 -> 集群进入 degraded 状态 -> 完成维护 -> 退出维护模式 -> OSD 重新上线 -> 集群恢复 active+clean。

#特点:整个过程零数据迁移。这是维护模式的核心优势——它把“计划内维护”和“节点故障”区分开,避免了大规模、耗时的数据回填,对集群性能和时间都是最优解

# 检查集群是否有足够空间进行数据迁移
root@ceph-node1:~# ceph orch host ok-to-stop ceph-node3
It is presumed safe to stop host ceph-node3. Note the following:
It appears safe to stop ceph-exporter.ceph-node3
osd.2,osd.5 are safe to restart
It appears safe to stop mds.myfs.ceph-node3.ydxqjg
It appears safe to stop crash.ceph-node3
It appears safe to stop mon.ceph-node3
It is presumed safe to stop ['node-exporter.ceph-node3']

root@ceph-node1:~# ceph orch host maintenance enter ceph-node3 --force --yes-i-really-mean-it
Daemons for Ceph cluster 32e044ec-8fb1-11f1-a636-000c29b8ae8b stopped on host ceph-node3. Host ceph-node3 moved to maintenance mode

#触发 noout 保护:这是最关键的一步。命令会为该主机的所有 OSD 应用 noout 标志。这个标志告诉集群:“这些 OSD 是计划内离线,请不要立刻将它们标记为永久离线(out),也不要因此触发大规模的数据迁移(rebalance)”。这就避免了因客户端继续使用而可能引发的数据迁移风暴。

#停止容器服务:随后,该主机上的所有 Ceph 守护进程(如 OSD、MON)的容器会被停止
#那客户端请求具体是怎么处理的?
#当节点进入维护模式后,客户端的块设备访问情况如下:

#客户端读写继续:对于存储在该节点 OSD 上的数据,由于有多个副本,客户端会自动将读写请求路由到该 PG 的其他健康副本上。只要集群副本数大于1(通常为3),业务就不会中断。集群状态变化,但可接受:由于缺少了一个副本,该节点上的 PG 会短暂进入 degraded(降级)状态。这是正常的,表示数据副本数不足,但数据本身仍然可用和完整。集群不会因为 noout 标志而启动数据回填,所以性能影响也降到了最低。

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
2
3
4
5
6
7
root@ceph-node1:~# ceph osd set noout
noout is set
ceph osd set norebalance
ceph osd set norecover
root@ceph-node1:~# ceph osd dump | grep flags | grep noout
flags noout,sortbitwise,recovery_deletes,purged_snapdirs,pglog_hardlimit


2. 关机

1
shutdown -h now

#启动服务后取消

1
2
3
ceph osd unset noout
ceph osd unset norebalance
ceph osd unset norecover

Share 

 Previous post: Ceph数据冷热分离 Next post: ceph_install_v20.2.2 

© 2026 Hekang

Theme Typography by Makito

Proudly published with Hexo