1. Raft协议[分布式一致性算法]
- : 跟随者
leader
: 领导者
2. 过程
- 当某个节点经历完
election timeout
成为candidate后,开启新的一个选举周期,他向其他节点发起投票请求(Request Vote),如果接收到消息的节点在该周期内还没投过票则给这个candidate投票,然后节点重置他的election timeout。 - 当该candidate获得大部分的选票,则可以当选为leader。
- leader就开始发送给其他follower节点,这个消息会在内部指定的
heartbeat timeout
时间内发出,follower收到该信息则响应给leader。 - 这个选举周期会继续,直到某个follower没有收到心跳,并成为candidate。
- 首先一个客户端发送一个更新给leader,这个更新会添加到leader的日志中。
- 然后leader会在给follower的下次心跳探测中发送该更新。
- 一旦大多数follower收到这个更新并返回给leader,leader提交这个更新,然后返回给客户端。
- 当发生网络分区的时候,在不同分区的节点接收不到leader的心跳,则会开启一轮选举,形成不同leader的多个分区集群。
- 当客户端给不同leader的发送更新消息时,不同分区集群中的节点个数小于原先集群的一半时,更新不会被提交,而节点个数大于集群数一半时,更新会被提交。