【发布时间】:2010-12-23 23:22:18
【问题描述】:
我正在编写一个托管云堆栈(在 EC2 等硬件级云提供商之上),我很快将面临的一个问题是:
几个相同的节点如何决定其中哪一个成为主节点? (即考虑在 EC2 上运行 5 台服务器。其中一台必须成为主服务器,而其他服务器必须成为从服务器。)
我阅读了the algorithm used by MongoDB 的描述,它看起来很复杂,并且还取决于投票的概念——即两个节点单独放置将无法决定任何事情。而且他们的方法在产生结果之前有很大的延迟。
我想知道是否有任何不那么复杂的、包含 KISS 的方法?它们被广泛使用,还是有风险?
假设我们已经有一个服务器列表。然后我们可以只选择一个启动并具有数字最小的 IP 地址的那个。这种方法有什么缺点?
MongoDB的算法为什么这么复杂?
这是How to elect new Master in Cluster?的重复,提供的细节较少,已经6个月没有回答了,所以我觉得开始一个新的问题是合适的。
(我正在开发的堆栈是开源的,但它处于开发的早期阶段,所以这里不提供链接。)
更新:根据答案,我设计了一个简单的共识算法,你可以在 GitHub 上找到一个 JavaScript (CoffeeScript) 实现:majority.js。
【问题讨论】: