导读:
1.从零部署一个ceph集群
2.ceph block device与cephfs快速入门
3.ceph 对象存储快速入门
一个Ceph存储群集至少需要一个Ceph monitor
,Ceph Managers
和Ceph OSD
(对象存储守护程序)。 运行Ceph文件系统客户端时,也需要Ceph Metadata Server
。
Ceph Monitor(ceph-mon)
维护集群状态的映射,包括monitor
映射,manager
映射,OSD
映射,MDS
映射和CRUSH
映射。 这些映射是Ceph守护程序相互协调所需的关键群集状态。 monitor
还负责管理守护程序和客户端之间的身份验证。 通常至少需要三个monitor
才能实现冗余和高可用性。ceph manager daemon(ceph-mgr)
负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率,当前性能指标和系统负载。Ceph Manager daemon
还托管基于python的模块,以管理和公开Ceph集群信息,包括基于Web的Ceph仪表板和REST API。 高可用性通常至少需要两个管理器。ceph osd(object storage daemon,ceph-osd)
存储数据,处理数据复制,恢复,重新平衡,并通过检查其他Ceph OSD守护程序的heartbeat
来向Ceph监视器和管理器提供一些监视信息。通常至少需要3个Ceph OSD才能实现冗余和高可用性。ceph metadata server(ceph-mds)
Ceph文件系统存储元数据(Ceph块设备和Ceph对象存储不使用MDS)。 Ceph元数据服务器允许POSIX文件系统用户执行基本命令(如ls,find等),而不会给Ceph存储集群带来巨大负担Ceph将数据作为对象存储在逻辑存储池中。 使用CRUSH算法,Ceph计算哪个placement group(pg,中译:放置组)
应包含该对象,并进一步计算哪个Ceph OSD守护程序应存储该pg。 CRUSH算法使Ceph存储集群能够动态扩展,重新平衡和恢复。
在存储数据的磁盘上有两个ceph守护进程,osd和mon。
OSD可以通过两种方式管理它们存储的数据。 从Luminous 12.2.z版本开始,新的默认(推荐)后端是BlueStore。 在这之前,默认(也是唯一的选项)是FileStore。
FileStore是在Ceph中存储对象的传统方法。 它依赖于标准文件系统(通常为XFS)以及键/值数据库(传统为LevelDB,现在为RocksDB)来获取某些元数据。但是由于其总体设计以及对用于存储对象数据的传统文件系统的依赖,因此存在许多性能缺陷。
BlueStore是专用于存储的后端,专门用于管理Ceph OSD工作负载的磁盘上的数据。 BlueStore的主要功能包括:
集群至少运行一台Ceph元数据服务器(ceph-mds), 支持Ceph对象存储的集群运行Ceph网关守护程序(radosgw)。每个守护进程都有一系列配置选项,每个配置选项都有一个默认值。 我们可以通过更改这些配置选项来调整系统的行为。
配置由小写字母和下划线组成唯一的名称。在命令行指定配置的时候下划线( _ )和破折号( - )是等效的,在配置文件中,也可以通过空格代替。
每个Ceph守护进程,进程和库都将从以下列出的几个来源中提取其配置。 如果同时存在,则下列列表中,位置靠下的优先级高。
编译的默认值
监视器集群的集中式配置数据库
存储在本地主机上的配置文件
环境变量
命令行参数
管理员设置的运行时覆盖的值
Ceph进程在启动时要做的第一件事就是解析通过命令行,环境和本地配置文件提供的配置选项。 然后,该过程将与mon集群联系,以检索整个群集集中存储的配置。 一旦可获得完整的配置,则将继续执行守护进程。
有一些配置项会影响与mon的关联,进行身份验证和检索集群存储的配置的能力,因此可能需要将其本地存储在节点上并在本地配置文件中进行设置。这些选项包括:
mon_host
:集群的监视器列表mon_dns_serv_name
:DNS SRV记录的名称,该记录用于检查以通过DNS识别集群监视器mon_data, osd_data, mds_data, mgr_data等
:定义守护程序将数据存储在哪个本地目录中。keyring
, keyfile
, and/or key
:指定用于与监视器进行身份验证的身份验证凭据在大多数情况下,这些默认值都是合适的,但mon_host选项除外,该选项标识群集的监视器的地址。使用DNS标识监视器时,可以完全避免使用本地ceph配置文件。
可以通过--no-mon-config
选项跳过从集群监视器检索配置的步骤。 在完全通过配置文件管理配置或监视器集群当前处于关闭状态但需要完成一些维护活动的情况下,这很有用。
任何给定的进程或守护程序的每个配置选项都有一个值。 但是,选项的值可能在不同的守护程序类型之间变化,甚至是同一类型的守护程序也可能不同。 存储在监视器配置数据库或本地配置文件中的Ceph选项分为几部分,以指示它们适用于哪些守护程序或客户端。
global
:配置在这个段中的配置项会影响所有进程。
例如:
log_file = /var/log/ceph/$cluster-$type.$id.log
mon
:mon下的设置会影响Ceph存储群集中的所有ceph-mon守护程序,并覆盖global中的相同设置。
例如:
mon_cluster_log_to_syslog = true
mgr
:mgr部分中的设置会影响Ceph Storage Cluster中的所有ceph-mgr守护程序,并在global中覆盖相同的设置。
例如:
mgr_stats_period = 10
osd
:osd下的设置会影响Ceph Storage Cluster中的所有ceph-osd守护进程,并覆盖global中的相同设置。
例如:
osd_op_queue = wpq
mds
:mds部分中的设置会影响Ceph Storage Cluster中的所有ceph-mds守护进程,并覆盖global中的相同设置。
例如:
mds_cache_memory_limit = 10G
client
:客户端下的设置会影响所有Ceph客户端(例如已安装的Ceph文件系统,已安装的Ceph块设备等)以及Rados Gateway(RGW)守护程序。
例如:
objecter_inflight_ops = 512
部分还可以指定单个客户端的名称。例如指定客户端ceph-admin
rgw的端口
[client.rgw.ceph-admin]
rgw_frontends = "civetweb port=80"
如果在同一部分中指定了相同配置选项的多个值,则以最后一个值为准。
本地配置文件中的值始终优先于监视器配置数据库中的值,而不管它们出现在哪个部分中。
元变量极大地简化了Ceph存储集群的配置。 在配置值中设置了元变量后,Ceph会在使用配置值时将元变量扩展为具体值。 Ceph元变量类似于Bash shell中的变量扩展。
Ceph支持以下元变量:
$cluster
:Ceph存储群集名称。
例如:
/etc/ceph/$cluster.keyring
默认值:ceph
$type
:扩展为守护程序或进程类型
例如:
/var/lib/ceph/$type
$id
:守护进程或者客户端身份标识
例如:
/var/lib/ceph/$type/$cluster-$id
$host
:运行进程的主机名
$name
:扩展为$type.$id.
例如:
/var/run/ceph/$cluster-$name.asok
$pid
:扩展为守护进程id
例如:
/var/run/ceph/$cluster-$name-$pid.asok
启动时,Ceph进程在以下位置搜索配置文件:
$CEPH_CONF
(CEPH_CONF环境变量)-c path/path
(-c参数指定的路径)/etc/ceph/$cluster.conf
~/.ceph/$cluster.conf
./$cluster.conf
(i.e., in the current working directory)/usr/local/etc/ceph/$cluster.conf
$cluster指的是集群的名称
配置文件分为几部分。 每个部分都必须以有效的配置部分名称开头,并用方括号括起来。
[global]
fsid = 1362b160-ef6a-42d9-9833-8094b97408ce
mon_initial_members = ceph-admin
mon_host = 10.10.128.174
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
public network = 10.10.128.0/24
[client.rgw.ceph-admin]
rgw_frontends = "civetweb port=80"
配置中的值为字符串,如果太长了,我们想进行换行可以使用\
符号
[global]
foo = long long ago\
long ago
如果值当中出现空格,我们不想其被隐藏,可以使用单引号或者双引号将其包起来
[global]
line = "to be, or not to be"
值当中不允许出现=,#、; 和[符号,如果需要,要使用\
进行转义
[global]
secret = "i love \# and \["
监视群集管理整个群集可以使用的配置选项数据库,从而可以简化整个系统的中央配置管理。 可以并且应该将绝大多数配置选项存储在此处,以简化管理和提高透明度。
少数设置可能仍需要存储在本地配置文件中,因为它们会影响连接到监视器,验证和获取配置信息的能力。 在大多数情况下,这仅限于mon_host选项,尽管也可以通过使用DNS SRV记录来避免。
以下CLI命令用于配置群集:
ceph config dump查看集群的整个配置数据库
ceph config get 将显示特定的守护程序或客户端的配置,该配置存储在监视器的配置数据库中。
ceph config set 将在监视器的配置数据库中设置一个配置选项。
ceph config show 将显示正在运行的守护程序的报告运行配置。如果还使用本地配置文件,或者在命令行或运行时覆盖了选项,则这些设置可能与监视器存储的设置不同。选项值的来源报告为输出的一部分。
ceph config assimilate-conf -i <输入文件> -o <输出文件>将从输入文件中提取配置文件,并将所有有效选项移至监视器的配置数据库。监视器无法识别,无效或无法控制的任何设置都将在输出文件中存储的简短配置文件中返回。此命令对于从旧版配置文件过渡到基于集中式监视器的配置很有用。
在大多数情况下,Ceph允许您在运行时更改守护程序的配置。 此功能对于增加/减少日志记录输出,启用/禁用调试设置,甚至用于运行时优化非常有用。
一般来说,可以通过ceph config set命令以常规方式更新配置选项。 例如,在特定的OSD上启用调试日志级别,可以执行以下操作:
ceph config set osd.0 debug_ms 20
用Ceph CLI上的tell或daemon界面临时设置一个选项。 这些替代值是短暂的,因为它们仅影响正在运行的进程,并且在守护程序或进程重新启动时将被丢弃/丢失。
覆盖值有两种用法:
在任何主机上,我们都可以使用以下命令通过网络向守护进程发送消息:
ceph tell config set
例如
ceph tell osd.0 config set debug_osd 20
ell命令还可以接受守护程序标识符的通配符。 例如,要调整所有OSD守护程序的调试级别,可以执行以下操作:
ceph tell osd.* config set debug_osd 20
在运行该进程的主机上,我们可以通过/ var / run / ceph中的套接字直接连接到该进程,使用:
ceph daemon config set
例如
ceph daemon osd.0 config set debug_osd 20
通过ceph config show node
[root@ceph-admin ceph-cluster]# ceph config show osd.0
NAME VALUE SOURCE OVERRIDES IGNORES
auth_client_required cephx file
auth_cluster_required cephx file
auth_service_required cephx file
cluster_addr 10.10.128.174:0/0 override
daemonize false override
keyring $osd_data/keyring default
leveldb_log default
mon_host 10.10.128.174 file
mon_initial_members ceph-admin file
public_addr 10.10.128.174:0/0 override
public_network 10.10.128.0/24 file
rbd_default_features 61 default
setgroup ceph cmdline
setuser ceph cmdline
上述命令只显示部分的,可以查看所有的
[root@ceph-admin ceph-cluster]# ceph config show-with-defaults osd.0
可以通过管理套接字从本地主机连接到正在运行的守护程序来观察其设置
[root@ceph-admin ceph-cluster]# ceph daemon osd.0 config show | more
{
"name": "osd.0",
"cluster": "ceph",
"admin_socket": "/var/run/ceph/ceph-osd.0.asok",
"admin_socket_mode": "",
"auth_client_required": "cephx",
"auth_cluster_required": "cephx",
"auth_debug": "false",
"auth_mon_ticket_ttl": "43200.000000",
"auth_service_required": "cephx",
"auth_service_ticket_ttl": "3600.000000",
"auth_supported": "",
"bdev_aio": "true",
"bdev_aio_max_queue_depth": "1024",
"bdev_aio_poll_ms": "250",
"bdev_aio_reap_max": "16",
"bdev_async_discard": "false",
"bdev_block_size": "4096",
"bdev_debug_aio": "false",
"bdev_debug_aio_suicide_timeout": "60.000000",
"bdev_debug_inflight_ios": "false",
"bdev_enable_discard": "false",
"bdev_inject_crash": "0",
"bdev_inject_crash_flush_delay": "2",
显示所有当前设置
[root@ceph-admin ceph-cluster]# ceph daemon osd.0 config diff
{
"diff": {
"auth_client_required": {
"default": "cephx, none",
"file": "cephx",
"final": "cephx"
},
"auth_cluster_required": {
"default": "cephx",
"file": "cephx",
"final": "cephx"
},
"auth_service_required": {
"default": "cephx",
"file": "cephx",
"final": "cephx"
},
"cluster_addr": {
"default": "-",
"override": "10.10.128.174:0/0",
"final": "10.10.128.174:0/0"
},
"daemonize": {
"default": true,
"override": false,
"final": false
},
"fsid": {
"default": "00000000-0000-0000-0000-000000000000",
"file": "1362b160-ef6a-42d9-9833-8094b97408ce",
"override": "1362b160-ef6a-42d9-9833-8094b97408ce",
"final": "1362b160-ef6a-42d9-9833-8094b97408ce"
},
"mon_host": {
"default": "",
"file": "10.10.128.174",
"final": "10.10.128.174"
},
"mon_initial_members": {
"default": "",
"file": "ceph-admin",
"final": "ceph-admin"
},
"public_addr": {
"default": "-",
"override": "10.10.128.174:0/0",
"final": "10.10.128.174:0/0"
},
"public_network": {
"default": "",
"file": "10.10.128.0/24",
"final": "10.10.128.0/24"
},
"setgroup": {
"default": "",
"cmdline": "ceph",
"final": "ceph"
},
"setuser": {
"default": "",
"cmdline": "ceph",
"final": "ceph"
}
}
}