Ceph集群配置 1、配置说明 2、Cpeh集群中读取配置参数方式 3、基础配置 4、配置段 5、变量 6、配置文件 7、监控集群配置数据库 8、运行时配置 9、通用配置 10、网络配置 11、认证配置 12、Monitor配置 13、通过DNS发现监控节点 14、Montior和OSD之间的交互配置 15、OSD配置 16、mgr配置 17、bluestore配置 =================================================================================================================== 1、配置说明 所有ceph配置选项都由一个唯一名称,用小写字符组成的单词组成,并用下划线连接,空格也可。当在命令行进行配置时 _ 和 - 都可以使用。例如 --mon-host 和 --mon_host 的效果相同。 =================================================================================================================== 2、Cpeh集群中读取配置参数方式 1、默认值 2、监视节点集群中统一配置数据库 3、本地配置文件 4、环境变量 5、命令行参数 6、运行时管理员覆盖的配置参数 注:当一个ceph发出启动指令之后,首先解析通过命令行、环境变量以及本地配置文件提供给ceph集群的配置参数;然后从监视 节点检索整个集群集中存储的配置参数。如果读取到的所有配置参数可用,则ceph集群可正常启动运行。 =================================================================================================================== 3、基础配置 由于某些配置选项会影响进程与监视节点通信,认证和检索集群存储配置,因此可能需要将某配置参数在节点的本地通过配置文 件的方式进行配置,这些选项包括(这些选项默认值大多数时候是使用的): mon_host = mon_dns_serv_name = {默认是ceph-mon,通过此DNS服务器确定监视节点} mon_data, osd_data, mds_data, mgr_data # 指定ceph各种组件存储数据的目录 keying,keyfile,key 注:通过使用 --no-mon-host-config可以跳过从监视集群中获取检索配置参数的步骤,集群只通过本地配置文件读取参数。 =================================================================================================================== 4、配置段 ceph集群通过配置段方式区分不同守护进程或客户端的配置选项,配置段包括: [global] [mon] [mgr] [osd] [mds] [client] 注:1、配置段名称用[ ]包含,也可以使用例如[mds.node1]的方式对指定节点的守护进行进行配置。 2、相同的配置选项,其优先级 [global] > [mds] > [mds.node1]。 3、本地配置文件中的配置选项始终优先于监视集群数据库中的配置值。 =================================================================================================================== 5、变量 在ceph集群的配置中可使用变量,在ceph集群读取配置文件时可将变量替换为具体的值,大大简化集群的配置,其类似于bash中 的变量。 $cluster $type # 守护进程类型,例如:mds,osd $host $name $pid $id =================================================================================================================== 6、配置文件 1、查找配置文件顺序 $CEPH_CONF (i.e., the path following the $CEPH_CONF environment variable) -c path/path (i.e., the -c command line argument) /etc/ceph/$cluster.conf ~/.ceph/$cluster.conf ./$cluster.conf (i.e., in the current working directory) 2、语法格式 使用ini风格的配置 使用 # 或者 ; 添加注释 =================================================================================================================== 7、监控集群配置数据库 为整个系统提供统一的配置管理,大多数配置选项应该存储在监控集群管理的的数据库中。只有少数配置需要配置在本地的配置 文件中。 命令行配置: ceph config set # 在ceph集群运行时配置参数 =================================================================================================================== 8、运行时配置 在ceph集群中,允许在守护进程运行时更改其配置。此功能可以减少额外的日志记录以及用来及优化集群。运行时配置,可通过: ceph config set 进行配置。 运行时的配置的生效优先级低于本地配置文件的配置生效优先级。 =================================================================================================================== 9、通用配置 # 监视节点配置 mon initial members = node1,node2,node3 # 设置 Monitor 节点成员。节点的短名称,而非FQDN,hostname -s mon host = 10.53.50.200,10.53.50.201,10.53.50.202 # 设置 Monitor 节点IP地址 # 认证。对于Bobtail(v 0.56)及更高版本,您应该在Ceph配置文件的[global]部分中明确启用或禁用身份验证。 auth cluster required = cephx auth service required = cephx auth client required = cephx # OSD 配置。默认情况下,Ceph将存储Ceph OSD守护进程的数据,存储路径为 /var/lib/ceph/osd/$cluster-$id # 心跳信息。PSD守护金策还给你会检查其他OSD守护金策还给你的状态,然后将状态信息报告给Monitor节点。 # 日志。 =================================================================================================================== 10、网络配置 网络配置对于一个构建一个高性能、高可用的集群是至关重要的。为了使得ceph集群获得更高的性能,建议使用两个网络中运 行ceph集群,一个作为公共网络接受客户端请求,另外一个网络作为集群内部复制、心跳信息的通信。 OSD进程之间发生数据复制,以及数据平衡和恢复时,会使得ceph客户端与ceph集群之间的通信发生延迟、缓慢,从而造成性能 问题。 当有恶意攻击者发起DoS攻击时,可能会阻止客户端用户读取和写入数据,而将集群放置于一个单独的网络内可以有效的阻止类 似的行为。 ceph集群中的守护进程通常监听的端口范围为:6800 ~ 7300 绑定端口: Monitor Server:6789 Metadata Server or Manager:监听公共网络第一个端口 6800 OSD Server:通常从第一个端口开始监听6800。每个节点的OSD进程最多可以使用四个端口,它们分别是: 用于客户端和监视监视节点通信 用于和其它OSD进程数据传输 两个端口用来和其它OSD进程传递心跳信息kernel-devel-3.18.16-1.x86_64.rpm public network = {public-network/netmask} # 配置公共网络地址 cluster network = {cluster-network/netmask} # 配置集群网络。用来进行传递心跳信息、数据复制、数据恢复等 public addr = {IP Address} # 可以在每个守护进程的配置段中设置 cluster addr = {IP Address} # 可以为每个守护进程设置集群地址 ms bind port min = 6800 # 设置MDS守护进程绑定的端口范围 ms bind port max = 7300 ms tcp nodelay = true/false # 是否启用TCP请求缓冲,如果网络中存在大量小包的传输,则建立关闭 ms tcp rcvbuf = 0 # 网络连接接收端的套接字缓冲区的大小。默认情况下禁用 ms tcp read timeout = 900 # 多长时间后丢弃空闲的连接 mon addr = {IP Address} # 设置mon的地址。[mon.node1] mon priority = 0 # 声明的监视器的优先级越低,当客户端尝试连接群集时选择监视器越优先 host = # 针对特定守护程序实例使用此设置(例如,[osd.0]) =================================================================================================================== 11、认证配置 cephx认证方式默认是启用的,加密认证通常意味着需要CPU的计算,因此会带来一些计算上的损失,但可以忽略不记。 使用部署公布部署ceph集群时,部署工具将查找client.admin用户的密钥文件 ceph.client.admin.keyring ,另外还会查找 ceph-deploy和ceph-volume程序激活OSD和元数据服务器的密钥文件。当知行ceph-deploy admin {node-name}时,将把这些密钥 文件 ceph.client.admin.keyring 推送到各个节点。 禁用cephx认证 [global] auth cluster required = none auth service required = none auth client required = none 启用cephx认证 当启用cephx认证时,ceph将在/etc/ceph/$cluster.$name.keyring路径下查找密钥环文件。 1、创建client.admin用户的密钥,并复制到客户端节点 ceph auth get-or-create client.admin mon 'allow *' mds 'allow *' mgr 'allow *' osd 'allow *' -o \ /etc/ceph/ceph.client.admin.keyring 2、创建一个监视集群使用的密钥环文件,并生成一个密钥 ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *' 3、复制用于监视节点间通信的密钥到每个节点 cp /tmp/ceph.mon.keyring /var/lib/ceph/mon/ceph-a/keyring 4、为每个MGR生成一个密钥 ceph auth get-or-create mgr.{$id} mon 'allow profile mgr' mds 'allow *' osd 'allow *' -o \ /var/lib/ceph/mgr/ceph-{$id}/keyring 5、为osd生成密钥 ceph auth get-or-create osd.{$id} mon 'allow rwx' osd 'allow *' -o /var/lib/ceph/osd/ceph-{$id}/keyring 6、为MDS生成密钥 ceph auth get-or-create mds.{$id} mon 'allow rwx' osd 'allow *' mds 'allow *' mgr 'allow profile mds'\ -o /var/lib/ceph/mds/ceph-{$id}/keyring 给ceph命令行管理工具或ceph客户端使用这些密钥的方法是将密钥放置于 /etc/ceph/ 目录下一个密钥环文件中,文件名通常 是 ceph.client.admin.keyring。建议将Ceph存储集群的密钥环文件复制到要运行管理命令的节点上,因为它包含client.admin 密钥。ceph.client.admin.keyring 文件的权限通常为644。 也可以使用本地配置文件来指定密钥路径: keyrong = /etc/ceph/$cluster.$name.keyring,/etc/ceph/$cluster.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin # 指定密钥文件存放目录的路径 keyfile = # 密钥文件的路径 =================================================================================================================== 12、Monitor配置 在ceph集群中,因该至少有一个Monitor节点,这些Monitor节点的配置应该保持一致。ceph集群维护着集群的状态信息以及各种 map映射关系,ceph集群客户端只要连接一个Monitor节点,就可以确定所有ceph集群的信息,包括OSD进程、元数据服务器等。 在客户端连接ceph集群开始读写数据之前,客户端必须首先连接ceph Monitor节点,ceph客户端从ceph Monitor节点获取到集群 映射后使用CRUSH算法计算出副本的位置。基于这样的方式,ceph客户端就可以直接于ceph OSD守护进程进行通信,这也是ceph 集群高可用、高可扩展性的一个基础。 Monitor 作用: 1、维护集群映射及映射的副本 2、提供身份认证 3、日志记录 Cluster Map: Cluster Map是各种Map的集合,包括mon map、osd map、pg map、mds map。Cluster Map中包括的信息有: ceph集群中进程信息 进程的状态信息 集群状态信息 存储空间使用情况 当集群状态发生变化,例如OSD进程挂掉时,Cluster Map会实时的发生变化以反映集群的状态。Cluster Monitor还保留集群 先前的状态历史信息,各种map都保留有历史版本,我们将每一个版本称为 epoch。 Monitor Quorum: mon force quorum join = False # 强制节点即使之前已从集群中移除,也可以加入投票。 Consistency: ceph客户端和其他ceph守护进程是通过ceph配置文件来发现监视节点的,ceph monitor节点之间是通过monitor map相互发 现的。使用monmap发现监控节点而不是配置文件能够有效的保证monitor配置的一致性。 对monmap的更新是通过Paxos算法来进行同步的。如果Ceph Monitors通过Ceph配置文件而不是通过monmap发现彼此,则会引 入额外风险,因为Ceph配置文件不会自动更新和分发。Ceph监视器可能会无意中使用旧的Ceph配置文件,无法识别Ceph Monitor,不符合法定人数,或者发展Paxos无法准确确定系统当前状态的情况。 monitor集群的初始化: fsid monitor id: mon.a mon.b keys: 配置格式: [global] [mon] [mon.a] [mon.b] [mon.c] monitor数据: Ceph提供了Ceph Monitors存储数据的默认路径,因为ceph监视器会频繁写入数据到磁盘,如果于OSD守护金策还给你处于 同一个位置,则可能会降低OSD进程的性能。 在ceph 0.58 版本之前,ceph monitor将这些元数据存储在文件中,用户可以使用cat命令查看。在ceph 0.59版本之后, ceph monitor将数据存储为键值对。 mon data = /car /lib/ceph/mon/$cluster-$id # monitor节点元数据存储路径 mon data size warn = 21474836480 # monitor节点元数据达到多大时在ceph cluster日志中发出警告, 默认为15G大小 HEALTH_WARN mon data avail warn = 30 # 当元数据目录所在的磁盘空间剩余小于或等于百分之多少时, 在日中发出警告 HEALTH_WARN mon data avail warn = 30 # 当元数据目录所在的磁盘空间剩余小于或等于百分之多少时, 在日中发出警告 HEALTH_ERR mon warn on cache pools without hit sets = true # 如果缓存池没有设置hitset类型集,则在集群日志中发出 HEALTH_WARN。默认是true mon warn on crush straw calc version zero = true # 如果CRUSH的straw_calc_version为零,则在集群日志中发出 HEALTH_WARN。默认是true mon health data update interval = 60 # 监视节点和其他节点多长时间共享一个心跳信息,默认是60s 负数将会禁用 mon health to clog = true/false # 定期将健康状态信息摘要发送到集群日志中 mon health to clog tick interval = 3600 # 监视器将健康摘要发送到群集日志的频率(以秒为单位) 存储容量: 通常情况下,当ceph集群中存储使用量达到95%后,ceph集群将拒绝客户端连接读写。例如总容量为99T的集群,当剩余空间 降至5TB时集群就不允许ceph客户端读取和写入数据。 [global] mon osd full ratio = .80 # OSD 硬盘使用率达到多少就认为它 full,无法写入数据 mon osd nearfull ratio = .80 # OSD 硬盘使用率达到多少就认为它 nearfull,ceph状态会发出告警 mon osd backfillfull ratio = .80 # OSD 硬盘使用率达到多少就认为它剩余空间太少而无法回填 心跳信息: ceph监控节点要求每个OSD向它报告状态以此来了解集群的健康状态。当你用多个监视器支撑一个生产集群时,各监视器都要 检查邻居是否有集群运行map的最新版本(如,邻居监视器的map有一或多个 epoch 版本高于当前监视器的最高版 epoch ), 过一段时间,集群里的某个监视器可能落后于其它监视器太多而不得不离开法定人数,然后同步到集群当前状态,并重回法 定人数。为了同步,监视器可能承担三种中的一种角色: Leader: Leader 是实现最新 Paxos 版本的第一个监视器 Provider: Provider 有最新集群map的监视器,但不是第一个实现最新版 Requester:Requester 落后于 leader ,重回法定人数前,必须同步以获取关于集群的最新信息 mon sync trim timeout = 30.0 # 修减monitor map所的超时时常 mon sync heartbeat timeout = 30.0 # 心跳信息传输超时时常 mon sync heartbeat interval = 5.0 # 心跳信息时间间隔 mon sync backoff timeout = 30.0 # 同步超时(默认30s),默认值是30.0 mon sync timeout = 60.0 # 在再次放弃和引导之前,监视器将等待来自其同步提供商的 下一个更新消息的秒数。 mon sync max retries = 5 # 同步失败重试最大次数 mon sync max payload size = 1045676 # 同步有效负载的最大大小(以字节为单位)。 注:查看更多配置 http://docs.ceph.com/docs/master/rados/configuration/mon-config-ref/ 时间同步: 即便时间同步,ceph的时间漂移警告也可能触发。时间同步涉及到集群内部的工作负载、网络延迟、map同步等许多工作。 客户端: mon client hunt interval = 3.0 # 客户端将每N秒尝试一次新的监视器,直到它建立连接。 mon client ping interval = 10.0 # 客户端将每N秒钟ping一次显示器。 mon client max log entries per message = 1000 # 每个客户端消息的监视器将生成的最大日志条目数。 mon client bytes = # 内存中允许的客户端消息数据量(以字节为单位)。 OSD配置: mon max osd = 10000 # 集群中允许的OSD的最大数量 mon globalid prealloc = 100 # 为集群中的客户端和守护程序预先分配的全局ID的数量。 =================================================================================================================== 13、通过DNS发现监控节点 自11.0.0版本之后,RADOS支持通过DNS解析来查找监控节点。 =================================================================================================================== 14、Montior和OSD之间的交互配置 Ceph Monitor通过从每个Ceph OSD守护进程请求状态信息以及从其领近的Ceph OSD守护进程状态信息来了解集群的状态信息。 如果一段时间内Ceph Monitor无法收到OSD的状态信息,则Ceph Monitor就会更新Cluster Map。 Ceph Monitors和Ceph OSD守护进程交互过程: 默认情况下,每个Ceph OSD进程每6s检查一次其他OSD守护进程的心跳信息。可通过osd heartbeat interval配置选项来修 改配置心跳间隔时间。如果领近的OSD进程在20s内没有发送心跳信息,则Ceph OSD认为此进程被关闭或发生故障,然后将 报告发给Ceph Monitor,Ceph Monitor之后更新集群映射,当然管理员也可以修改 osd heartbeat grace 配置选项来提高 宽限时间。 默认情况下,来自不同主机的两个OSD守护进程必须向Monitor节点报告其他OSD进程挂掉的状态信息,但存在一种可能性就 是来自不同主机的两个OSD所在的机架交换机故障,则Monitor无法收到OSD状态信息。 mon osd min up ratio = .30 # 在把 OSD 标记为 down 前,保持处于 up 状态的 OSD 最小比例。 mon osd min in ratio = .30 # 在把 OSD 标记为 out 前,保持处于 in 状态的 OSD 最小比例。 注:查看更多配置 http://docs.ceph.org.cn/rados/configuration/mon-osd-interaction/ =================================================================================================================== 15、OSD配置 1、建议将osd的元数据目录和安装操作系统的硬盘分开。即将osd元数据目录挂载到一个独立分区。 =================================================================================================================== 16、mgr配置 mgr module path = /mgr # 模块路径 mgr data = /var/lib/ceph/mgr/$cluster-$id # 模块数据目录 mgr tick period = 5 # mgr和monitor节点心跳的时间间隔 mon mgr beacon grace = 30 # monitor多长时间没收到mgr的心跳则认为mgr失效 =================================================================================================================== 17、bluestore配置 1、基础知识 1、数据目录是一个临时挂载文件系统tmpfs。他在osd启动或激活时在此目录下生成osd的信息文件、表示符文件、密钥等。 2、通常情况下bluestore管理一个存储设备,但也可以跨另外两个设备部署BlueStore: WAL device:(在数据目录中标识为block.wal)可用于BlueStore的内部日志或预写日志。如果设备比主设备快(例如, 当它在SSD上并且主设备是HDD时),则使用WAL设备是有用的。 DB device:(在数据目录中标识为block.db)可用于存储BlueStore的内部元数据。 BlueStore(或者更确切地说,嵌 入式RocksDB)将在数据库设备上放置尽可能多的元数据以提高性能。如果数据库设备填满,元数据将溢出 回主设备。同样,如果数据库设备比主设备更快,则提供数据库设备能够提高性能。 如果只有少量快速存储可用(例如,小于1千兆字节),我们建议将其用作WAL device。如果还有更多,配置DB device设 备会更有意义。 BlueStore日志将始终放在可用的最快设备上,因此使用数据库设备将提供与WAL设备相同的优势,同时 还允许在其中存储其他元数据。 ===================================================================================================================