Ceph 集群运行久了,需要对其进行停机维护。 而停止 Ceph 服务需要按照一定的流程来进行,以避免 Ceph 集群出现性能问题。


Table of Contents

  1. 停机维护
  2. 开机启动 Ceph 集群
  3. 参考

停机维护

  1. 关掉所有使用 Ceph 集群的客户端
  2. 保证集群的健康状态(healthy state) 为 OK
  3. 设置 OSD flags
1
2
3
4
5
6
7
8
9
10
11
## osd no out
$ ceph osd set noout
## not backfill data to other osd
$ ceph osd set nobackfill
## not recover
$ ceph osd set norecover
## 上面一些flags 对于关掉集群应该已经足够安全了,
## 还可以设置如下的flags以完全停止集群
$ ceph osd set norebalance
$ ceph osd set nodown
$ ceph osd set pause
  1. 依次关掉 Ceph 的客户端节点
  2. 查看 Ceph Service
1
2
3
4
5
6
7
8
9
10
$ ceph -s
cluster:
id: 1272c14d-2389-48db-a313-02600a50212f
health: HEALTH_OK

services:
mon: 3 daemons, quorum ceph01,ceph02,ceph03
mgr: ceph03(active), standbys: ceph02, ceph01
mds: cephfs-1/1/1 up {0=ceph03=up:active}, 2 up:standby
osd: 18 osds: 18 up, 18 in
  1. 依次关掉 Ceph MDS/FUSE 服务
1
2
3
4
5
### MDS && FUSE
for i in ceph0{1..3}; do
ssh $i "systemctl stop ceph-fuse@-ceph.service; systemctl stop ceph-mds@${i}.service"
done
###
  1. 依次关停 Ceph 的 OSD 服务
1
2
3
4
5
6
### OSD
for i in $(ceph osd status | awk '/ceph/{print $2 ":" $4}');do
idx=$(echo $i|awk -F : '{print $1}')
host=$(echo $i | awk -F : '{print $2}')
ssh $host "systemctl stop ceph-osd@${idx}.service"
done
  1. 依次关停 Ceph 的 Mon 服务
1
2
3
for i in ceph0{1..3};do
ssh $i "systemctl stop ceph-mon@${i}.service"
done
  1. 依次关停 Ceph 的 MGR 服务
1
2
3
for i in ceph0{1..3}; do
ssh $i "systemctl stop ceph-mgr@${i}.service"
done
  1. 进行关机等维护工作

开机启动 Ceph 集群

  1. 启动 MGR 节点
  2. 启动 MOM 节点
  3. 启动 OSD 节点
  4. 在所有节点启动上线后,确认所有服务都已正常
  5. 取消之前设置的 flags
1
2
3
4
5
6
$ ceph osd unset noout
$ ceph osd unset nobackfill
$ ceph osd unset norecover
$ ceph osd unset norebalance
$ ceph osd unset nodown
$ ceph osd unset pause
  1. 检查 Ceph 健康状态,确定为 OK。
  2. 检查 Ceph 客户端是否能连接上 Ceph 集群

参考

  1. How to do a Ceph cluster maintenance/shutdown
  2. [ceph-users] Steps to stop/restart entire ceph cluster