ceph 配置格式与配置命令

大番茄 2020年03月09日 1,041次浏览

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-monceph-mgrceph-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选项分为几部分:

配置段作用范围备注
globalceph中所有组件与客户端
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/$type
$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进程在以下位置搜索配置文件:

  1. $CEPH_CONF (这个变量指定的配置文件)

  2. -c path/path (-c参数指定的配置文件)

  3. /etc/ceph/$cluster.conf

  4. ~/.ceph/$cluster.conf

  5. ./$cluster.conf (当前目录下的文件)

  6. 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