注意

本文档适用于 Ceph 的开发版本。

配置管理系统

配置管理系统的存在是为了为每个守护进程提供正确的配置信息。配置可以看作是一组键值对。

如何设置配置?有几个来源

  • ceph 配置文件,通常命名为 ceph.conf

  • 命令行参数

    --debug-ms=1
    --debug-monc=10
    

    等等。

  • 使用 injectargsconfig set 在运行时注入的参数

配置文件

大多数配置设置来源于 Ceph 配置文件。

我们如何找到配置文件?按顺序,我们检查

  • 默认位置

  • 环境变量 CEPH_CONF

  • 命令行参数 -c

配置文件的每个节都描述了对特定守护进程子集有效的键值对。“global” 节适用于所有内容。“mon”、“osd” 和 “mds” 节分别指定对所有 monitors、所有 OSD 和所有 mds 服务器生效的设置。形式为 mon.$nameosd.$namemds.$name 的节分别给出该名称的 monitor、OSD 或 MDS 的设置。文件中后面出现的配置值会覆盖前面出现的配置值。

可以在 src/sample.ceph.conf 中找到示例配置文件。

元变量

配置系统允许使用 $varname 语法将任何配置值替换到另一个值中,类似于 bash shell 扩展的工作方式。

还定义了一些额外的特殊元变量

  • $host: 扩展为当前主机名

  • $type: 扩展为 “mds”、“osd”、“mon” 或 “client” 之一

  • $id: 扩展为守护进程标识符。对于 osd.0,这将是 0;对于 mds.a,它将是 a;对于 client.admin,它将是 admin

  • $num: 与 $id 相同

  • $name: 扩展为 $type.$id

读取配置值

Ceph 代码有两种方法获取配置值。一种方法是直接从名为 g_conf 的变量中读取,或者等效地从 g_ceph_ctx->_conf 中读取。另一种方法是注册一个观察者,每当相关的配置值发生变化时都会调用该观察者。此观察者将在初始配置读取后不久被调用,此后每当其中一个相关值发生变化时都会调用。每个观察者跟踪一组键,并且仅当其中一个相关键发生变化时才会被调用。

要实现的接口位于 common/config_obs.h 中。

在新代码中应首选观察者方法,因为

  • 它更灵活,允许代码执行任何需要的重新初始化以实现新的配置值。

  • 这是创建可以通过 injectargs 更改的 std::string 配置变量的唯一方法。

  • 即使对于 int 值的配置选项,在一个线程中更改值而另一个线程正在读取它们也可能导致微妙且无法诊断的错误。

由于这些原因,直接从 g_conf 读取应被视为已弃用,不应在新代码中完成。切勿修改 g_conf

更改配置值

可以通过调用 g_conf()->set_val 来更改配置值。更改配置后,您应该调用 g_conf()->apply_changes 以重新运行所有受影响的配置观察者。为方便起见,您可以调用 g_conf()->set_val_or_die 来进行您认为绝不会失败的配置更改。

injectargsparse_argvparse_env 是另外三个修改配置的函数。与 set_val 一样,在调用这些函数后,您应该调用 apply_changes 以确保您的更改得到应用。

定义配置选项

