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

局部截取_20250916_101444

 

您好!这是一个非常好的问题,它揭示了 Ceph 配置管理中一个关键但容易混淆的区别。

​核心答案:​

ceph config dump 显示的是配置项的​​来源和最终生效值​​,而 ceph config get 命令用于从​​特定的配置实体(entity)​​ 上读取某个配置项。globaldump 输出中是一个配置项的​​来源标签​​,但它本身并不是一个可以被 get 命令直接查询的​​配置实体​​。

下面是详细的解释:

1. ceph config dump 在做什么?

这条命令展示的是集群中所有​​已明确设置并生效​​的配置项列表。
在它的输出中,WHO 这一列表示的是​​该配置项在哪个层级被设置​​的。

  • WHO 显示为 global 时,意味着这个配置项是在全局(global)层级被设置的,它对所有类型的守护进程(OSD, MON, MGR, MDS)都生效。
  • WHO 显示为 osd 时,意味着这个配置项是在所有 OSD 守护进程的层级被设置的,它会覆盖掉 global 层级为 OSD 设置的相同配置。
  • WHO 显示为 osd.0 时,意味着这个配置项是专门为 osd.0 这个特定守护进程设置的,它的优先级最高,会覆盖 globalosd 层级的相同配置。

所以,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 类型。

  1. ​获取对所有 OSD 生效的值​​(继承自 global 并可能被 osd 层级覆盖):

    ceph config get osd osd_pool_default_size
  2. ​获取对特定 OSD(如 osd.0)生效的值​​(优先级最高,综合了所有层级):

    ceph config get osd.0 osd_pool_default_size

​总结一下:​
ceph config dump 中的 global 是一个​​来源(source)​​,告诉你配置项是从哪来的。而 ceph config get 命令需要一个​​目标(target)​​ 实体来查询。由于 global 是来源而非目标实体,所以第二个命令会失败。您需要向正确的目标实体(如 osdosd.0) 查询配置值。

posted @ 2025-09-16 10:14  mofy  阅读(17)  评论(0)    收藏  举报