仅使用2台服务器在MongoDB中使用副本集的最佳方法

时间:2014-09-25 16:16:02

标签: mongodb fault-tolerance replicaset

我将为使用MongoDB的生产环境使用2服务器解决方案。

如果我理解正确,我可以拥有1个副本集,其中包含2个节点,每个服务器一个节点。 现在,为了使容错能够重新分配新的主节点,我需要一个仲裁节点。

由于我仍然想使用2台服务器,如果持有仲裁节点的服务器出现故障,则无法设置新的主服务器。

我提出的解决方案是拥有3个仲裁节点。 1在一台服务器,另外2在另一台服务器。这样,如果任何服务器出现故障,另一台服务器的非仲裁节点将成为主服务器。

这是对的吗? 我应该使用其他解决方案吗?

谢谢! 伊格纳西奥。

1 个答案:

答案 0 :(得分:0)

你的方法也不会奏效。如果具有2个仲裁器的机器发生故障,另一台机器将只能为其副本投两张票。但是在这种配置中需要三票才能选出主要票。这并不比挑选其中一台机器来托管单个仲裁器更好。

使用偶数个节点无法保证初选。您必须要么容忍在应用程序中没有主数据库(进入只读模式),或者添加第三台机器。

只有两台机器,我会考虑把仲裁器放在两台机器上(这应该是托管主机器)。在此设置中,

  1. 当辅助设备不可用时,主设备将继续运行。
  2. 当主要设备不可用但仲裁器仍然启动时,辅助设备将成为主设备。
  3. 当主要和仲裁者都变得不可用时(例如整个机器变得不可用),那么辅助设备将保持次要状态,并且不会有主设备。
  4. 我发现方案3比方案2更常见。为了解决这个问题,您可以考虑使用MongoMMS(或其他方式)来监控群集,以便任何节点不可用(特别是方案3)都可以尽快调查。