配置选项定义在 common/options/*.yaml.in 中。选项按其使用者分类。如果一个选项仅由 ceph-osd 使用,它应该放在 osd.yaml.in 中。所有 .yaml.in 文件都在构建时通过 y2c.py 转换为 .cc.h 文件。

注意

Ceph-mgr 模块使用与其他 Ceph 组件相同的配置系统,但它们的配置选项是在每个模块的 Python 实现中定义的。有关定义 mgr 模块配置选项的详细信息,请参阅 配置选项

每个选项都使用 YAML 映射(字典)表示。一个典型的选项看起来像

- name: public_addr
  type: addr
  level: basic
  desc: public-facing address to bind to
  long_desc: The IP address for the public (front-side) network.
    Set for each daemon.
  services:
  - mon
  - mds
  - osd
  - mgr
  flags:
  - startup
  with_legacy: true

其中,允许以下键

level

选项的 level 属性指示操作员或开发人员调整该选项的可能性

basic

用于普通操作员可能调整的基本配置选项。

advanced

用于操作员*可以*调整的选项,但不应触碰,除非他们了解自己在做什么。如果操作不当,调整高级选项可能会导致问题(性能甚至数据丢失)。

dev

用于仅供开发人员使用的选项,用于测试目的,或描述用户不应调整但我们不想编译到代码中的常量。

desclong_descfmt_desc

desc

选项的简短描述。句子片段。例如:

desc: Default checksum algorithm to use
long_desc

长描述是完整的句子,可能包含多个段落,并且可能包含其他详细信息或注释。例如:

long_desc: crc32c, xxhash32, and xxhash64 are available.  The _16 and _8 variants use
  only a subset of the bits for more compact (but less reliable) checksumming.
fmt_desc

使用 reStructuredText 格式化的描述。此属性仅用于 confval 指令以在文档中呈现选项。例如:

fmt_desc: The interval for "deep" scrubbing (fully reading all data). The
  ``osd_scrub_load_threshold`` does not affect this setting.

默认值

每个配置选项都有一个默认值。在某些情况下,可能还有一个*守护进程默认值*,它只适用于声明自己为守护进程的代码(在这种情况下,常规默认值仅适用于非守护进程)。像

default: crc32c

对于类型为 floatsizesecs 的选项,允许使用一些文字后缀,例如

- name: mon_scrub_interval
  type: secs
  default: 1_day
- name: osd_journal_size
  type: size
  default: 5_K

为了提高可读性,鼓励在添加或更新选项的默认值时使用这些文字后缀。

服务

服务是一个组件名称,如“common”、“osd”、“rgw”、“mds”等。它可能是一个组件列表,如

services:
- mon
- mds
- osd
- mgr

例如,rocksdb 选项会影响 osd 和 mon。如果一个选项被放入特定服务的 .yaml.in 文件中,则相应的服务会自动添加到其 services 属性中。例如,osd_scrub_begin_hour 选项位于 osd.yaml.in 中,即使其 services 未在此文件中明确指定,此属性仍包含 osd

标签

标签用于识别跨服务以某种方式相关的选项。例如

network

影响网络配置的选项

mkfs

仅在 mkfs 时重要的选项

tags:
- network

枚举

对于具有一组定义的允许值的选项

enum_values:
- none
- crc32c
- crc32c_16
- crc32c_8
- xxhash32
- xxhash64

标志

runtime

该值可以在运行时更新

no_mon_update

守护进程/客户端不会从 monitor 配置数据库中拉取此值。我们禁止通过 ceph config set ... 设置此选项。此选项应通过 ceph.conf 或命令行进行配置。

startup

选项仅在守护进程启动期间生效

cluster_create

选项仅影响集群创建

create

选项仅影响守护进程创建

配置值的文档

Ceph 配置选项是使用 :confval: 指令按需记录的,而不是集中记录。

记录配置选项

要记录配置选项,请使用 :confval: 指令

The check interval can be customized by the ``check_interval`` option:

.. confval:: mgr/inbox/check_interval

注意

Ceph-mgr 模块选项必须包含 mgr/<module>/ 命名空间前缀。在上面的示例中,check_interval 属于 inbox 模块,因此它被记录为 mgr/inbox/check_interval

引用配置选项

记录后,使用 :confval: 角色引用选项

With the :confval:`mgr/inbox/check_interval` setting, you can customize the
check interval.

对于常规 Ceph 选项(非 mgr 模块),过程相同,但没有模块前缀

You can set the initial monitor members with :confval:`mon_initial_members`:

.. confval:: mon_initial_members

命名约定

  • Mgr 模块选项:使用 mgr/<module>/<option_name> 格式

  • 常规选项:直接使用选项名称(例如,mon_initial_members

这种方法确保了整个文档中一致的交叉引用,同时为不同的配置上下文维护了适当的命名空间。

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入