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️⃣ 命令拆解

  1. 列出 Pool 中所有对象

rados --conf ./ceph/ceph.conf \
      --keyring ./ceph/ceph.client.admin.keyring \
      -p ceph-demo ls
  • 列出 ceph-demo 池中所有对象。

  • --conf 指定 Ceph 配置文件。

  • --keyring 指定 admin key。

  1. 筛选对象

| grep 30d7d697a57525
  • 只保留对象名中包含 30d7d697a57525 的对象。

  1. 对每个对象执行 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 下的两个命令:listomapvalslistwatchers 的区别。我们来详细分析一下,官方行为和使用场景都解释清楚。


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️⃣ 核心区别总结

方面listomapvalslistwatchers
对象类型 OMAP 对象 普通对象(也可是 OMAP)
返回内容 键值对 订阅/监视客户端列表
用途 查询元数据、状态信息 查询谁在观察或锁定对象
RBD 场景 rbd_header.<id> 保存镜像元数据 rbd_data.<id> 查看镜像 watchers
典型场景 查看快照序号、块布局、镜像属性 检查镜像被哪些客户端映射、排查 lock 冲突

 

istomapvalslistwatchers 的区别。我们来详细分析一下,官方行为和使用场景都解释清楚。


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️⃣ 核心区别总结

方面listomapvalslistwatchers
对象类型 OMAP 对象 普通对象(也可是 OMAP)
返回内容 键值对 订阅/监视客户端列表
用途 查询元数据、状态信息 查询谁在观察或锁定对象
RBD 场景 rbd_header.<id> 保存镜像元数据 rbd_data.<id> 查看镜像 watchers
典型场景 查看快照序号、块布局、镜像属性 检查镜像被哪些客户端映射、排查 lock 冲突

💡 小结

  • 如果你想知道镜像内部状态、元数据 → 用 listomapvals

  • 如果你想知道镜像被谁映射/锁定/订阅 → 用 listwatchers


 

posted on 2025-11-04 11:32  吃草的青蛙  阅读(5)  评论(0)    收藏  举报

导航