Ceph Monitor源码机制分析(三)—— 选举

Monitor的选举机制

Monitor要做的事情很明确了,就是管理、维护和发布集群的状态信息,但是为了避免单点故障或者性能热点问题,一般使用多个Monitor来做这一件事情,也就是管理层有多个成员。集群的正常运行,首先需要管理层达成一致,达成一致就需要有一个能拍板的monitor(leader),大家都听它的就行了。所以要达成一致核心问题就是在众多monitor中选出那个能拍板的monitor。Ceph解决这个问题的方法很简单,有点类似于领导人的选举,即有资格的monitor先形成一个quorum(委员会),然后委员会的成员在quorum这个范围内选出一个leader,集群状态信息的更新以及quorum成员的维护就有这个leader负责。Leader的选取规则也比较简单,每个monitor在初始化的时候都会根据它的IP地址被赋予一个rank值,当选举leader时,rank值最小的monitor胜出当选leader。当quorum成员发生变化时(增加或者减少),都会触发重新选举流程,再选出一个leader。

整个Monitor的选举过程也是Monitor根据以下状态机进行状态变化的过程:

即Monitor在启动之后,会根据monmap发现其他的monitor并获取其他monitor的monmap、paxos版本等信息,然后酌情syncronize数据并触发quorum范围内的选举,选举之后monitor要么成为Leader要么成为Peon,直到服务停掉。

 

这么说还是有点笼统,让我们用代码说话吧,当然你得学会看代码。选举的入口函数是Monitor::start_election(),查一下调用这个函数的代码,不难看出会在以下三种情况发生时,调用它:

  • Monitor::handle_probe_reply(), monitor进行bootstrap时,首先会向monmap中所有的成员发送MMonProbe消息,然后在收到peer返回的probereply时,会根据返回的quorum信息以及paxos版本来判定是否需要发起选举。
  • Elector::handle_propose(),这个是在收到别的monitor发过来的选举请求消息时,会根据情况触发重新选举。
  • Mon
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值