Raft集群流程

一 ,启动后

1.每个节点都有一个集群的配置,配置了集群所有节点的ip和端口

        扩展点:可以动态的增加集群节点并写入到配置

2.启动后节点监听一个端口,等待Leader的心跳

        如果收到心跳后,更新Leader信息,并刷新心跳时间        

        如果一段时间没有收到心跳,则发起选举

二,选举

1.选举的触发①一段时间内没有收到Leader的心跳  ②自己是Leader但是收到了选举信息相同的心跳

2.选举开始后,节点的角色变为候选者,并且将term+1 ,启动客户端链接将选举信息发送给集群的其他节点,其他节点收到选举消息后,将回复第一个选举消息,表示同意,后续的选举消息则拒绝,并返回第一次同意的候选者信息

3.统计票数,超过半数票的成为leader,并开始发送心跳到各个FLLower

4.如果其中节点断连,只剩下发起选举的节点,为了避免集群长时间不工作,可以直接晋升为Leader,也就是除了自己,其他节点都没有上线,则直接成为Leader

三,同步

1.收到心跳时,有两种情况,一种是Leader信息和任期信息不一致,此为初次收到该leader的心跳,则Follower发起快照同步,第二种是后续心跳,只需更新心跳时间即可

2.Leader收到写请求,需主动同步到各个Follower

问题:

如何解决单节点判断以及两个节点时的快速成为集群

需要实现半数统

你可能感兴趣的:(Java从开发到设计,zookeeper,p2p,java)