5 台服务器怎样选出 leader(推举算法)

打印 上一主题 下一主题

主题 804|帖子 804|积分 2412

1. Bully 算法

Bully 算法是一种经典的领导者推举算法,实用于同步体系。该算法的基本思想是,节点通过相互比较历程号(或优先级)来决定谁成为新的领导者。具有最大历程号的节点会被推举为领导者。
Bully 算法的步骤:


  • 初始化: 每个节点都有一个唯一的标识符(ID),通常使用历程号或优先级表示。
  • 检测失效: 当某个节点检测到当前的领导者失效(比方,未相应心跳检测或超时),它将开始一个推举过程。
  • 发起推举: 发现领导者失效的节点(称为发起者)会向所有比它自己ID大的节点发送“推举”消息。如果没有比它大的节点存在,发起者公布自己为新的领导者。
  • 相应推举: 收到推举消息的节点会返回一个相应,表示它们存在且活跃,并启动自己的推举过程。
  • 重复步骤: 这些新发起的推举消息会在整个网络中传递,直到找到一个没有更大ID的节点,该节点公布自己为领导者。
  • 公布胜利: 推举竣事后,新的领导者向所有节点发送一个“胜利”消息,通知它是新的领导者。
Bully 算法在 5 台服务器中的应用:

假设有 5 台服务器,ID 分别为 1, 2, 3, 4, 5。服务器5失效后,服务器4检测到没有收到来自服务器5的心跳信息,于是发起推举。服务器4向服务器1、2、3发送“推举”消息,没有比它ID大的服务器相应它,因此服务器4公布自己为新的领导者。
优点:


  • 简单易懂,易于实现。
  • 可以或许敏捷推举出新的领导者。
缺点:


  • 消息复杂度较高,特殊是在大型网络中。
  • 如果有多个节点同时发起推举,会导致大量的消息通讯。
2. Ring 算法

Ring 算法是一种实用于环形拓扑的推举算法。它假设所有节点都构造成一个环,每个节点只知道其邻人节点。
Ring 算法的步骤:


  • 初始化: 所有节点形成一个环,每个节点只有一个邻人。
  • 发起推举: 任何一个节点检测到领导者失效时,都可以发起推举。发起推举的节点会发送一个包罗自己ID的推举消息给下一个节点。
  • 传递消息: 每个收到推举消息的节点,会比较消息中的ID和自己的ID。如果消息中的ID更大,则继承传递消息;如果自己的ID更大,则替换消息中的ID,并继承传递。
  • 选出领导者: 当消息回到发起推举的节点时,消息中的ID就是新选出的领导者ID。
  • 公布胜利: 新的领导者节点向所有节点发送“胜利”消息,公布推举竣事。
Ring 算法在 5 台服务器中的应用:

假设5台服务器依次排列成一个环形,ID分别为1, 2, 3, 4, 5。当服务器1检测到领导者失效时,它发送包罗自己ID的推举消息给服务器2。消息依次传递,服务器5的ID最大,所以它将会被选为新的领导者,并向所有服务器公布胜利。
优点:


  • 消息传递简单,通讯复杂度较低。
  • 实用于对等网络。
缺点:


  • 环形拓扑可能不实际或不高效。
  • 在节点较多的环境下,延长较高。
3. Paxos 算法

Paxos 算法是一种分布式共识算法,实用于异步体系。Paxos 的目的是在分布式体系中告竣一致意见,即使某些节点失效或网络分区。
Paxos 算法的步骤:


  • 提案阶段(Prepare Phase): 提议者节点选择一个提案编号,然后向所有参与者节点发送“准备(Prepare)”哀求。
  • 准备相应(Promise Phase): 如果一个参与者节点没有收到比该提案编号更高的哀求,它会承诺不担当编号更低的提案,并回复一个承诺消息。
  • 担当提案(Accept Phase): 提议者收到大多数参与者的承诺后,发送“担当提案(Accept)”哀求,包罗提案编号和提议的值。
  • 提交阶段(Commit Phase): 当一个参与者节点收到“担当提案”哀求,并未承诺过比该提案编号更高的提案,它就会担当该提案。若大多数参与者担当了该提案,体系告竣共识,选出新的领导者。
