我正在编写一个托管云堆栈(在EC2等硬件级云提供商之上),我将很快面临的一个问题是:
几个相同的节点如何决定哪一个成为主节点?(即想想在EC2上运行5台服务器.其中一台服务器必须成为主服务器,其他服务器必须成为服务器.)
我阅读了MongoDB使用的算法的描述,它看起来相当复杂,并且还取决于投票的概念 - 即单独留下的两个节点将无法做出任何决定.他们的方法在产生结果之前也有很长的延迟.
我想知道是否有任何不那么复杂的KISS-embrasing方法?它们被广泛使用,还是有风险采用?
假设我们已经有一个服务器列表.然后我们可以选择一个正在运行且具有数字最小的IP地址的那个.这种方法的缺点是什么?
为什么MongoDB的算法如此复杂?
这是如何选择群集中的新主人的副本?这提供了更少的细节,并且在6个月内没有得到回答,所以我觉得开始一个新问题是合适的.
(我正在开发的堆栈是开源的,但是它处于开发的早期阶段,所以不在这里提供链接.)
更新:基于答案,我设计了一个简单的一致性算法,你可以在GitHub上找到一个JavaScript(CoffeeScript)实现:majority.js.
使用Apache ZooKeeper.它解决了这个问题(还有更多).