注意
本文档适用于 Ceph 开发版本。
配置管理系统
配置管理系统存在是为了为每个守护进程提供适当的配置信息。配置可以被视为一组键值对。
配置如何设置?嗯,有几种来源:
ceph 配置文件,通常命名为 ceph.conf
命令行参数:
--debug-ms=1 --debug-monc=10等。
在运行时注入的参数使用
injectargs
或config set
配置文件
大多数配置设置都源自 Ceph 配置文件。
我们如何找到配置文件?嗯,按顺序,我们检查:
默认位置
环境变量
CEPH_CONF
命令行参数
-c
配置文件的每个节描述了将生效于守护进程特定子集的键值对。“global”节适用于所有内容。“mon”、“osd”和“mds”节分别指定所有监控器、所有 OSD 和所有 mds 服务器的设置。形式为mon.$name
, osd.$name
或mds.$name
的节分别给出该名称的监控器、OSD 或 MDS 的设置。文件中出现的配置值会覆盖先前的值。
可以在 src/sample.ceph.conf 中找到一个示例配置文件。
伪变量
配置系统允许使用$varname
语法将任何配置值替换到另一个值中,类似于 bash shell 扩展的工作方式。
还定义了一些额外的特殊 metavariables:
$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 配置变量的唯一方法。
即使对于整数值配置选项,当一个线程在另一个线程读取它们时更改值也可能导致微妙且难以诊断的错误。
由于这些原因,直接从g_conf
读取应被视为已弃用,并且在新代码中不应这样做。永远不要更改g_conf
.
修改配置值
配置值可以通过调用g_conf()->set_val
来更改。更改配置后,您应该调用g_conf()->apply_changes
来重新运行所有受影响的配置观察者。为了方便起见,您可以调用g_conf()->set_val_or_die
来执行您认为永远不会失败的配置更改。
injectargs
, parse_argv
, and parse_env
是三个其他修改配置的函数。与 set_val 类似,调用这些函数后应调用 apply_changes 以确保您的更改被应用。
定义配置选项
配置选项在common/options/*.yaml.in
中定义。选项按其消费者进行分类。如果一个选项只由 ceph-osd 使用,它应该放在osd.yaml.in
中。所有.yaml.in
文件在构建时被转换为.cc
和.h
文件y2c.py
.
每个选项都使用 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
The level
选项的属性是操作员或开发人员调整选项可能性的指示器:
- 基本
basic:用于普通操作员可能调整的基本配置选项。
- advanced:用于操作员
for options that an operator 可以调整,但除非他们了解自己在做什么,否则不应触摸。不正确地调整高级选项可能会导致问题(性能甚至数据丢失)。 adjust, but should not touch unless they understand what they are doing. Adjusting advanced options poorly can lead to problems (performance or even data loss) if done incorrectly.
- dev
internal:用于仅供开发人员使用的选项,无论是用于测试目的,还是用于描述用户不应调整但我们宁愿不编译到代码中的常量。
desc
, long_desc
和fmt_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
对于类型为float
, size
和secs
的选项,允许使用一些文字后缀,例如:
- 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
.
Enums
对于具有定义好的允许值集的选项:
enum_values:
- none
- crc32c
- crc32c_16
- crc32c_8
- xxhash32
- xxhash64
标志
- runtime:值可以在运行时更新
守护进程/客户端不会从监控器配置数据库中拉取此值。我们不允许通过
- no_mon_update
Daemons/clients do not pull this value from the monitor config database. We disallow setting this option via
ceph config set ...
设置此选项。此选项应通过ceph.conf
或通过命令行配置。
- startup:选项仅在守护进程启动期间生效
选项仅影响集群创建
- cluster_create
选项仅影响守护进程创建
- 创建
option only affects daemon creation
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.