分布式协调与同步之分布式选举

分布式选举的原因

分布式系统中需要一个主节点,该节点用于负责对其他节点进行协调和管理。同时主节点的存在能够保证分布式集群数据的一致性。

分布式选举算法

1. Bully算法

选举原则:偏向于让ID更大的节点作为集群的leader

前提条件:假设集群中所有节点都知道其他节点的id

消息类型/节点状态

  election消息,用于发起选举

       alive消息,用于对election消息的应答

       victory消息,竞选成功的主节点向其他节点发送宣誓主权的消息

选举过程

  触发条件: ID比当前主节点大的节点加入集群,主节点故障

       具体过程: 

       (1) 每个节点判断自己的ID是否最大,最大则直接发送victory消息

       (2) 如果ID不是最大的,则向比自己id大的节点发送election消息

       (3) 在给定时间范围内,本节点没有收到其他节点回复的alive消息,则认为自己是主节点,并向其他节点发送victory消息;若收到alive消息,则等待其他节点的victory消息

       (4) 收到比本节点id小的节点发送的election消息则回复一个alive消息

优缺点

  优点: 选举速度快,算法复杂度低,简单易实现

       缺点:每个节点额外存储信息较多,任意一个ID比前主节点大的节点加入时都会触发重新选举过程

软件举例: MongoDB

2. Raft算法

选举原则:获得多数投票的集群节点成为leader

前提条件:假设集群中所有节点之间都能相互通信

消息类型/节点状态

  leader: 主节点

       candidate:候选者,每个节点都可以成功候选者

       follower:leader的跟随者

选举过程

  触发条件: leader任期到了,新节点加入集群或者主节点故障

       具体过程: 

       (1) 初始化所有节点为follower,开始选举时有follower转化为candidate,并向其他节点发送选举消息

       (2) 收到消息的节点进行投票,票数超过一半的节点成为主节点,其他节点由candidate降为follower

优缺点

  优点: 选举速度快,算法复杂度低,简单易实现,当有新节点加入或者节点故障恢复时不会触发真正的切主

       缺点:每个节点之间都需要相互通信,所以通信量较大

软件举例: ETCD

 3. ZAB(Zookeeper Atomic Broadcast)选举算法

选举原则:少数服从多数,节点id大的或者数据最新的优先成为主节点

消息类型/节点状态

       投票信息 <epoch, vote_id, vote_zxID>

  leader: 主节点

       follower:leader的跟随者

       observer: 观察者,无投票权

      Looking,Following,Leading,Observing

优缺点

  优点: 稳定性较好,性能较好

       缺点:容易出现广播风暴,投票时间较长,复杂度较高

软件举例:zookeeper

总结图

说明:

 本文是极客时间付费课程《分布式技术原理与算法解析》笔记

posted on 2020-02-10 14:18  BattleScars  阅读(608)  评论(0编辑  收藏  举报