Paxos 算法在 5 台服务器中的应用:

在5台服务器中,假设服务器1作为提议者。它选择一个提案编号,然后向服务器2、3、4、5发送准备哀求。如果服务器2、3、4返回承诺消息(假设服务器5失效),服务器1就可以发送“担当提案”哀求。服务器2、3、4担当该提案,新的领导者被选出。
优点:


  • 容错能力强,可以或许容忍部门节点失效。
  • 在网络分区的环境下仍能保持一致性。
缺点:


  • 实现复杂,明白难度高。
  • 消息开销大。
4. Raft 算法

Raft 是一种比 Paxos 更轻易明白的共识算法,同样用于解决分布式体系中的一致性问题。Raft 的紧张目的是使得分布式共识变得更易明白。
Raft 算法的步骤:


  • 推举阶段(Election Phase): 当服务器检测到领导者失效时,它会进入候选状态,并开始一个新的推举周期,增加自己的任期号,向其他服务器哀求投票。
  • 投票阶段(Voting Phase): 其他服务器在一个推举周期内只能投给一个候选者。候选者如果得到多数服务器的投票,就成为新的领导者。
  • 日志复制阶段(Log Replication Phase): 领导者将日志条目复制到其他服务器中(称为跟随者),并在大多数服务器已写入日志时提交该日志。
  • 心跳机制(Heartbeat Mechanism): 领导者定期向跟随者发送心跳消息以防止新的推举。
Raft 算法在 5 台服务器中的应用:

在5台服务器中,服务器3检测到领导者失效后,进入候选状态,并增加自己的任期号,向其他服务器发送推举哀求。假设服务器1和2投票给服务器3,服务器3得到多数票,成为新的领导者。之后,服务器3会复制日志到服务器4和5,保持数据一致性。
优点:


  • 易于明白和实现。
  • 能快速推举出领导者并保持数据一致性。
缺点:


  • 在网络分区或多节点失效的环境下,性能可能下降。
5. ZooKeeper 的 Zab 协议

ZooKeeper 使用 Zab(ZooKeeper Atomic Broadcast)协议来确保其分布式体系的一致性。Zab 是一种崩溃恢复协议,旨在在集群中实现高可用性和一致性。
Zab 协议的步骤:


  • 探测阶段(Discovery Phase): 当 ZooKeeper 启动或检测到领导者失效时,进入探测阶段。所有服务器尝试发现并连接到一个领导者。
  • 同步阶段(Synchronization Phase): 一旦发现了领导者,所有服务器同步其状态到最新的提议。
  • 广播阶段(Broadcast Phase): 领导者在接收到新哀求时,将事务广播给所有从服务器。
  • 恢复阶段(Recovery Phase): 如果领导者失效,从服务器将重新进入探测阶段寻找新的领导者。
Zab 协议在 5 台服务器中的应用:

在5台服务器的ZooKeeper集群中,如果领导者失效,服务器重新进入探测阶段寻找新的领导者。选出新的领导者后,所有服务器同步状态,然后继承正常运行。
优点:


  • 提供崩溃恢复和一致性保障。
  • 支持大规模分布式体系。
**缺点:
**


  • 实现复杂,需保证状态同步和故障恢复。
总结

在分布式体系中,推举算法确保了体系的高可用性和一致性。在5台服务器的集群中,不同的推举算法有各自的实用场景和上风。Bully和Ring算法适合简单的同步体系,Paxos和Raft更适合异步体系和复杂的分布式环境。ZooKeeper的Zab协议则在实际的分布式应用中得到了广泛应用。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表