raft协议

2023-01-18  本文已影响0人  mafa1993

etcd的raft协议

弱一致性(投票时部分同意即可),强稳定性。可通过修改配置改为强一致性

  1. 客户端发送一个请求到服务器,服务器将数据记录到日志模块,并且一致性模块发送请求到所有节点,各个节点记录到日志模块,并返回是否确定,如果大于一半确定,就将数据写到状态机
  2. raft协议过程
    • 开始所有节点都是fllower节点,等待主节点指令,一段时间(election timeout,每个节点的不同,为了减少所有节点同时发生选举的情况,150-300ms的随机值)内没有收到指令,就会变成candidation(候选节点),候选节点向其他节点发送请求,进行拉票,接收大都请求的节点进行回复,是否选他,超半数当选
    • 所有的数据更新请求都是发送给主节点,主节点先将数据写到日志,然后把数据发送给从节点,从节点返回确定信息,超过半数节点确认,主节点就把数据写到存储,并通知从节点确认
    • 当主节点当选后,就会发送心跳包,来确认存活
    • 如果偶数个节点,然后
    • 数据的同步会和心跳包一起发送给子节点
    • 如果有多个节点,然后产生了网络隔离,分成了两个部分,节点数不超过一半的部分不能同步数据,超过一半的能选举新的leader,系统有两个leader存在,新的主节点任期比老的高,如果网络恢复,任期高的主节点会成为新的主节点
    • etcd强一致性和弱一致性可以通过配置修改
  3. learner
    • raft 4.2.1引入的新角色,在etcd集群需要增加节点的时候,新节点的数据为空,会发生数据的同步,可能导致带宽耗尽,从而导致心跳发送失败,就会产生leader的重新选举,可能会导致系统不可用。因此引入learner节点,只接收数据不参与投票,新加入的节点,默认为learner,learner的加入不会导致集群的quorum(实例数量)改变
上一篇下一篇

猜你喜欢

热点阅读