选举触发条件
1)mon启动,bootstrap过程中;
2)处理其它mon选举消息过程中,如果自身满足条件,也会发起选举;
3)ceph命令触发quorum变动时;
通常是前2种情况
选举原则
1、发起选举的monitor会给monmap中的其它mon发送OP_PROPOSE消息,收到消息的mon决定是否投票(回复OP_ACK消息)给当前mon;
2、发起选举的mon会首先投自己一票;
3、如果收到OP_PROPOSE消息的monitor的rank更小,不会投票回复OP_ACK消息,会自己发起选举、或者已经发起选举等待自己选举成功;
4、monitor只会投票给比自己rank值小的monitor;
5、monitor收到多个OP_PROPOSE消息时,如果已经投票给rank更小的mon,则不会投票给当前mon;如果之前投票的mon rank值较大,则也会再次投票给当前mon;
6、投票给了其他mon,如果自己曾发起了选举,结束自己的选举(electing_me置为false,清空acked_me);
7、如果在选举过程中,monmap中存在monitor无法连接(down掉,网络异常等),通常要等到选举超时(5s)才会选举成功;
8、epoch为奇数代表选举中,为偶数代表稳定状态;
最终结果
Rank值最小的mon获胜,成为leader。