algorithm - 如何在集群中运行的节点中选举主节点?

标签 algorithm cloud

我正在编写一个托管云堆栈(在 EC2 等硬件级云提供商之上),我很快将面临的一个问题是:

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

我阅读了 the algorithm used by MongoDB 的描述,这看起来很复杂,而且还取决于投票的概念——即两个单独的节点将无法决定任何事情。此外,他们的方法在产生结果之前有明显的延迟。

  1. 我想知道是否有任何不那么复杂的 KISS 拥抱方法?它们是否被广泛使用,或者采用它们是否存在风险?

  2. 假设我们已经有了一个服务器列表。然后我们可以只选出一个已经启动并且具有数字最小 IP 地址的。这种方法有什么缺点?

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

这是 How to elect new Master in Cluster? 的副本, 给出的细节较少,并且已经 6 个月没有得到回答,所以我觉得开始一个新问题是合适的。

(我正在研究的堆栈是开源的,但它处于开发的早期阶段,所以这里不提供链接。)

更新:基于答案,我设计了一个简单的共识算法,您可以在 GitHub 上找到一个 JavaScript (CoffeeScript) 实现:majority.js .

最佳答案

领导者选举算法通常考虑 split brain作为故障案例来支持。如果您假设不是节点而是网络发生故障,您可能会遇到所有节点都已启动但无法相互通信的情况。然后,您可能会得到两个主人。

如果您可以从您的故障模型中排除“裂脑”(即,如果您只考虑节点故障),您的算法(领导者是具有最小地址的算法)就没问题。

关于algorithm - 如何在集群中运行的节点中选举主节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3085926/

相关文章:

database - 出生日期如 "YYYY-00-00"/"00/00/YYYY"

重新包装硬包装文本的算法?

azure - Windows Azure 和 SFTP

postgresql - Postgres Plus 云数据库与亚马逊关系数据库服务 (Amazon RDS)

cloud - Google Cloud Health Check 淹没了我的虚拟机?

swift - split 法算法

c++ - 三角形类 C++

javascript - 树结构的转换

mysql - 用于扩展后端的正确架构

azure - 在 Dev Fabric 中测试 Azure 应用程序