ceph 配置命令可以查询到global,但是不能获取到get到global

您好!这是一个非常好的问题,它揭示了 Ceph 配置管理中一个关键但容易混淆的区别。
核心答案:
ceph config dump 显示的是配置项的来源和最终生效值,而 ceph config get 命令用于从特定的配置实体(entity) 上读取某个配置项。global 在 dump 输出中是一个配置项的来源标签,但它本身并不是一个可以被 get 命令直接查询的配置实体。
下面是详细的解释:
1. ceph config dump 在做什么?
这条命令展示的是集群中所有已明确设置并生效的配置项列表。
在它的输出中,WHO 这一列表示的是该配置项在哪个层级被设置的。
- 当
WHO显示为global时,意味着这个配置项是在全局(global)层级被设置的,它对所有类型的守护进程(OSD, MON, MGR, MDS)都生效。 - 当
WHO显示为osd时,意味着这个配置项是在所有 OSD 守护进程的层级被设置的,它会覆盖掉global层级为 OSD 设置的相同配置。 - 当
WHO显示为osd.0时,意味着这个配置项是专门为osd.0这个特定守护进程设置的,它的优先级最高,会覆盖global和osd层级的相同配置。
所以,dump 命令中的 global 是一个来源标识,告诉你这些配置是在哪个“文件夹”里被设置的。
2. ceph config get 在做什么?
这条命令的语法是:ceph config get <ENTITY> <OPTION>
这里的 <ENTITY> 指的是一个具体的、可管理的配置实体对象,而不是一个来源标签。这些实体包括:
- 具体的守护进程:
osd.0,mon.ceph01,mgr.ceph01.xkyfnv - 守护进程类型:
osd,mon,mgr(这会返回该类型所有进程的公共配置) - 客户端:
client.admin
global 不是一个有效的配置实体。 你不能向一个叫做“global”的守护进程查询配置,因为它不存在。Ceph 的配置系统没有设计一个名为 global 的实体来让你直接查询。
举例类比
这就像一个公司的规章制度:
-
ceph config dump: 相当于列出所有规章条款,并注明每条是“总公司规定”(global)、“技术部规定”(osd)还是“张三的个人规定”(osd.0)。 -
ceph config get global osd_pool_default_size: 相当于你跑去问“总公司”这个实体:“你的osd_pool_default_size规定是什么?”但“总公司”不是一个具体的人或部门,你找不到它,所以会报错“ unrecognized entity 'global'”。 - 正确的做法:你应该去问一个具体的员工,比如“技术部”(osd)或“张三”(osd.0):“你当前执行的
osd_pool_default_size是什么?” 他们会综合总公司的规定、部门规定和自己的特殊规定,告诉你最终生效的值。
如何正确获取配置?
如果你想获取 osd_pool_default_size 这个参数最终对某个 OSD 生效的值,你应该查询具体的 OSD 实体或 OSD 类型。
-
获取对所有 OSD 生效的值(继承自 global 并可能被 osd 层级覆盖):
ceph config get osd osd_pool_default_size -
获取对特定 OSD(如 osd.0)生效的值(优先级最高,综合了所有层级):
ceph config get osd.0 osd_pool_default_size
总结一下:
ceph config dump 中的 global 是一个来源(source),告诉你配置项是从哪来的。而 ceph config get 命令需要一个目标(target) 实体来查询。由于 global 是来源而非目标实体,所以第二个命令会失败。您需要向正确的目标实体(如 osd 或 osd.0) 查询配置值。

浙公网安备 33010602011771号