raft算法是一种分布式日志复制一致性算法。通过选举出leader确保集群的可用性。通过将请求保存为日志来确保数据一致性。
1.raft服务在启动时并未选出leader,所有服务器都可以发送候选者请求,并带上自己的任期号。每个节点上带有一个计时器,在一个计时器超时时间内,如果未选举出一个超过绝大部分票数的leader会重置计时器,并开启新一轮投票,直到选举出leader。
2.当leader选举出后,通过心跳机制,来确保其他节点,不会在任期内发起重新选举请求。如果follower节点在一个计时器超时时间内,未获得主节点的心跳信息,就会发起候选者请求。
3.RAFT通过将客户端的请求转化成日志追加到文件中,同时向从节点发送日志条目并附带了日志条目索引和任期。从节点将收到的日志条目进行匹配,如果不匹配就要求重新发送。当大多数的节点复制完成条目后,主节点会标记成已经提交,并返回结果给客户端。已提交的条目才可以被应用。