Ceph 集群组件管理
ceph orch 命令
ceph orch 命令与编排器模块交互,编排器模块是ceph-mgr的插件,与外部编排服务交互。
ceph orch 命令支持多个外部编排器:
host:物理节点
service type:服务类型,如nfs, mds, osd, mon, rgw, mgr, iscsi
Service:逻辑服务
Daemon:进程
禁用服务自动扩展
Ceph 集群服务自动扩展功能,会自动部署ceph组件到存储节点。如果想手动管理 ceph 服务,则需要禁
用 ceph 服务自动扩展功能。
bash
# 查看 mon 服务
[root@ceph1 ~]# ceph orch ls mon
NAME PORTS RUNNING REFRESHED AGE PLACEMENT
mon 3/3 90s ago 8m label:_admin
# 禁用 mon 服务自动扩展
[root@ceph1 ~]# ceph orch apply mon --unmanaged=true
[root@ceph1 ~]# ceph orch ls mon
NAME PORTS RUNNING REFRESHED AGE PLACEMENT
mon 3/5 118s ago 4s <unmanaged>
# 启用 mon 服务自动扩展
[root@ceph1 ~]# ceph orch apply mon --unmanaged=false
[root@ceph1 ~]# ceph orch ls mon
NAME PORTS RUNNING REFRESHED AGE PLACEMENT
mon 3/5 2m ago 4s count:5
# 通过标签部署 mon 服务
[root@ceph1 ~]# ceph orch apply mon --placement="label:_admin"
Scheduled mon update...
[root@ceph1 ~]# ceph orch ls mon
NAME PORTS RUNNING REFRESHED AGE PLACEMENT
mon 3/3 3m ago 15s label:_admin
删除服务
以 crash 服务为例。
bash
# 禁用服务自动扩展
[root@ceph1 ~ 17:26:56]# ceph orch apply crash --unmanaged=true
Scheduled crash update...
[root@ceph1 ~ 17:27:25]# ceph orch ls crash
NAME PORTS RUNNING REFRESHED AGE PLACEMENT
crash 3/3 9m ago 12s <unmanaged>
# 查看服务中实例
[root@ceph1 ~ 17:27:38]# ceph orch ps | grep crash
crash.ceph1 ceph1.zhu.cloud running (71m) 10m ago 2h 6639k - 16.2.15 3c4eff6082ae 6088c7c8b160
crash.ceph2 ceph2.zhu.cloud running (71m) 10m ago 2h 6639k - 16.2.15 3c4eff6082ae 1124ac1d0649
crash.ceph3 ceph3.zhu.cloud running (71m) 10m ago 2h 6647k - 16.2.15 3c4eff6082ae b473b16d73bd
# 删除特定实例
[root@ceph1 ~ 17:27:53]# ceph orch daemon rm crash.ceph1
Removed crash.ceph1 from host 'ceph1.zhu.cloud'
[root@ceph1 ~ 17:28:22]# ceph orch ps | grep crash
crash.ceph2 ceph2.zhu.cloud running (71m) 21s ago 2h 6639k - 16.2.15 3c4eff6082ae 1124ac1d0649
crash.ceph3 ceph3.zhu.cloud running (71m) 21s ago 2h 6647k - 16.2.15 3c4eff6082ae b473b16d73bd
# 删除服务
[root@ceph1 ~ 17:28:45]# ceph orch rm crash
Removed service crash
[root@ceph1 ~ 17:28:55]# ceph orch ls crash
No services reported
删除 OSD
确定 OSD 和设备关系
bash
[root@ceph1 ~]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.17537 root default
-3 0.05846 host ceph1 #主机
ceph1下的硬盘
0 hdd 0.01949 osd.0 up 1.00000 1.00000 #看不出来
osd.0对应哪块磁盘
3 hdd 0.01949 osd.3 up 1.00000 1.00000
6 hdd 0.01949 osd.6 up 1.00000 1.00000
-5 0.05846 host ceph2
2 hdd 0.01949 osd.2 up 1.00000 1.00000
4 hdd 0.01949 osd.4 up 1.00000 1.00000
7 hdd 0.01949 osd.7 up 1.00000 1.00000
-7 0.05846 host ceph3
1 hdd 0.01949 osd.1 up 1.00000 1.00000
5 hdd 0.01949 osd.5 up 1.00000 1.00000
8 hdd 0.01949 osd.8 up 1.00000 1.00000
# 获取集群id
[root@ceph1 ~]# ceph -s | grep id
id: 2faf683a-7cbf-11f0-b5ba-000c29e0ad0e
# 登录到ceph1上确认osd.0使用的块设备
[root@ceph1 ~]# ls -l /var/lib/ceph/2faf683a-7cbf-11f0-b5ba000c29e0ad0e/osd.0/block
lrwxrwxrwx 1 ceph ceph 93 Aug 19 14:01 /var/lib/ceph/2faf683a-7cbf-11f0-b5ba000c29e0ad0e/osd.0/block -> /dev/ceph-c92942fb-f959-4255-b8e6-751fab70fa79/osdblock-2ed79b2f-d825-4829-b4b0-59879d2ad99c
# 59879d2ad99c是块设备名称最后一串字符
[root@ceph1 ~]# lsblk
sdb
8:16 0 20G 0 disk
└─ceph--c92942fb--f959--4255--b8e6--751fab70fa79-osd--block--2ed79b2f--d825-
-4829--b4b0--59879d2ad99c 253:4 0 20G 0 lvm
# 确认osd.0对应sdb
# 用下面命令也可以
[root@ceph1 ~]# ceph osd metadata 0 #0是osd编号
[root@ceph1 ~]# ceph osd metadata 0
{
"id": 0,
"arch": "x86_64",
"back_addr": "
[v2:192.168.108.11:6802/914648970,v1:192.168.108.11:6803/914648970]",
"back_iface": "",
"bluefs": "1",
"bluefs_dedicated_db": "0",
"bluefs_dedicated_wal": "0",
"bluefs_single_shared_device": "1",
"bluestore_bdev_access_mode": "blk",
"bluestore_bdev_block_size": "4096",
"bluestore_bdev_dev_node": "/dev/dm-2",
"bluestore_bdev_devices": "sdb" 看这里`
"bluestore_bdev_driver": "KernelDevice",
"bluestore_bdev_partition_path": "/dev/dm-2",
"bluestore_bdev_rotational": "1",
"bluestore_bdev_size": "21470642176",
"bluestore_bdev_support_discard": "0",
.....
脚本实现
bash
[root@ceph1 ~]# vim /usr/local/bin/show-osd-device
#!/bin/bash
# author laogao
# date 2025-08-19
# Description 确认 osd 和 device 之间对应关系
# usage 在ceph node 上执行
cluster_id=$(ceph -s|grep id |awk '{print $2}')
cd /var/lib/ceph/${cluster_id}
for osd in osd.*
do
device_id=$(ls -l $osd/block | awk -F '-' '{print $NF}')
device=/dev/$(lsblk |grep -B1 ${device_id} |grep -v ${device_id} | awk {print $1}')
echo $osd : $device
done
##添加执行权限
[root@ceph1 ~]# chmod +x /usr/local/bin/show-osd-device
##执行效果
[root@ceph1 ~]# show-osd-device
osd.0 : /dev/sdb
osd.3 : /dev/sdc
osd.6 : /dev/sdd
编排删除
删除 osd.0
bash
# 禁用 osd 服务自动扩展
[root@ceph1 ~]# ceph orch apply osd --all-available-devices --unmanaged=true
[root@ceph1 ~]# ceph orch ls osd
NAME PORTS RUNNING REFRESHED AGE PLACEMENT
osd.all-available-devices 9 7m ago 6s <unmanaged>
# 第一种(先标记out,再删除)
[root@ceph1 ~]# ceph osd out osd.0
[root@ceph1 ~]# ceph orch osd rm 0
# 删除device上数据
# 删除前lsblk看下sdb
[root@ceph1 ~]# ceph orch device zap ceph1.zhu.cloud /dev/sdb --force #看osd0管理的是/dev/sdb还是啥
zap successful for /dev/sdb on ceph1.zhu.cloud
# 确认结果
[root@ceph1 ~]# ceph orch device ls
[root@ceph1 ~]# ceph orch device ls | grep ceph1.*sdb
ceph1.zhu.cloud /dev/sdb hdd 20.0G
Yes 72s ago
[root@ceph1 ~]# lsblk
[root@ceph1 ~]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
# 第二种 直接删除加格式化磁盘
[root@ceph1 ~]# ceph osd out osd.3
[root@ceph1 ~]# ceph orch osd rm 3 --force --zap
# 添加回来
[root@ceph1 ~]# ceph orch apply osd --all-available-devices
#RUNNING重新变为9
[root@ceph1 ~]# ceph orch ls osd
NAME PORTS RUNNING REFRESHED AGE PLACEMENT
osd.all-available-devices 9 6m ago 29s *
删除主机
从集群中删除主机流程:
- 禁用集群所有服务自动扩展
- 查看待删除主机上当前运行的服务
- 停止待删除主机上的所有服务
- 删除主机上的所有服务
- 删除osd在CRUSH中的映射
- 擦除osd盘中的数据
- 从集群中删除主机
删除 ceph2
首先禁用集群中所有ceph服务自动扩展,进制自动部署osd。
bash
[root@ceph1 ~]# for service in $(ceph orch ls |grep -v -e NAME -e osd| awk '{print $1}');do ceph orch apply $service --unmanaged=true;done
[root@ceph1 ~]# ceph orch apply osd --all-available-devices --unmanaged=true
其次,删除主机上运行的服务。
bash
# 查看ceph2上运行的daemon
[root@ceph1 ~]# ceph orch ps |grep ceph2 |awk '{print $1}'
crash.ceph2
mgr.ceph2.oetbal
mon.ceph2
node-exporter.ceph2
osd.2
osd.4
osd.7
# 删除相应 daemon
[root@ceph1 ~]# for daemon in $(ceph orch ps |grep ceph2 |awk '{print $1}');do
ceph orch daemon rm $daemon --force;done
# 手动清理crush信息
[root@ceph1 ~]# ceph osd crush rm osd.2
[root@ceph1 ~]# ceph osd crush rm osd.4
[root@ceph1 ~]# ceph osd crush rm osd.7
[root@ceph1 ~]# ceph osd crush rm ceph2
[root@ceph1 ~]# ceph osd rm 2 4 7
# 清理磁盘数据
[root@ceph1 ~]# ceph orch device zap ceph2.laogao.cloud /dev/sdb --force
[root@ceph1 ~]# ceph orch device zap ceph2.laogao.cloud /dev/sdc --force
[root@ceph1 ~]# ceph orch device zap ceph2.laogao.cloud /dev/sdd --force
然后,删除主机。
bash
[root@ceph1 ~]# ceph orch host rm ceph2
[root@ceph1 ~]# ceph orch host ls #查看现象ceph2被移除
HOST ADDR LABELS STATUS
ceph1.zhu.cloud 192.168.108.11 _admin
ceph3.zhu.cloud 192.168.108.13 _admin
2 hosts in cluster
最后,删除ceph2中相应ceph遗留文件
bash
[root@ceph2 ~]# rm -rf /var/lib/ceph
[root@ceph2 ~]# rm -rf /etc/ceph /etc/systemd/system/ceph*
[root@ceph2 ~]# rm -rf /var/log/ceph
Ceph 集群配置
每个 Ceph 节点都会存储一个本地配置文件,默认位置是
/etc/ceph/ceph.conf 。
Ceph 使用所应用的守护进程或客户端的部分,将配置选项分组,确定是存储在配置文件中还是存储在配
置数据库中。
global 部分,存储所有守护进程(包括客户端)共有的一般配置,可为单个守护进程或客户端创建调用部分来覆盖 global 参数。
mon 部分,存储监控器 (MON) 的配置。
osd 部分,存储 OSD 守护进程的配置。
mgr 部分,存储管理器 (MGR) 的配置。
mds 部分,存储元数据服务器 (MDS) 的配置。
client 部分,存储应用到所有 Ceph 客户客户端的配置。
良好的示例文件参见 /usr/share/doc/ceph/sample.ceph.conf
元变量
元变量是由 Ceph 定义的变量。用户可使用它们来简化配置。
$cluster,Ceph 存储 5 集群的名称。默认集群名称为 ceph。
$type,守护进程类型,如监控器的值为 mon。OSD 使用 osd,元数据服务器使用 mds,管理器
使用 mgr,客户端软件使用 client。
id,守护进程实例 ID。对于此变量,ceph1 上监控器的值为 ceph1。osd.1 的 id 值为 1 ,客户
端应用的值为用户名。
$name,守护进程名称和实例 ID。此变量是 type.type.type.id 的简写。
$host,运行守护进程的主机的名称。
使用集群配置数据库
集群配置数据库由 MON 节点集中管理:
在守护进程启动之前,暂时更改设置。
在守护进程运行时,更改大部分设置。
将永久设置存储在数据库中。
Ceph集中配置数据库默认存放在 MON 节点 /var/lib/ceph/fsid/mon.fsid/mon.fsid/mon.host/store.db中。
使用 ceph config 命令,查询和配置集中配置数据库。
ceph config ls
列出集群数据库中所有配置条目。
bash
[root@ceph1 ~]# ceph config ls
host
fsid
public_addr
public_addrv
public_bind_addr
cluster_addr
public_network
public_network_interface
cluster_network
cluster_network_interface
......
ceph config help
查看集群数据库中特定配置帮助信息。 是 ceph config ls 命令列出的条目。
bash
[root@ceph1 ~]# ceph config help host
host - local hostname
(str, basic)
Default:
Can update at runtime: false
Services: [common]
Tags: [network]
if blank, ceph assumes the short hostname (hostname -s)
[root@ceph1 ~]# ceph config help fsid
fsid - cluster fsid (uuid)
(uuid, basic)
Default: 00000000-0000-0000-0000-000000000000
Can update at runtime: false
Services: [common]
Tags: [service]
ceph config dump
显示集群配置数据库设置。显示的是当前所有生效的配置项(包括默认值和已被修改的值)
bash
[root@ceph1 ~ 17:50:56]# ceph config dump
WHO MASK LEVEL OPTION VALUE RO
global basic container_image quay.io/ceph/ceph@sha256:6ba107eb55617994a9e6ed 49fb938828c2ed3121aa19ceeffbf8e28608535d94 *
mon advanced auth_allow_insecure_global_id_reclaim false
mon advanced public_network 192.168.108.0/24 *
mon.ceph1.zhu.cloud advanced mon_allow_pool_delete false
mgr advanced mgr/cephadm/container_init True *
mgr advanced mgr/cephadm/migration_current 5 *
mgr advanced mgr/dashboard/ALERTMANAGER_API_HOST http://ceph1.zhu.cloud:9093 *
mgr advanced mgr/dashboard/GRAFANA_API_SSL_VERIFY false *
mgr advanced mgr/dashboard/GRAFANA_API_URL https://ceph1.zhu.cloud:3000 *
mgr advanced mgr/dashboard/PROMETHEUS_API_HOST http://ceph1.zhu.cloud:9095 *
mgr advanced mgr/dashboard/ssl_server_port 8443 *
mgr advanced mgr/orchestrator/orchestrator cephadm
osd advanced osd_memory_target_autotune true
ceph config show type.type.type.id \[\]
仅显示被显式设置过的配置项(即非默认值)

ceph config show-with-defaults type.type.type.id
显示所有配置项 + 当前值(包括默认值还有修改值)

ceph config get type.type.type.id \[\]
获得集群数据库中特定配置设置。精准点查
bash
[root@ceph1 ~]# ceph config get mon.ceph1.zhu.cloud
WHO
MASK LEVEL
mon
OPTION
VALUE
advanced auth_allow_insecure_global_id_reclaim false
global
basic
advanced public_network
container_image
quay.io/ceph/ceph@sha256:6ba107eb55617994a9e6ed49fb938828c2ed3121aa19ceeffbf8e286
08535d94 *
mon
RO
192.168.108.0/24
[root@ceph1 ~]# ceph config get mon.ceph1.zhu.cloud public_network
192.168.108.0/24
ceph config set type.type.type.id
设置集群数据库中特定配置选项。
bash
# 设置特定类型所有实例
[root@ceph1 ~]# ceph config set mon mon_allow_pool_delete false
# 设置特定类型特定实例
[root@ceph1 ~]# ceph config set mon.ceph1.laogao.cloud mon_allow_pool_delete true
[root@ceph1 ~]# ceph config get mon.ceph1.laogao.cloud mon_allow_pool_delete
true
ceph config rm type.type.type.id \[\]
清除集群数据库中特定配置选项。--删除该参数还原默认配置的意思
bash
[root@ceph1 ~]# ceph config rm mon.ceph1.zhu.cloud mon_allow_pool_delete
[root@ceph1 ~]# ceph config get mon.ceph1.zhu.cloud mon_allow_pool_delete
false
ceph config log num:int
显示集群最近配置历史记录,默认显示10条,类似于linux中history命令。
bash
[root@ceph1 ~]# ceph config log--- 16 --- 2025-08-19T08:08:00.450868+0000 ---- mon.ceph1.laogao.cloud/mon_allow_pool_delete = true--- 15 --- 2025-08-19T08:07:01.547157+0000 --
+ mon.ceph1.laogao.cloud/mon_allow_pool_delete = true--- 14 --- 2025-08-19T08:05:20.097053+0000 --
+ mon/mon_allow_pool_delete = false
......
# 只显示最近更改的两条记录
[root@ceph1 ~]# ceph config log 2--- 16 --- 2025-08-19T08:08:00.450868+0000 ---- mon.ceph1.laogao.cloud/mon_allow_pool_delete = true--- 15 --- 2025-08-19T08:07:01.547157+0000 --
+ mon.ceph1.laogao.cloud/mon_allow_pool_delete = true
ceph config reset num:int
回滚集群数据中特定配置为 num 指定的历史版本。
bash
[root@ceph1 ~]# ceph config set mon.ceph1.zhu.cloud mon_allow_pool_delete true
#产生log 20记录
[root@ceph1 ~]# ceph config set mon.ceph1.zhu.cloud mon_allow_pool_delete
false
#产生log 21记录
[root@ceph1 ~]# ceph config get mon.ceph1.zhu.cloud mon_allow_pool_delete
false
#此刻为false
[root@ceph1 ~]# ceph config log 2--- 21 --- 2025-08-19T08:23:11.722223+0000 ---- mon.ceph1.zhu.cloud/mon_allow_pool_delete = true
+ mon.ceph1.zhu.cloud/mon_allow_pool_delete = false--- 20 --- 2025-08-19T08:23:07.709101+0000 ---- mon.ceph1.zhu.cloud/mon_allow_pool_delete = false
+ mon.ceph1.zhu.cloud/mon_allow_pool_delete = true
[root@ceph1 ~]# ceph config reset 20
[root@ceph1 ~]# ceph config get mon.ceph1.zhu.cloud mon_allow_pool_delete
#验证回到log 20的true
true
[root@ceph1 ~]# ceph config log 1--- 22 --- 2025-08-19T08:25:27.045753+0000 --- reset to 20 ---
#从22回滚到20- mon.ceph1.zhu.cloud/mon_allow_pool_delete = false
+ mon.ceph1.zhu.cloud/mon_allow_pool_delete = true
ceph tell 命令
Ceph支持在守护进程运行时,临时更改大部分配置选项。
bash
[root@ceph1 ~]# ceph tell mon.ceph1.zhu.cloud config get mon_allow_pool_delete
{
"mon_allow_pool_delete": "true"
}
[root@ceph1 ~]# ceph tell mon.ceph1.zhu.cloud config set mon_allow_pool_delete
false
{
"success": "mon_allow_pool_delete = 'false' "
}
# 临时更改的值已生效
[root@ceph1 ~]# ceph tell mon.ceph1.zhu.cloud config get mon_allow_pool_delete
{
"mon_allow_pool_delete": "false"
}
# 集群数据库中值仍然为true
[root@ceph1 ~]# ceph config get mon.ceph1.zhu.cloud mon_allow_pool_delete
true
# 重启守护进程,生效的值恢复为数据库中设置的值
[root@ceph1 ~]# ceph orch daemon restart mon.ceph1.zhu.cloud
Scheduled to restart mon.ceph1.laogao.cloud on host 'ceph1.laogao.cloud'
[root@ceph1 ~]# ceph tell mon.ceph1.zhu.cloud config get mon_allow_pool_delete
{
"mon_allow_pool_delete": "true"
}
使用此命令更改的设置在守护进程重启后会恢复为原始设置