当前位置: 首页 > 面试题库 >

如何选举集群中的新硕士?

罗凯
2023-03-14
问题内容

我正在编写一个托管云堆栈(在诸如EC2之类的硬件级云提供程序之上),我不久将面临的一个问题是:

几个相同的节点如何确定其中一个成为主节点?(即,考虑在EC2上运行的5台服务器。其中一台必须成为主服务器,而其他服务器必须成为从服务器。)

我阅读了MongoDB使用的算法的说明,它看起来非常复杂,并且还取决于投票的概念—即,两个单独的节点将无法决定任何事情。同样,他们的方法在产生结果之前有很大的延迟。

  1. 我想知道是否有没有那么简单的KISS拥抱方法?它们被广泛使用还是被冒险使用?

  2. 假设我们已经有一个服务器列表。然后,我们可以选择数量最多且具有最小IP地址的地址。这种方法的缺点是什么?

  3. 为什么MongoDB的算法如此复杂?

这与“ 如何在群集中选举新的硕士”重复 ,因为它提供的详细信息较少,而且已经六个月没有得到回答,所以我觉得开始一个新问题是合适的。

(我正在使用的堆栈是开源的,但是它处于开发的早期阶段,因此这里不提供链接。)

更新:根据问题的答案,我设计了一个简单的共识算法,可以在Github上找到一个JavaScript(CoffeeScript的)实现:majority.js


问题答案:

领导者选举算法通常将裂脑视为要支持的故障案例。如果您认为不是节点故障而是网络故障,则可能会遇到所有节点都启动但无法互相通信的情况。然后,您可能会得到两个大师。

如果您可以从故障模型中排除“裂脑”(即,如果仅考虑节点故障),则您的算法(领导者是地址最小的那个)就可以了。



 类似资料:
  • 第一面 在腾讯会议里面试,个人感觉问问题的顺序很乱,一会问这一块一会问那一块,可能是面试官自己的风格吧。比较深挖实习和项目,比较少八股文,写一些自己还记得的。 自我介绍 聊实习中做的功能,流量有多大,深挖具体细节 项目角色问题(自己做的比较简单,没有区分用户和管理员) 项目是否部署到云服务器 项目中保持缓存与数据库一致如何实现的 Redis数据结构 Redis命令 Git命令,遇到过合并冲突吗 0

  • 关于ActiveMQ Artemis中筛选的一个问题。 在broker.xml中的标记下 当我阅读手册时,更改broker.xml时,现在应该每5秒在broker.xml中重新配置一次。 但当我将过滤器更改为

  • 我通过以下方式进行身份验证 首先,我通过以下方式对AWS进行身份验证 我刚刚发现我可以用下面的命令重新配置,但我很好奇这是否是处理它的正确方法,以及是否有任何其他AWS方法提供。

  • 我有以下设置:< br> 3个kafka broker和3个zookeeper ensamble 1个主题,有12个分区和3个副本(因此每个Kafka broker是4个分区的领导者)< br > 我停止了其中一个代理-它从集群中删除,其分区的领导被转移到剩余的两个代理 我重新启动代理——它重新出现在集群中,最终领导权重新平衡,因此每个代理都是4个分区的领导者。 它工作正常,除了我发现在重新平衡之

  • 问题内容: 我需要重命名集群中的几个索引(它们的名称必须更改,我不能使用alias)。 我看到没有支持的方法来执行此操作,我发现最接近的方法是重命名索引的目录,我在集群中尝试了此方法。 该集群有3台计算机,并且分片在每台计算机上复制。我关闭了上elasticsearch ,改名到并重新启动。 群集的状态为黄色,elasticsearch正在做一些魔术来恢复正确的状态。过了一段时间我最终 正在使用和

  • 我需要重命名集群中的多个索引(必须更改它们的名称,我不能使用别名)。 我看到没有支持的方法可以做到这一点,我找到的最接近的方法是重命名索引的目录,我在集群中尝试了这个方法。 集群有 3 台机器 、 和 ,每个机器上都复制了分片。我关闭了上的弹性搜索,将重命名为,然后重新启动。 集群的状态是黄色的,弹性搜索正在使用一些魔法来恢复正确的状态。过了一段时间,我最终得到了 可用且完全复制(我猜是从和恢复的