考虑以下设置:
有两个物理服务器,它们被设置为一个常规的mongodb复制集(包括一个仲裁器进程,因此自动故障转移将正常工作)。
现在,据我所知,大多数实际工作将在主服务器上完成,而从服务器将主要只做保持其数据集同步的工作。
将分片引入到此设置中是否合理,即在相同的两台服务器上设置另一个复制集,以便每个服务器都有一个作为主进程运行的一神型进程和一个作为辅助进程运行的进程。
预期的结果是,当两台服务器都启动时,两台服务器将分担实际查询/插入的工作负载。在其中一台服务器出现故障的情况下,整个设置应该优雅地进行故障转移以继续运行,直到另一台服务器恢复。
除了设置中的总体开销和进程数量(mongos/configservers/仲裁器)之外,这种设置是否有任何缺点?
发布于 2010-09-08 03:40:14
这肯定能行得通。我之前在#mongodb IRC频道上问过一个问题,那就是在一台机器上运行多个mongod进程是不是一个坏主意。答案是“只要你有RAM/CPU/带宽,就疯狂吧”。
值得注意的是,如果你正在寻找高性能的读取,并且不介意写得慢一点,你可以:
这将得到一个类似于MySQL的集群设置--在主服务器上只写一次,但是任何从服务器都有资格进行读取。在读取比写入多得多的情况下(比方说,一个数量级),这可能是更高的性能,但我不知道当一个节点关闭时它会如何表现(因为写入可能会停止尝试写入3个节点,但只有2个节点启动,等等-这将需要测试)。
发布于 2013-03-14 12:35:06
需要注意的一件事是,当两台机器都启动时,您的查询将在它们之间拆分。当一台机器宕机时,所有的查询都将转到剩余的机器上,从而使对它的需求加倍。您必须确保您的机器能够承受突然加倍的查询。
发布于 2010-09-10 05:28:52
您缺少一个关键的细节:如果您有一个只有两个物理节点的分片设置,如果其中一个节点失效,您的所有数据都将丢失。这是因为在分片层下面没有任何冗余(推荐的方式是每个分片由一个副本集组成)。
但是,您所说的关于副本集的内容是正确的:您可以在两个无共享的节点上运行它,并且有一个额外的仲裁器。但是,建议的设置是3个节点:一个主节点和两个辅助节点。
http://www.markus-gattol.name/ws/mongodb.html#do_i_need_an_arbiter
https://stackoverflow.com/questions/3660514
复制相似问题