8、MONITOR CONFIG REFERENCE
http://ceph.com/docs/master/rados/configuration/mon-config-ref/
客户端在读写数据前,都比去和monitor取得联系,获得cluster map,结合CRUSH算法计算得到对象的位置。
(1)最小配置
生成一个fsid和monitorde的最小配置,配置字段[mon]或[mon.a],ceph监视器默认监听6789端口。
- 主机名(e.g. mon host = hostname1,hostname2,hostname3): mon host
- 主机IP(e.g. mon addr = 10.0.0.10:6789,10.0.0.11:6789,10.0.0.12:6789):mon addr
(2)初始成员
必须是个奇数,表示一个初始的最小monitor数,active的monitor达到这个数才能启动。
- 初始monitor成员ID: mon initial members
(3)数据
monitor存储数据的路径,因为monitor也是在节点上的,monitor会做很多fsync()操作,影响OSD的工作负载,在0.58以前的版本中,monitor的数据是以文件形式存放的,可以用ls,cat等命令直接查看,但是一致性难以保障。之后的版本,数据以key/value的形式存放,并且需要原子性操作,保证一致性,数据保存路径不建议改动。
- monitor数据保存路径(e.g. /var/lib/ceph/mon/$cluster-$id):mon data
(4)存储容量
当集群的使用率接近"最大容量"时,monitor会阻止对OSD的读写请求以避免数据丢失,考虑到多个主机可能同时断电造成集群容量剧减,这个"最大容量"通常小于实际的集群总容量,配置段位[global]。
- 被认为集群已满的最大使用百分比(默认.95):mon osd full ratio
- 被认为集群接近已满的最大使用百分比(默认.85):mon osd nearfull ratio
(5)monitor间的同步
集群间存在多Monitor共同工作时,存在同步的问题,不必每个monitor都active集群才工作,只要达到最小可工作数量就行了,这个数量在mon initial members中规定,所以有可能一些mon在某一时刻不工作,后来恢复正常后状态就落后了。monitor三种角色:leader,最先获得最新的cluster
map;provider,拥有最新的cluster map,但不是最先获得的;requester,状态落后,必须同步后方可工作。
在一个同步过程中,requester向leader请求同步,leader负责分派同步工作给provider,并告知requester去找provider,这样做分摊了工作负载。provider以chunk为单位发给requester最新的状态数据,同步完后,requester告知leader完成,leader恢复一个ACK宣布同步结束。
同步总是在一个新的monitor加入集群时发生。在运行过程中,cluster map不断更新,这三个角色也不断变化,如果provider接受到同步任务但自身状态落后于leader时,它可以终止同步并告知leader。同步完成后,ceph发出一个trimming,这个操作大概是修剪多余的状态数据,并且这个操作必须在PG状态是active+clean时进行。
- trimming操作超时(默认30s):mon sync trim timeout
- 同步时心跳超时(monotor之间的心跳检查,默认30s):mon sync heartbeat timeout
- 同步时心跳检查间隔(默认5s):mon sync heartbeat interval
- 同步超时(默认30s):mon sync timeout
- 同步最大重试次数(默认5):mon sync max retries
- 同步最大负载量(默认1045676):mon sync max payload size
- leader等待requester同步的最大时间(默认10s):mon accept timeout
- map更新前收集更新信息的时间间隔(默认1s):paxos propose interval
- 收集更新信息的最小时间(默认0.05s):paxos min wait
- trimming操作前能容忍的最大proposal数(默认30):paxos trim tolerance
- 未trimming时最大的版本数(默认100):paxos trim disabled max versions
- Monitor版本租约秒数(默认5):mon lease
- leader去更新其他monitor租约的时间间隔数(默认3s):mon lease renew interval
- leader等待provider告知其版本的秒数:mon lease ack timeout
- OSD map维持的最小版本号数量(默认500):mon min osdmap epochs
- monitor维护的最多的PG map版本号数量(默认500):mon max pgmap epochs
- monitor保留的最大的log版本号数量(默认500):mon max log epochs
(6)时钟
不同节点间时钟应该同步,否则一些超时和时间戳相关的机制将无法正确运行,运行又monitor的节点还需要安装NTP来同步时钟。然而NTP 级别的时钟同步还不够,即使NTP同步好,ceph也会报出时钟偏移警告,工作量,网络延迟,配置覆盖等也会对同步有影响。
- 相对于系统时间的偏移:clock offset
- monitor计时间隔秒数(默认5):mon tick interval
- monitor间的clock drift(时钟嘀嗒数?,默认.05s):mon clock drift allowed
- 时钟偏移补偿指数(默认5):mon clock drift warn backoff
- leader时间检查间隔(默认300s):mon timecheck interval
(7)客户端
- 客户端每隔Ns尝试一个Monitor直到建立连接(默认3):mon client hung interval
- 客户端每个Ns会去ping一个monitor(默认10):mon client ping interval
- 每一个客户端信息产生的log entires数(默认1000):mon client max log entries per message
- 内存中的客户端信息数据大小(默认100ul << 20):mon client bytes
(8)杂项
- 集群允许的最大OSD数量(默认10000):mon max osd
- 集群为客户端和daemon预分配的全局ID数量(默认100):mon globalid prealloc
- 写了这么多个对象后和底层文件系统同步一次(默认5):mon sync fs threshold
- subscription 间隔秒数(默认500):mon subscribe interval
- 使最近的N个PGmap统计数据呈现平滑趋势(默认2):mon stat smooth intervals
- monitor在bootstrapping前寻找其他Monitor的时间(默认2s):mon probe timeout
- 元数据和OSD信息可以在内存中驻留的信息大小(默认400ul << 20byte):mon daemon bytes
- 每个事件最大的log entries数(默认4096):mon max log entries per event
9、Heartbeat Settings
OSD靠定期检查heartbeat来确认相邻的OSD有没有down,以及在peer过程中检查错误和向monitor汇报自身情况,包括故障发生,PG状态改变,以及检查monitor有没有down。
http://ceph.com/docs/master/rados/configuration/mon-osd-interaction/
(1)MONITOR SETTINGS
- 向monitor报告down的最小OSD数(默认1):mon osd min down reporters
- OSD向monitor报告OSD down的最小次数(默认3):mon osd min down reports
- 宣布一个无响应的OSD down的超时(默认900):mon osd report timeout
- 自动标记为out的最大的CRUSH单位类型(默认rack):mon osd downout subtree limit
注:是不是说最大可以标记一个机架out了?
- 标记一个OSD状态为down和out之前ceph等待的秒数(默认300):mon osd down out interval
- 自动标记一个新加入的OSD状态为in(默认true):mon osd auto mark new in
- 自动标记启动中的OSD状态为in(默认为false):mon osd auto mark in
- 标记在启动过程中被自动标记为out的OSD状态为in(默认true):mon osd auto mark auto out in
- The minimum ratio of up Ceph OSD Daemons before Ceph will mark Ceph OSD Daemons down(默认.3):mon
osd min up ratio - The minimum ratio of in Ceph OSD Daemons before Ceph will mark Ceph OSD Daemons out(默认.3):mon
osd min in ratio - The number of seconds laggy estimates will decay(默认60*60):mon osd laggy halflife
- The weight for new samples in laggy estimation decay(默认0.3):mon osd laggy weight
- If set to true, Ceph will scale based on laggy estimations(默认true):mon osd adjust heartbeat
grace - The weight for new samples in laggy estimation decay(默认.3):mon osd laggy weight
(2)OSD SETTINGS
- 心跳检查的OSD网络地址(默认主机IP):osd heartbeat address
- OSDping它的peer的时间间隔(默认6s):osd heartbeat interval
- OSD心跳停止间隔(默认20s):osd heartbeat grace
- OSD ping一个monitor的时间间隔(默认30s):osd mon heartbeat interval
- OSD报告monitor前等待的最大时间(默认120s):osd mon report interval max
- OSD报告monitor前等待的最小时间(默认5s):osd mon report interval max
- monitor恢复ACK的超时(默认30s):osd mon ack timeout
10、网络配置
http://docs.ceph.com/docs/master/rados/configuration/network-config-ref/
(1)集群网络配置
配置字段为[global]
- 公共网络:public network
- 私有网络:cluster network
注:建议私有地址和internet还有公共网络部能互通,这个地址用来做OSD的心跳检查,对象的复制和恢复,单独配置私有地址而不是用公用网络做这些对性能有提升。
(2)monitor网络配置
配置字段[mon.a]
- 主机名(不要使用loaclhost):host
- monitor 地址:mon addr
(3)OSD网络配置
配置字段[osd.0]
- 公共地址:public addr
- 私有地址:cluster addr
(4)绑定
- OSD和MDS进程绑定的最小端口号(默认6800):ms bind port min
- OSD和MDS进程绑定的最大端口号(默认:7100):ms bind port max
- 允许进程使用IPV6的地址(默认false):ms bind ipv6
(5)TCP
- 开启nodelay选项(默认true):tcp nodelay
注:ceph默认关闭了TCP的buffering,使得请求不缓存立即下发,这样增加了网络流量,增加了延迟如果你要传输大量小文件,就把这个选项关了吧。
- 收到网络连接终止时socket缓冲区大小(默认关闭):tcp rcvbuf
- tcp读超时(默认900s):ms tcp read timeout
注:一个客户端请求另一个ceph daemon时需要新建立一个连接,但是又不想关闭现在的连接,现在的连接就不用了,过了这么多秒后,这个连接被标记为空闲状态。