https://docs.ceph.com/docs/master/rados/configuration
每个Ceph进程、实用程序在启动时都会从多个来源获取其配置,包括本地配置,Monitor,命令行或环境变量。可以全局设置配置选项,以便它们应用于所有。也可以仅应用于指定的程序或客户端。
存储设备
有两个在磁盘上存储数据的Ceph守护程序:
Ceph OSD:是大多数数据存储在Ceph中的地方。其中对象存储数据与文件系统存储的元数据和数据也都是存储在OSD上面。
Ceph Monitor:管理关键的群集状态,例如群集成员身份和身份验证信息。对于较小的群集,只需要几GB的数据,尽管对于较大的群集,Monitor配置库可以达到数十或数百GB的数据。 默认应该是在/var/lib/ceph/mon
目录下。
秘钥文件
秘钥文件其实就是ceph生成的各种用户,不同的用户拥有不同的资源操作权限,在执行一些操作的时候拿着秘钥与Monitor
联系来验证身份。
安装完ceph以后,生成的这一堆keyring:
[root@cephnode1 mycluster]# ls
ceph.bootstrap-mds.keyring ceph.bootstrap-osd.keyring ceph.client.admin.keyring ceph-deploy-ceph.log
ceph.bootstrap-mgr.keyring ceph.bootstrap-rgw.keyring ceph.conf ceph.mon.keyring
这些都是ceph内部的用户, 可以使用ceph auth list
查看。
其中的ceph.client.admin.keyring
是客户端命令使用的。
其他的bootstrap
应该都是组件启动的时候用的,比如mgr
启动的时候需要注册到Monitor
里,就需要有权限写Monitor
才行。
这个目录里的key都是ceph-deploy
生成,临时放在这里的,在部署某个组件的时候,会发送到对应节点的/var/lib/ceph
下。
配置ceph
https://docs.ceph.com/docs/master/rados/configuration/ceph-conf/
ceph存储集群最少需要ceph-mon
、ceph-mgr
、ceph-osd
,组件组成,如果需要文件系统存储,还需要ceph-mds
, 对象存储radosgw
。
每个组件都有一系列的配置选项,每个配置选项都有一个默认值。
每个配置选项都有一个唯一的名称,由小写字母与_
下划线组成。
在命令行指定配置的时候,_
也可以用-
横线。
在配置文件里指定的时候也可以用空格代替-
横线或_
下划线。
配置源
每个Ceph守护进程,进程和库都从以下列出的几个来源中获取其配置。如果同时存在,则后面的覆盖前面的。
- 编译的默认值
Monitor
集群的中心配置库(几个节点的monitor也是一个集群)- 存储在本地主机上的配置文件
- 环境变量
- 命令行参数
- 管理员在程序运行时覆盖配置(应该就是动态的修改进程运行中的配置)
Ceph进程在启动时要做的第一件事就是解析命令行,环境和本地配置文件提供的配置选项。然后,与Monitor
联系,检索整个群集集中存储的配置。一旦获得完整的配置,将继续启动。
必须放在配置文件里的配置
有些配置会影响进程与Monitor
联系,来进行身份验证和检索群集存储的配置信息,因此需要将存储在本地的配置文件中,这些选项包括:
mon_host
: 集群的Monitor
节点列表mon_dns_serv_name
: 默认ceph-mon
,DNS SRV的名称,用于通过DNS查找Monitor
。mon_data, osd_data, mds_data, mgr_data
: 类似的需要在本地存储一些数据的选项。keyring, keyfile, key
: 指定与Monitor
联系的凭据秘钥。默认在上面指定的数据目录里。
上面的mon_host
是必须指定的, 其他的可以默认。
跳过检索Monitor
中的配置
可以向任何进程传递选项,--no-mon-config
以跳过从Monitor
检索配置的步骤。在完全通过配置文件管理配置或Monitor
当前处于关闭状态但需要进行一些维护活动的时候很有用。
配置格式
存储在Monitor
配置库或本地配置文件中的Ceph选项分为几部分:
配置段 | 作用范围 | 备注 |
---|---|---|
global | ceph中所有组件与客户端 | |
mon | 集群中所有ceph-mon 程序 | 覆盖global 中的相同配置 |
mgr | 集群中所有ceph-mgr 程序 | 覆盖global 中的相同配置 |
osd | 集群中所有ceph-osd 程序 | 覆盖global 中的相同配置 |
mds | 集群中所有ceph-mds 程序 | 覆盖global 中的相同配置 |
client | 集群中所有ceph客户端以及RGW (radosgw)程序 |
部分还可以对指定节点中的程序做配置。
如mon
的:
mon.cephnode1
,mon.cephnode2
。
可以用ceph mon dump
获取节点的名称。
[root@cephnode1 ~]# ceph mon dump
dumped monmap epoch 4
epoch 4
fsid d5f060f7-3b0e-468e-857b-7cc592d3a94c
last_changed 2020-03-05 19:01:13.335504
created 2020-03-05 16:48:38.553755
min_mon_release 14 (nautilus)
0: [v2:172.100.102.91:3300/0,v1:172.100.102.91:6789/0] mon.cephnode1
1: [v2:172.100.102.92:3300/0,v1:172.100.102.92:6789/0] mon.cephnode2
2: [v2:172.100.102.93:3300/0,v1:172.100.102.93:6789/0] mon.cephnode3
客户端的:
client.cephnode1
,client.cephnode2
osd
的:
osd.1
, osd.2
。 数字是osd的id, 可以用ceph osd dump
查看osd
的信息。
注意: 指定节点或是id的配置,会覆盖mon
,client
,osd
里的相同配置。
变量
配置可以使用一些内置的变量。如:
log_file = /var/log/ceph/$cluster-$type.$id.log
变量名 | 描述 | 例子 |
---|---|---|
$cluster | 集群名称,默认ceph | /etc/ceph/$cluster.keyring |
$type | 组件的类型,如:mon ,mds ,osd | /var/lib/ceph/$typ e |
$id | 程序的id,如osd.1 就是1 | /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_CONF (这个变量指定的配置文件)
-
-c path/path (-c参数指定的配置文件)
-
/etc/ceph/$cluster.conf
-
~/.ceph/$cluster.conf
-
./$cluster.conf (当前目录下的文件)
-
On FreeBSD systems only, /usr/local/etc/ceph/$cluster.conf
$cluster
就是上面的变量里提到的,集群名称。
配置文件使用ini
样式。 #
,;
开头的为注释。
配置文件格式的例子,如:
[global]
[mon]
[mon.cephnode1]
[osd]
[osd.1]
[osd.2]
[client]
配置文件选项的值
有一些注意事项。
可以使用\换行。
[global]
foo = long long ago\
long ago
不能出现=,#,;和[
,一定使用需要使用\转义。
[global]
secret = "i love \# and \["
monitor
配置库
monitor
集群管理着整个集群可以使用的配置选项库, 应该把绝大多数配置存储在这里,以简化管理。
查看配置的命令
<who>
表示指定的组件,有的必须需要包含节点或者id,有的都可以,如:
ceph config get osd.1
ceph config get mon.cephnode1
ceph config get client.cephnode1
ceph config show mds.cephnode1
ceph config set client rbd_cache_max_dirty_age 10
ceph config set client.cephnode1 rbd_cache_max_dirty_age 20
ceph config dump
: 显示集群整个配置库的内容。刚开始里面没有内容,只显示菜单WHO
MASK LEVEL
OPTION
VALUE
RO
。
添加内容以后:
[root@cephnode1 mycluster]# ceph config dump
WHO MASK LEVEL OPTION VALUE RO
global advanced auth_client_required cephx *
global advanced auth_cluster_required cephx *
global advanced auth_service_required cephx *
global advanced public_network 172.100.102.0/24 *
client advanced rbd_cache_max_dirty_age 10.000000
client.cephnode1 advanced rbd_cache_max_dirty_age 20.000000
ceph config get <who>
: 显示指定组件或客户端存储在monitor
配置库中的内容。ceph config set <who> <option> <value>
: 设置配置选项到monitor
的配置库中。相应组件的运行配置也会发生改变,暂时不清楚流程。ceph config show <who>
: 显示正在运行的组件配置,因为还有配置文件,变量和命令行可以传递配置,所以 与monitor
的配置库里的内容可能会不同。ceph config assimilate-conf -i <input file> -o <output file>
: 从输入的文件中解析配置,把所有有效的配置选项存到monitor
的配置库,无法识别、无效和无法控制的配置选项存储到输出的文件里。
[root@cephnode1 mycluster]# ceph config assimilate-conf -i ceph.conf -o test.conf
2020-03-09 15:20:41.984 7f61baffd700 -1 set_mon_vals failed to set public_network = 172.100.102.0/24: Configuration option 'public_network' may not be modified at runtime
这里提示public_network
参数不能在运行中修改。 但是也存储到monitor
里了。
[root@cephnode1 mycluster]# cat test.conf
[global]
fsid = d5f060f7-3b0e-468e-857b-7cc592d3a94c
mon_host = 172.100.102.91,172.100.102.92
mon_initial_members = cephnode1, cephnode2
这些是存不进去的内容,monitor
自身的配置存不到monitor
里面。fsid应该是集群里固定的,不能当配置存储。
[root@cephnode1 mycluster]# ceph config dump
WHO MASK LEVEL OPTION VALUE RO
global advanced auth_client_required cephx *
global advanced auth_cluster_required cephx *
global advanced auth_service_required cephx *
global advanced public_network 172.100.102.0/24 *
[root@cephnode1 mycluster]#
获取帮助
ceph config help <option>
, 如:
[root@cephnode1 mycluster]# ceph config help public_network
public_network - Network(s) from which to choose a public address to bind to
(str, advanced)
Default:
Can update at runtime: false
Services: [mon,mds,osd,mgr]
Tags: [network]
[root@cephnode1 mycluster]# ceph config help log_file
log_file - path to log file
(str, basic)
Default (non-daemon):
Default (daemon): /var/log/ceph/$cluster-$name.log
Can update at runtime: false
See also: [log_to_file,log_to_stderr,err_to_stderr,log_to_syslog,err_to_syslog]
[root@cephnode1 mycluster]#
-f
显示更详细的信息:
[root@cephnode1 mycluster]# ceph config help public_network -f json-pretty
{
"name": "public_network",
"type": "str",
"level": "advanced",
"desc": "Network(s) from which to choose a public address to bind to",
"long_desc": "",
"default": "",
"daemon_default": "",
"tags": [
"network"
],
"services": [
"mon",
"mds",
"osd",
"mgr"
],
"see_also": [],
"enum_values": [],
"min": "",
"max": "",
"can_update_at_runtime": false,
"flags": [
"startup"
]
}
[root@cephnode1 mycluster]#
运行时更改配置
大多数的配置选项可以运行时动态修改。
有两种方式,一种是临时更新,程序重启失效,一种是更新运行配置并存储到monitor
配置库中。
临时生效:
https://docs.ceph.com/docs/master/rados/configuration/ceph-conf/#override-values
ceph tell <name> config set <option> <value>
ceph tell osd.123 config set debug_osd 20
# 也支持通配符
ceph tell osd.* config set debug_osd 20
或者:
ceph daemon <name> config set <option> <value>
ceph config set
, 更新配置到monitor
配置库,同时更新指定组件的运行配置,这里不知道具体的更新流程,也可能是monitor
发给对应节点的。但是如果组件进程已经有相同配置了,而且覆盖优先级比monitor
高,运行配置也就不会更新了。
如:
ceph config set osd osd_max_write_size 512
ceph config set osd.2 osd_max_write_size 256
查看monitor
里的配置:
[root@cephnode1 mycluster]# ceph config dump
WHO MASK LEVEL OPTION VALUE RO
global advanced auth_client_required cephx *
global advanced auth_cluster_required cephx *
global advanced auth_service_required cephx *
global advanced public_network 172.100.102.0/24 *
osd advanced osd_max_write_size 512
osd.2 advanced osd_max_write_size 256
client advanced rbd_cache_max_dirty_age 10.000000
client.cephnode1 advanced rbd_cache_max_dirty_age 20.000000
osd.1的运行配置:
[root@cephnode1 mycluster]# ceph config show osd.1
NAME VALUE SOURCE OVERRIDES IGNORES
auth_client_required cephx file (mon[cephx])
auth_cluster_required cephx file (mon[cephx])
auth_service_required cephx file (mon[cephx])
daemonize false override
keyring $osd_data/keyring default
leveldb_log default
mon_host 172.100.102.91,172.100.102.92 file
mon_initial_members cephnode1, cephnode2 file
osd_max_write_size 512 mon
public_network default mon
rbd_default_features 61 default
setgroup ceph cmdline
setuser ceph cmdline
osd.2:
[root@cephnode1 mycluster]# ceph config show osd.2
NAME VALUE SOURCE OVERRIDES IGNORES
auth_client_required cephx file (mon[cephx])
auth_cluster_required cephx file (mon[cephx])
auth_service_required cephx file (mon[cephx])
daemonize false override
keyring $osd_data/keyring default
leveldb_log default
mon_host 172.100.102.91,172.100.102.92 file
mon_initial_members cephnode1, cephnode2 file
osd_max_write_size 256 mon
public_network default mon
rbd_default_features 61 default
setgroup ceph cmdline
setuser ceph cmdline
查看运行时的配置
ceph config show osd.0
除了上面这个查看已经添加的配置,还可以查看所有配置(包含默认配置):
ceph config show-with-defaults osd.0