raft算法 一致性算法 领导选举
节点 三种状态 leader candidate follow 都是有主节点(lead)发送信息到每个节点 维持心跳 每个节点都有自己的自旋时间 当lead节点死机或网络问题没用发送信息到follow节点 follow节点开始自旋150ms~300ms 变为candidate开启leader选举 竞选leader 即成为candidate的节点向所有节点发起投票 每个节点只能投一次票 那个candidate先发送到 即投那个candidate的票 自己先投自己一票 如果多个candidate票数相同 即重新开始新的选举
日志复制
指leader节点把改变复制给所有follwer节点 通过日志的方式 每一个心跳发出去
客户端发送一个请求到主节点(set 5) 即主节点现在是未提交的(set 5) 再又主节点下个心跳发送给所有follower节点 给所有节点同步(set 5) 然后大多数节点回复给主节点接收到(set 5)未提交 主节点提交(set 5) 响应给客户端 再又主节点下个心跳发送给所有follower节点 给所有节点同步(set 5)已提交
网络分区也可以保存一致性 分区上3下2 当下节点要改变数据由于只有两个节点不占多少 即不会成功 当合并 遵循轮数多的leader节点为新的leader节点
即分区成功的 leader需要大多数follower