小编典典

如何在集群中运行的节点中选择一个主节点?

algorithm

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

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

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

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

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

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

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

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

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


阅读 625

收藏
2020-07-28

共1个答案

小编典典

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

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

2020-07-28