ceph-L
你贴的这条命令是一个 RADOS 对象批量查询 watchers 的操作,我帮你拆解、分析和优化一下,同时解释每个部分的作用。
原命令解析
rados --conf ./ceph/ceph.conf \
--keyring ./ceph/ceph.client.admin.keyring \
-p ceph-demo ls | grep 30d7d697a57525 | xargs -I {} sh -c \
"rados --conf ./ceph/ceph.conf --keyring ./ceph/ceph.client.admin.keyring \
-p ceph-demo listwatchers {}"
1️⃣ 命令拆解
-
列出 Pool 中所有对象
rados --conf ./ceph/ceph.conf \
--keyring ./ceph/ceph.client.admin.keyring \
-p ceph-demo ls
-
列出
ceph-demo池中所有对象。 -
--conf指定 Ceph 配置文件。 -
--keyring指定 admin key。
-
筛选对象
| grep 30d7d697a57525
-
只保留对象名中包含
30d7d697a57525的对象。
-
对每个对象执行
listwatchers
| xargs -I {} sh -c "rados --conf ./ceph/ceph.conf --keyring ./ceph/ceph.client.admin.keyring -p ceph-demo listwatchers {}"
-
xargs -I {}:将每行对象名替换{}。 -
sh -c "...":在子 shell 中执行 rados 命令。 -
listwatchers {}:查询每个对象的 watchers。
2️⃣ 等价简化写法
如果你的 shell 支持,可以直接用:
for obj in $(rados --conf ./ceph/ceph.conf \
--keyring ./ceph/ceph.client.admin.keyring \
-p ceph-demo ls | grep 30d7d697a57525); do
rados --conf ./ceph/ceph.conf \
--keyring ./ceph/ceph.client.admin.keyring \
-p ceph-demo listwatchers "$obj"
done
优点:
-
更易读,易于调试。
-
避免 xargs + sh 的嵌套,减少潜在的 shell 注入风险。
3️⃣ 总结作用
-
目的:批量查询
ceph-demo池中名称包含30d7d697a57525的对象,查看每个对象的 watcher 列表。 -
典型应用场景:
-
RBD 镜像排查锁情况
-
检查哪些客户端正在映射或访问特定 RBD 对象
-
避免误删除仍被使用的对象
-
如果你需要,我可以帮你画一张 命令流程图,把 ls → grep → listwatchers 的逻辑和对象关系可视化,方便理解 watcher 查询流程。
你希望我画吗?
Ceph 全量操作手册(SRE Wiki 版)
一、集群与池管理
1️⃣ 查看集群状态
ceph -s
-
作用:显示集群整体状态,包括 MON、OSD、PG 健康、容量使用情况。
-
参数说明:
-
-s或--status:简洁显示集群状态。
-
-
示例:
$ ceph -s
cluster:
id: 12345678-1234-1234-1234-123456789abc
health: HEALTH_OK
services:
mon: 3 daemons, quorum mon1,mon2,mon3
osd: 9 osds: 9 up, 9 in
pgmap:
...
ceph df
-
作用:显示集群及各池容量使用情况。
-
示例:
$ ceph df
POOL_NAME USED %USED MAX_AVAIL OBJECTS
rbd 10G 5% 190G 1000
ceph-demo 2G 1% 190G 100
ceph osd tree
-
作用:显示 OSD 树结构,包括 host、rack、root 层级信息。
-
示例:
$ ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 1.0 root default
-3 0.3 host host1
0 hdd 0.1 osd.0 up 1.0 1.0
ceph osd tree | grep -E 'rack|root|host'
-
作用:筛选 OSD 树中层级信息(rack/root/host)。
-
示例:
-1 1.0 root default
-3 0.3 host host1
ceph node ls
ceph node ls | grep cn
-
作用:列出 Ceph 节点信息,可通过
grep筛选特定节点。 -
示例:
[{"name": "mon1", "type": "mon"}, {"name": "osd1", "type": "osd"}]
ceph mon dump
-
作用:列出 MON 节点详细信息,包括 quorum 状态。
-
示例:
dumped monmap epoch 5
epoch 5
fsid 12345678-1234-1234-1234-123456789abc
last_changed 12345
created 12340
0: mon1@10.0.0.1:6789/0 mon2@10.0.0.2:6789/0 mon3@10.0.0.3:6789/0
quorum 0,1,2 mon1,mon2,mon3
2️⃣ 创建与管理池
ceph osd lspools
-
作用:列出当前所有 Ceph Pool。
-
示例:
0 rbd
1 ceph-demo
ceph osd pool create ceph-demo 128 128
-
作用:创建池
ceph-demo。 -
参数说明:
-
第一个
128:PG 数量。 -
第二个
128:PGP 数量。
-
-
示例:
pool 'ceph-demo' created
rbd pool init ceph-demo
-
作用:初始化池
ceph-demo,使其可用于 RBD。 -
示例:
rbd pool 'ceph-demo' initialized
ceph osd pool get ceph-demo all
-
作用:查看池的所有配置参数。
-
示例:
pool ceph-demo size: 3 min_size: 1 crush_rule: 0
ceph osd pool stats -p ceph-demo
-
作用:显示池的统计信息,如读写请求数、流量等。
-
示例:
pool ceph-demo: client io 1024 KB/s r=512 w=512 op/s
二、权限管理
ceph auth list
ceph auth list | less
-
作用:列出 Ceph 用户及权限信息。
-
示例:
client.admin auth key=AQ...== mon 'allow *' osd 'allow *'
cat /etc/ceph/ceph.client.admin.keyring
-
作用:查看 admin keyring 内容。
ceph auth add client.admin mon 'allow r' osd 'allow rwx pool=rbd'
-
作用:新增用户
client.admin并授权访问rbd池。 -
参数:
-
mon 'allow r':允许读取 MON 数据。 -
osd 'allow rwx pool=rbd':允许对rbd池读写执行操作。
-
-
示例:
added key for client.admin
ceph auth get client.admin
-
作用:查看 client.admin 权限信息。
echo -n 'AQDUR8VdzFVpFxAAguWKux1d1j6m4fkMFMGo6A==' | base64
-
作用:将密钥转换为 Base64 编码。
-
示例:
QVFEVVI4VnpkZlZQc0Z4QUFndVdLdXgxZDFqNm00ZmtNRk1HbzZBPT0=
三、硬件信息
lspci -vvv | grep -i "sata\|scsi\|ide\|nvme"
-
作用:查看存储设备信息,包括 SATA/SCSI/IDE/NVMe。
-
示例:
00:1f.2 SATA controller: Intel Corporation Device 1234 (rev 02)
01:00.0 Non-Volatile memory controller: Samsung Electronics NVMe SSD
四、Mgr 模块与 Prometheus 配置
ceph mgr module enable prometheus
-
作用:启用 Prometheus 监控模块。
ceph config set mgr mgr/prometheus/rbd_stats_pools glance,cinder,nova
-
作用:设置 Prometheus 监控 RBD 池列表。
-
示例:
updated mgr module config
ceph mgr module enable rbd_support
-
作用:启用 RBD 支持模块,用于性能统计和高级操作。
ceph df
ceph osd pool stats
-
作用:查看池使用情况及统计信息。
rbd perf image iotop -p ceph-demo
-
作用:RBD 镜像 IO 性能统计。
-
示例:
image: csi-vol-123456
r/s: 100 w/s: 50 rd_kB/s: 1024 wr_kB/s: 512
ceph config set mgr mgr/prometheus/rbd_stats_pools ceph-demo,fs_data
-
作用:更新 Prometheus 监控的 RBD 池列表。
五、OSD 管理与性能优化
ceph osd tree | grep -E 'rack|root|host'
-
作用:查看 OSD 树层级。
ceph tell osd.* injectargs --osd_map_cache_size 50
-
作用:调整所有 OSD 的 OSD Map 缓存大小。
-
参数说明:
-
osd_map_cache_size:OSD map 缓存大小,默认 10,可增大提升性能。
-
ceph osd pool stats -p ceph-demo
-
作用:查看池统计。
六、RBD 镜像操作
1️⃣ 镜像列表与信息
rbd ls ceph-demo
rbd ls
rbd ls ceph-demo | grep csi-vol-652f285d-9f18-408f-84c5-30e08c891de2
rbd info csi-vol-652f285d-9f18-408f-84c5-30e08c891de2
rbd info ceph-demo/csi-vol-652f285d-9f18-408f-84c5-30e08c891de2
rbd showmapped
-
作用:列出镜像、查看镜像信息、已映射镜像。
-
示例:
$ rbd ls ceph-demo
csi-vol-652f285d-9f18-408f-84c5-30e08c891de2
2️⃣ 映射与挂载
rbd map <image>
rbd unmap /dev/rbd0
rbd mount <image> /mnt/<mount>
rbd unmount /mnt/<mount>
-
作用:映射/取消映射、挂载/卸载 RBD 镜像。
3️⃣ Watcher 与 OMAP 查询
rados -p ceph-demo listwatchers rbd_data.<id>
rados -p ceph-demo listomapvals rbd_header.<id>
rados -p ceph-demo ls | grep <id>
rados -p ceph-demo ls | xargs -L 1 rados -p ceph-demo listwatchers
-
作用:查看 RBD 镜像 watchers、OMAP 值、对象列表。
七、RBD 快照与克隆
rbd snap create ceph-demo/<image>@<snapname>
rbd snap ls ceph-demo/<image>
rbd snap protect ceph-demo/<image>@<snapname>
rbd snap unprotect ceph-demo/<image>@<snapname>
rbd snap rm ceph-demo/<image>@<snapname>
rbd clone ceph-demo/<image>@<snapname> ceph-demo/<clone_image>
-
作用:创建、列出、保护、解除保护、删除快照,基于快照克隆新镜像。
八、RBD Trash 回收
rbd trash ls
rbd trash restore ceph-demo/<image>@<snapname>
rbd trash purge
-
作用:列出 Trash 中的镜像、恢复、永久删除。
九、RADOS 对象操作
rados -p ceph-demo ls
rados -p ceph-demo get <object> <file>
rados -p ceph-demo put <object> <file>
rados -p ceph-demo listwatchers <object>
rados -p ceph-demo listomapvals <omap_object>
-
作用:列出对象、下载、上传、查询 watchers 与 OMAP 值。
十、OSD 日志与性能监控
ceph osd perf
ceph osd df
ceph osd dump
ceph osd find <osd>
-
作用:OSD 性能、容量、配置信息查询。
十一、完整运维用例(整合你的实际操作顺序)
# 查看池
ceph osd lspools
# 创建池
ceph osd pool create ceph-demo 128 128
rbd pool init ceph-demo
ceph osd lspools
# 权限管理
ceph auth list
ceph auth list | less
cat /etc/ceph/ceph.client.admin.keyring
ceph auth add client.admin mon 'allow r' osd 'allow rwx pool=rbd'
ceph auth list
ceph auth get client.admin
echo -n 'AQDUR8VdzFVpFxAAguWKux1d1j6m4fkMFMGo6A==' | base64
ceph mon dump
ceph auth get client.admin
# 硬件信息
lspci -vvv | grep -i "sata\|scsi\|ide\|nvme"
# MGR 模块与 Prometheus
ceph mgr module enable prometheus
ceph -s
ceph config set mgr mgr/prometheus/rbd_stats_pools glance,cinder,nova
ceph mgr module enable rbd_support
ceph df
ceph osd pool stats
rbd perf image iotop -p ceph-demo
ceph config set mgr mgr/prometheus/rbd_stats_pools ceph-demo,fs_data
# OSD 管理与性能
ceph osd tree | grep -E 'rack|root|host'
ceph tell osd.* injectargs --osd_map_cache_size 50
ceph osd pool stats -p ceph-demo
rbd perf image iotop -p ceph-demo
# RBD 镜像操作
rbd ls ceph-demo
rbd info ceph-demo/<image>
rbd showmapped
rados -p ceph-demo listwatchers rbd_data.<id>
rados -p ceph-demo listomapvals rbd_header.<id>
明白,你想弄清楚 ceph/rados 下的两个命令:listomapvals 和 listwatchers 的区别。我们来详细分析一下,官方行为和使用场景都解释清楚。
1️⃣ rados listomapvals
命令格式:
rados -p <pool> listomapvals <omap_object>
作用:
-
查询 OMAP(Object Map)对象 中的所有键值对。
-
OMAP 是 Ceph 对象的 键值存储,RBD、CephFS 等会把镜像元数据、快照信息、锁信息存储在 OMAP 对象中。
-
适用于:查看 RBD 镜像的 header 信息、块信息、元数据等。
参数说明:
-
<pool>:对象所在的 Pool。 -
<omap_object>:OMAP 对象名,如rbd_header.<image_id>。
示例:
# 查看 RBD 镜像的 OMAP 内容
rados -p ceph-demo listomapvals rbd_header.csi-vol-652f285d-9f18-408f-84c5-30e08c891de2
# 输出类似:
key: id value: 12345678
key: snap_seq value: 5
key: stripe_unit value: 4096
总结:
-
返回对象的键值对,更偏向 “内容/状态” 查询。
-
常用于 RBD 镜像元数据、块布局、快照序号等查询。
2️⃣ rados listwatchers
命令格式:
rados -p <pool> listwatchers <object>
作用:
-
查询指定对象的 watcher 列表。
-
Watcher 是 Ceph 对象的一种 订阅机制,客户端可以在对象上注册 watcher,当对象或 OMAP 被修改时,Ceph 会通知客户端。
-
适用于:RBD 镜像的 lock/watch 管理、客户端同步检测、保护快照或 I/O 流程。
参数说明:
-
<pool>:对象所在 Pool。 -
<object>:对象名,如rbd_data.<id>或rbd_header.<id>。
示例:
# 查看镜像 watchers
rados -p ceph-demo listwatchers rbd_data.csi-vol-652f285d-9f18-408f-84c5-30e08c891de2
# 输出类似:
watcher: client.admin session 12345 epoch 2 addr 10.0.0.1:0
watcher: client.k8s session 12346 epoch 2 addr 10.0.0.2:0
总结:
-
返回对象的监视客户端列表,偏向 “谁在关注/锁定”。
-
常用于排查 RBD 镜像被哪些客户端映射、是否被 lock,避免误删除或快照冲突。
3️⃣ 核心区别总结
| 方面 | listomapvals | listwatchers |
|---|---|---|
| 对象类型 | OMAP 对象 | 普通对象(也可是 OMAP) |
| 返回内容 | 键值对 | 订阅/监视客户端列表 |
| 用途 | 查询元数据、状态信息 | 查询谁在观察或锁定对象 |
| RBD 场景 | rbd_header.<id> 保存镜像元数据 |
rbd_data.<id> 查看镜像 watchers |
| 典型场景 | 查看快照序号、块布局、镜像属性 | 检查镜像被哪些客户端映射、排查 lock 冲突 |
istomapvals 和 listwatchers 的区别。我们来详细分析一下,官方行为和使用场景都解释清楚。
1️⃣ rados listomapvals
命令格式:
rados -p <pool> listomapvals <omap_object>
作用:
-
查询 OMAP(Object Map)对象 中的所有键值对。
-
OMAP 是 Ceph 对象的 键值存储,RBD、CephFS 等会把镜像元数据、快照信息、锁信息存储在 OMAP 对象中。
-
适用于:查看 RBD 镜像的 header 信息、块信息、元数据等。
参数说明:
-
<pool>:对象所在的 Pool。 -
<omap_object>:OMAP 对象名,如rbd_header.<image_id>。
示例:
# 查看 RBD 镜像的 OMAP 内容
rados -p ceph-demo listomapvals rbd_header.csi-vol-652f285d-9f18-408f-84c5-30e08c891de2
# 输出类似:
key: id value: 12345678
key: snap_seq value: 5
key: stripe_unit value: 4096
总结:
-
返回对象的键值对,更偏向 “内容/状态” 查询。
-
常用于 RBD 镜像元数据、块布局、快照序号等查询。
2️⃣ rados listwatchers
命令格式:
rados -p <pool> listwatchers <object>
作用:
-
查询指定对象的 watcher 列表。
-
Watcher 是 Ceph 对象的一种 订阅机制,客户端可以在对象上注册 watcher,当对象或 OMAP 被修改时,Ceph 会通知客户端。
-
适用于:RBD 镜像的 lock/watch 管理、客户端同步检测、保护快照或 I/O 流程。
参数说明:
-
<pool>:对象所在 Pool。 -
<object>:对象名,如rbd_data.<id>或rbd_header.<id>。
示例:
# 查看镜像 watchers
rados -p ceph-demo listwatchers rbd_data.csi-vol-652f285d-9f18-408f-84c5-30e08c891de2
# 输出类似:
watcher: client.admin session 12345 epoch 2 addr 10.0.0.1:0
watcher: client.k8s session 12346 epoch 2 addr 10.0.0.2:0
总结:
-
返回对象的监视客户端列表,偏向 “谁在关注/锁定”。
-
常用于排查 RBD 镜像被哪些客户端映射、是否被 lock,避免误删除或快照冲突。
3️⃣ 核心区别总结
| 方面 | listomapvals | listwatchers |
|---|---|---|
| 对象类型 | OMAP 对象 | 普通对象(也可是 OMAP) |
| 返回内容 | 键值对 | 订阅/监视客户端列表 |
| 用途 | 查询元数据、状态信息 | 查询谁在观察或锁定对象 |
| RBD 场景 | rbd_header.<id> 保存镜像元数据 |
rbd_data.<id> 查看镜像 watchers |
| 典型场景 | 查看快照序号、块布局、镜像属性 | 检查镜像被哪些客户端映射、排查 lock 冲突 |
💡 小结:
-
如果你想知道镜像内部状态、元数据 → 用
listomapvals。 -
如果你想知道镜像被谁映射/锁定/订阅 → 用
listwatchers。
浙公网安备 33010602011771号