Ceph学习笔记(3)- Monitor

前言:

​ Ceph将cluster map与placement rule合并为一张表称为crush map,作为集群表的一部分。由Monitor对集群表的副本进行维护和传播。Monitor是Paxos算法构建的具有分布式强一致性的小型集群(Paxos算法参考🔗https://www.cnblogs.com/linbingdong/p/6253479.html)

​ 因为Monitor采用负荷分担的方式工作和基于Paxos的分布式一致性算法,所以任何客户端和OSD都可以向集群中的任何Monitor索取或者请求更新集群表。Paxos机制决定了集群中超过半数Monitor处于活跃状态才可以正常工作。

工作方式

​ 与Paxos选取主proposer类似,同时为了防止短时间内因网络或OSD故障导致大量的集群表更新请求而使得集群动荡。选出一个主Monitor后(同一时间只能由主Monitor发起集群表更新请求),对一段时间更新操作进行合并后发起单独的请求。

​ 当前集群中活跃的Monitor包含Leader和Peon,通过选举出来的主Monitor称为Leader,其余为Peon。Leader“任职”的一段时间为租期,到期后Leader需要申请续租,否则任意一个Peon都可认为Leader异常,集群重新发起选举。如果Leader故障或有新的Monitor加入,则会重新开始Leader的选举(选举期间Monitor无法提供服务)。如果Leader发出续租请求后,某个Peon超时未回复,则认为该Peon异常,触发重新选举。

​ 选出Leader后,它首先会向Peon获取当前集群中最新的集群表,Peon收到请求后进行应答并返回本地的集群表,如果2秒内集群中超过半数的Peon回复,那么Leader就会将集群表更新为最新。前面说过,任何客户端和OSD都可以向集群中任何Monitor请求更新集群表。但是如果Peon收到更新请求已经在当前最新的集群表中,则忽略该请求并返回最新的集群表。所有请求都被透传至Leader,由Leader合并后在整个集群发起同步。

​ Monitor除了维护集群表,还有健康状态,告警等信息的监控Monitor内部职责划分如下:

集群表

​ 集群表由crush map和所有OSD的身份和状态信息组成,两者都是围绕OSD展开,所以集群表称为osdmap通过ceph osd dump获得集群表信息:

第一部分(集群表配置信息)

epoch 105
fsid cb309017-7bde-4799-861c-9b8e30f97a26
created 2020-04-03 11:50:19.091945
modified 2020-04-08 16:24:42.959505
flags sortbitwise,recovery_deletes,purged_snapdirs
crush_version 29
full_ratio 0.95
backfillfull_ratio 0.9
nearfull_ratio 0.85
require_min_compat_client jewel
min_compat_client jewel
require_osd_release luminous

各项含义如下:

  • epoch:本osdmap对应的版本号,单调递增

  • fsid:集群的唯一标识符

  • created:集群创建时间

  • modified:本osdmap(最新osdmap)创建时间

  • flags:集群级别的标志位

    • sortbitwise:内部对象排序
    • recovery_deletes 和 purged_snapdirs:从Luminous之前的版本升级,需要等待所有PG被scrub(可以强制或等待自动进行),如果没有这两个标志位会出现mon拒绝加入quorum的现象
    • nearfull:集群中有osd快要达到85%(默认)使用量
    • full:集群中有osd达到95%(默认)使用量,此时整个集群无法写入数据
    • pauserd和pausewr:暂停对集群的读和写
    • noup:不允许osd启动
    • nodown:osd故障不报告,monitor不把osd标记为down
    • noin:之前被标记为out的osd,重新启动后不允许他自动加入到集群
    • noout:故障osd不被自动标记为out,与noin同理,避免集群被标记后立马进行数据均衡
    • nobackfill,norecover:禁止集群数据恢复
    • norebalance:进制集群自动进行数据平衡
  • full_ratio 0.95:osd用量为95%标记为满,数据无法写入

  • backfillfull_ratio 0.9:osd用量为90%时,拒绝backfill请求
  • nearfull_ratio 0.85:osd用量85%,发出nearfull告警

第二部分(osd详细信息)

osd.0 up in weight 1 recovery_weight 1 up_from 66978 up_thru 67011 down_at 66969 last_clean_interval [66666,66968) 10.10.10.125:6800/5123 10.10.10.125:6801/5123 10.10.10.125:6802/5123 10.10.10.125:6803/5123 exists,up a9c37496-142e-41b3-bd43-71902fae0f64

大意是说osd.0状态为up,权重为1;最近一次被标记为up(up_from)的epoch为66978,从up_from开始osd一直保持up的状态到up_thru对应的epoch为67011,也就是说在[66978,67011]期间osd一直是up状态;最近一次被标记为down(down_at)的epoch为66969;osd所在主机ip地址为10.10.10.125;osd唯一标识符为

a9c37496-142e-41b3-bd43-71902fae0f64

第三部分(存储池信息)

pool 8 'metadata' replicated size 2 min_size 1 crush_rule 1 object_hash rjenkins pg_num 1024 pgp_num 1024 last_change 73 flags hashpspool stripe_width 0 application cephfs

大意是说id为8的存储池,名称为metadata;采用两副本模式(replicated size 2),最小要求单副本(即只存1份数据);对象哈希算法使用rjenkins(object_hash rjenkins);此存储池的pg数量为1024(pg_num 1024);该存储池应用于cephfs(application cephfs,还有rbd,rgw等应用)

monmap

通过ceph mon dump获取monmap如下:

dumped monmap epoch 3
epoch 3
fsid cb309017-7bde-4799-861c-9b8e30f97a26 # 集群唯一标识符,与上面osdmap相同
last_changed 2020-04-03 11:51:32.819569
created 2020-04-03 11:50:17.737819
0: 10.0.0.114:6789/0 mon.ykrzf # mon.ykrzf 随机字符,作为mon的标识符
1: 10.0.0.115:6789/0 mon.ezhyx
2: 10.0.0.116:6789/0 mon.cuzwm

总结

  1. monitor提供权限、osd、主机、日志、告警等一系列集群管理服务,以上配置均可基于CLI命令实现,相关命令可参考ceph官方文档
  2. monitor采用基于Paxos实现的分布式一致性算法,实现自身消息传播的一致性
  3. monitor是一个采用多活策略的小型集群,保证自身高可靠性的同时也避免了集群规模较大时产生性能瓶

学习自:
《Ceph之RADOS设计原理与实现》 谢型果 严军
https://docs.ceph.com/docs/master/

posted @ 2020-04-14 11:06  佟晖  阅读(894)  评论(0编辑  收藏  举报