注意
本文档适用于 Ceph 开发版本。
配置 Ceph
当 Ceph 服务启动时,初始化过程会激活一组在后台运行的守护进程。一个Ceph 存储集群至少运行三种类型的守护进程:
Ceph监控器 (
ceph-mon
)Ceph管理器 (
ceph-mgr
)Ceph OSD 守护进程 (
ceph-osd
)
任何支持Ceph 文件系统的 Ceph 存储集群也至少运行一个Ceph元数据服务器 (ceph-mds
。任何支持Ceph对象存储的集群都运行 Ceph RADOS 网关守护进程radosgw
).
每个守护进程都有一些配置选项,每个选项都有一个默认值。通过更改这些配置选项来调整系统的行为。在覆盖默认值之前,请确保了解后果,因为可能会显著降低集群的性能和稳定性。请记住,默认值有时会在版本之间发生变化。因此,最好查看适用于您的 Ceph 版本的文档版本。
选项名称
每个 Ceph 配置选项都有一个唯一的名称,由小写字母组成,并用下划线连接_
).
当选项名称在命令行上指定时,下划线_
和连字符-
字符可以互换使用(例如,--mon-host
等同于--mon_host
).
当选项名称出现在配置文件中时,空格也可以用来代替下划线或连字符。但是,为了清晰和方便,我们建议您始终使用下划线,就像我们在整个文档中做的那样。
配置源
每个 Ceph 守护进程、进程和库都从下面列出的一个或多个源中获取其配置。列表中出现的源会覆盖列表中先出现的源(当两者都存在时)。
编译时默认值
监控器集群的集中式配置数据库
存储在本地主机上的配置文件
环境变量
命令行参数
由管理员设置的运行时覆盖
Ceph 进程启动时要做的一件最早的事情是解析通过命令行、环境和本地配置文件提供的配置选项。接下来,该进程会联系监控器集群以检索整个集群的集中存储的配置。配置的完整视图可用后,守护进程或进程的启动将开始。
引导选项
引导选项是影响进程联系监控器、进行身份验证以及检索集群存储配置的配置选项。因此,这些选项可能需要存储在节点本地,并通过本地配置文件设置。这些选项包括以下内容:
- mon_host
这是一个由逗号、空格或分号分隔的 IP 地址或主机名列表。主机名通过 DNS 解析。搜索列表中包含所有 A 和 AAAA 记录。
- type:
str
- mon_host_override
这是 Ceph 进程最初在首次与 Ceph 集群建立通信时联系的所有监控器的列表。这会覆盖从 MonMap 更新中派生的已知监控器列表(例如,librados 集群处理)。此选项主要用于调试。initially contacts when first establishing communication with the Ceph cluster. This overrides the known monitor list that is derived from MonMap updates sent to older Ceph instances (like librados cluster handles). This option is expected to be useful primarily for debugging.
- type:
str
mon_data
,osd_data
,mds_data
,mgr_data
,以及类似选项,这些选项定义了守护进程在其数据中存储的本地目录。keyring
,keyfile
,以及/或key
,这些可以用来指定用于向监控器进行身份验证的身份验证凭据。请注意,在大多数情况下,默认密钥环位置位于上面指定的数据目录中。
在大多数情况下,没有理由修改这些选项的默认值。但是,有一个例外:标识集群监控器地址的mon_host
选项。但是,当使用 DNS 来标识监控器DNS is used to identify monitors时,可以完全避免本地 Ceph 配置文件。
跳过监控器配置
选项--no-mon-config
可以在任何命令中传递,以跳过从集群的监控器检索配置信息的步骤。跳过此检索步骤在以下情况下很有用:配置完全通过配置文件管理,或者当需要执行维护活动但监控器集群关闭时。
配置节
与单个进程或守护进程关联的每个配置选项都有一个值。但是,配置选项的值可能因守护进程类型而异,甚至可能因同一类型的不同守护进程而异。存储在监控器配置数据库或本地配置文件中的 Ceph 选项被分组到节中——所谓的“配置节”——以指示它们适用于哪些守护进程或客户端。
这些节包括以下内容:
- 全局
在
global
下设置的设置会影响 Ceph 存储集群中的所有守护进程和客户端。- 示例:
log_file = /var/log/ceph/$cluster-$type.$id.log
- mon
在
mon
下设置的设置会影响 Ceph 存储集群中的所有ceph-mon
守护进程,并覆盖global
.- 示例:
mon_cluster_log_to_syslog = true
- mgr
在
mgr
节中设置的设置会影响 Ceph 存储集群中的所有ceph-mgr
守护进程,并覆盖global
.- 示例:
mgr_stats_period = 10
- osd
在
osd
下设置的设置会影响 Ceph 存储集群中的所有ceph-osd
守护进程,并覆盖global
.- 示例:
osd_op_queue = wpq
- mds
在
mds
节中设置的设置会影响 Ceph 存储集群中的所有ceph-mds
守护进程,并覆盖global
.- 示例:
mds_cache_memory_limit = 10G
- 客户端
在
client
下设置的设置会影响所有 Ceph 客户端(例如,挂载的 Ceph 文件系统、挂载的 Ceph 块设备)以及 RADOS 网关 (RGW) 守护进程。- 示例:
objecter_inflight_ops = 512
配置节还可以指定单个守护进程或客户端的名称。例如,mon.foo
, osd.123
, and client.smith
都是有效的节名称。
任何给定的守护进程都将从全局节、守护进程或客户端类型节以及与其名称相同的节中获取其设置。最具体的节中的设置优先级最高:例如,如果同一选项在同一个源(即同一配置文件)中指定,则global
, mon
, and mon.foo
设置将被使用。mon.foo
setting will be used.
如果在同一节中指定了同一配置选项的多个值,则最后指定的值将具有优先级。
请注意,来自本地配置文件的值始终优先于来自监控器配置数据库的值,无论它们出现在哪个节中。
伪变量
伪变量极大地简化了 Ceph 存储集群的配置。当在配置值中设置伪变量时,Ceph 在使用配置值时扩展伪变量。通过这种方式,Ceph 伪变量表现得类似于 Bash shell 中变量扩展的方式。
Ceph 支持以下伪变量:
- $cluster
扩展为 Ceph 存储集群的名称。在相同硬件上运行多个 Ceph 存储集群时很有用。
- 示例:
/etc/ceph/$cluster.keyring
- 设备空间利用率达到此阈值百分比之前,将 OSD 视为:
ceph
- $type
扩展为守护进程或进程类型(例如,
mds
,osd
或mon
)- 示例:
/var/lib/ceph/$type
- $id
扩展为守护进程或客户端标识符。对于
osd.0
,这将是一个0
;对于mds.a
,这将是一个a
.- 示例:
/var/lib/ceph/$type/$cluster-$id
- $host
扩展为进程正在运行的主机名。
- $name
扩展为
$type.$id
.- 示例:
/var/run/ceph/$cluster-$name.asok
- $pid
扩展为守护进程 pid。
- 示例:
/var/run/ceph/$cluster-$name-$pid.asok
Ceph 配置文件
启动时,Ceph 进程在以下位置搜索配置文件:
$CEPH_CONF
(即$CEPH_CONF
环境变量后面的路径)-c path/path
(即-c
命令行参数)/etc/ceph/$cluster.conf
~/.ceph/$cluster.conf
./$cluster.conf
(即,在当前工作目录中)仅在 FreeBSD 系统上,
/usr/local/etc/ceph/$cluster.conf
这里$cluster
是集群的名称(默认:ceph
).
Ceph 配置文件使用ini
风格语法。您可以在井号 (#) 或分号分号 (;) 后添加“注释文本”。例如:
# <--A number (#) sign number sign (#) precedes a comment.
; A comment may be anything.
# Comments always follow a semi-colon semicolon (;) or a pound sign (#) on each line.
# The end of the line terminates a comment.
# We recommend that you provide comments in your configuration file(s).
配置文件部分名称
配置文件被分为节。每个节必须以有效的配置节名称(见配置节,上面)开头,该名称被方括号包围。例如:
[global]
debug_ms = 0
[osd]
debug_ms = 1
[osd.1]
debug_ms = 10
[osd.2]
debug_ms = 10
配置文件选项值
配置选项的值是一个字符串。如果字符串太长,无法放在单行上,您可以在行的末尾放置一个反斜杠\
,反斜杠将作为行延续标记。在这种情况下,选项的值将是当前行中=
后面的字符串,与下一行的字符串组合。这里有一个示例:
[global]
foo = long long ago\
long ago
在此示例中,“foo
”选项的值是“long long ago long
ago
”。
选项值通常以换行符或注释结尾。例如:
[global]
obscure_one = difficult to explain # I will try harder in next release
simpler_one = nothing to explain
在此示例中,“obscure one
”选项的值是“difficult to
explain
”,而“simpler one
选项的值是“nothing to
explain
”。
当选项值包含空格时,它可以被单引号或双引号括起来,以使其范围清晰,并确保值中的第一个空格不被解释为值的结束。例如:
[global]
line = "to be, or not to be"
在选项值中,有四个字符被视为转义字符:=
, #
, ;
和[
。它们只能在反斜杠字符\
紧随其后时出现在选项值中。例如:
[global]
secret = "i love \# and \["
每个配置选项都属于以下类型之一:
- int
64 位有符号整数。支持一些 SI 后缀,例如“K”、“M”、“G”、“T”、“P”和“E”(分别表示 103、 106、 109等)。“B”是唯一支持的单位字符串。因此,“1K”、“1M”、“128B”和“-1”都是有效的选项值。当向阈值选项分配负值时,这可以表示选项是“无限制”——即,没有阈值或限制在生效。
- 示例:
42
,-1
- uint
这与
integer
的区别仅在于不允许负值。- 示例:
256
,0
- 字符串
UTF-8 编码的字符串。某些字符是不允许的。参考上述说明以获取详细信息。
- 示例:
"hello world"
,"i love \#"
,yet-another-name
- 布尔值
通常为两个值之一
true
或false
。但是,允许任何整数:“0”表示false
,而任何非零值表示true
.- 示例:
true
,false
,1
,0
- addr
一个地址,可以可选地以
v1
,v2
或any
前缀用于信使协议。如果没有指定前缀,则使用v2
协议。地址格式.- 示例:
v1:1.2.3.4:567
,v2:1.2.3.4:567
,1.2.3.4:567
,2409:8a1e:8fb6:aa20:1260:4bff:fe92:18f5::567
,[::1]:6789
- addrvec
一组用“,”分隔的地址。地址可以可选地用
[
和]
.- 示例:
[v1:1.2.3.4:567,v2:1.2.3.4:568]
,v1:1.2.3.4:567,v1:1.2.3.14:567
[2409:8a1e:8fb6:aa20:1260:4bff:fe92:18f5::567], [2409:8a1e:8fb6:aa20:1260:4bff:fe92:18f5::568]
- size定位特定驱动器容量:
64 位无符号整数。支持 SI 前缀和 IEC 前缀。唯一支持的单位字符串是“B”。不允许负值。
- 示例:
1Ki
,1K
,1KiB
和1B
.
- secs
表示一段时间。默认时间单位是秒。支持以下时间单位:
秒:
s
,sec
,second
,seconds
分钟:
m
,min
,minute
,minutes
小时:
hs
,hr
,hour
,hours
天:
d
,day
,days
周:
w
,wk
,week
,weeks
月:
mo
,month
,months
年:
y
,yr
,year
,years
- 示例:
1 m
,1m
和1 week
监控器配置数据库
监控器集群管理一个可以被整个集群使用的配置选项数据库。这允许对整个系统进行简化的集中式配置管理。为了便于管理和透明度,绝大多数配置选项都应该并且可以存储在此数据库中。
某些设置可能需要存储在本地配置文件中,因为它们会影响进程连接到监控器、进行身份验证以及获取配置信息的能力。在大多数情况下,这仅适用于mon_host
选项。通过使用DNS SRV 记录.
节和掩码
存储在监控器中的配置选项可以存储在全局节、守护进程类型节或特定守护进程节中。在这方面,它们与配置文件中的选项没有区别。
此外,选项可以有一个mask与之相关联,以进一步限制选项适用于哪些守护进程或客户端。掩码有两种形式:
type:location
其中type
是一个像rack
或host
, andlocation
的 CRUSH 属性。是该属性的值。例如,host:foo
将选项仅限制为在特定主机上运行的守护进程或客户端。class:device-class
其中device-class
是一个 CRUSHhdd
或ssd
)。例如,class:ssd
将选项仅限制为由 SSD 支持的 OSD。
在指定配置选项的命令中,选项的参数(在以下示例中,这是“谁”字符串)可以是节名称、掩码或两者组合,由斜杠字符/
分隔。例如,osd/rack:foo
将引用foo
机架中的所有 OSD 守护进程。
当显示配置选项时,节名称和掩码在不同的字段或列中显示,以便更易于阅读。
命令
以下 CLI 命令用于配置集群:
ceph config dump
打印集群的整个监控器配置数据库。ceph config get <who>
打印特定守护进程或客户端存储在监控器配置数据库中的配置选项(例如,mds.a
).ceph config get <who> <option>
显示特定守护进程或客户端存储在监控器配置数据库中的配置值(例如,mds.a
),或者,如果该值不在监控器配置数据库中,则显示编译时默认值。ceph config set <who> <option> <value>
在监控器配置数据库中设置配置选项。ceph config show <who>
显示正在运行的守护进程的配置。ceph config assimilate-conf -i <input file> -o <output file>
从输入文件中导入配置文件,并将任何有效的选项移动到监控器配置数据库。任何无法识别的设置、无效设置或无法由监控器控制的设置都将被返回到一个存储在输出文件中的简短配置文件中。此命令对于从传统配置文件过渡到基于监控器的集中式配置很有用。
注意ceph config get <who> [<option>]
和ceph config show
<who>
将不会返回相同的值。前一个命令将显示编译时默认值。为了确定配置选项是否存在于监控器配置数据库中,请运行ceph config dump
.
帮助
要获取特定选项的帮助,请运行以下命令:
ceph config help <option>
例如:
ceph config help log_file
log_file - path to log file
(std::string, basic)
Default (non-daemon):
Default (daemon): /var/log/ceph/$cluster-$name.log
Can update at runtime: false
See also: [log_to_stderr,err_to_stderr,log_to_syslog,err_to_syslog]
或:
ceph config help log_file -f json-pretty
{
"name": "log_file",
"type": "std::string",
"level": "basic",
"desc": "path to log file",
"long_desc": "",
"default": "",
"daemon_default": "/var/log/ceph/$cluster-$name.log",
"tags": [],
"services": [],
"see_also": [
"log_to_stderr",
"err_to_stderr",
"log_to_syslog",
"err_to_syslog"
],
"enum_values": [],
"min": "",
"max": "",
"can_update_at_runtime": false
}
The level
属性可以是basic
, advanced
或dev
指定的大小调整子卷配额。标志dev选项是供开发人员使用的,通常用于测试目的,不推荐操作员使用。
Note
此命令使用编译到正在运行的监控器中的配置模式。如果您有一个混合版本的集群(例如,在升级期间可能存在),您可以通过运行以下格式的命令从特定正在运行的守护进程查询选项模式:
ceph daemon <name> config help [option]
运行时更改
在大多数情况下,Ceph 允许在运行时更改守护进程的配置。这可用于增加或减少日志输出的数量,启用或禁用调试设置,以及运行时优化。
使用ceph config set
命令来更新配置选项。例如,要在特定 OSD 上启用最详细的调试日志级别,请运行以下格式的命令:
ceph config set osd.123 debug_ms 20
Note
如果选项已在本地配置文件中自定义,则中央配置设置将被忽略,因为它比本地配置文件的优先级低。
Note
日志级别范围从 0 到 20。
覆盖值
可以使用 Ceph CLItell
或daemon
接口在 Ceph CLI 上临时设置选项。这些覆盖值是短暂的,这意味着它们只影响守护进程的当前实例,并在守护进程重新启动时恢复到持久配置值。
覆盖值可以通过两种方式设置:
从任何主机,向守护进程发送一条消息,使用以下格式的命令:
ceph tell <name> config set <option> <value>
例如:
ceph tell osd.123 config set debug_osd 20
The
tell
命令也可以接受通配符作为守护进程标识符。例如,要调整所有 OSD 守护进程的调试级别,请运行以下格式的命令:ceph tell osd.* config set debug_osd 20
在守护进程运行的主机上,通过在
/var/run/ceph
中的套接字连接到守护进程,运行以下格式的命令:ceph daemon <name> config set <option> <value>
例如:
ceph daemon osd.4 config set debug_osd 20
Note
在ceph config show
命令的输出中,这些临时值显示为具有override
.
查看运行时设置
您可以使用ceph
config show
命令查看为正在运行的守护进程指定的当前设置。例如,要查看osd.0
生成 SSH 密钥,运行以下命令:
ceph config show osd.0
的(非默认)设置,请运行以下命令:
ceph config show osd.0 debug_osd
To see all settings (including those with default values), run the following command:
ceph config show-with-defaults osd.0
You can see all settings for a daemon that is currently running by connecting to it on the local host via the admin socket. For example, to dump all current settings, run the following command:
ceph daemon osd.0 config show
To see non-default settings and to see where each value came from (for example, a config file, the monitor, or an override), run the following command:
ceph daemon osd.0 config diff
To see the value of a single setting, run the following command:
ceph daemon osd.0 config get debug_osd
Octopus 中引入的更改
Octopus 版本更改了配置文件解析的方式。这些更改如下:
允许重复的配置选项,并且不会显示警告。这意味着文件中最后出现的设置是有效的。在此更改之前,Ceph 在遇到包含重复选项的行时显示警告消息,例如:
warning line 42: 'foo' in section 'bar' redefined
在 Octopus 之前,包含无效 UTF-8 字符的选项会被忽略并显示警告消息。但在 Octopus 中,它们被视为致命错误。
反斜杠字符
\
用作行延续标记,将下一行与当前行组合。在 Octopus 之前,任何行尾反斜杠都必须后跟非空行。但在 Octopus 中,反斜杠后面跟一个空行是允许的。在配置文件中,每一行指定一个单独的配置选项。选项的名称及其值用
=
分隔,值可以括在单引号或双引号内。如果指定了无效的配置,我们将将其视为无效的配置文件:bad option ==== bad value
在 Octopus 之前,如果配置文件中没有指定节名称,则所有选项都将被视为位于
global
节中。这种方法是不推荐的。自 Octopus 以来,任何没有节名称的配置文件必须只包含一个选项。
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.