2

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

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

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

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

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

谢谢!伊格纳西奥。

4

1 回答 1

0

你的方法也行不通。如果具有 2 个仲裁器的机器出现故障,另一台机器将只能为其副本投两票。但是在这种配置中需要三票来选举主节点。这并不比只选择其中一台机器来托管一个仲裁器更好。

节点数为偶数的情况下无法保证初选。您必须容忍在您的应用程序中没有主节点的可能性(进入只读模式),或者添加第三台计算机。

只有两台机器,我会考虑将仲裁器放在两台机器中更好的机器上(无论如何它们都应该托管主要机器)。在这个设置中,

  1. 当辅助节点变得不可用时,主节点将继续运行。
  2. 当主节点变得不可用但仲裁器仍在运行时,辅助节点将成为主节点。
  3. 当主节点和仲裁节点都变得不可用时(例如,整个机器变得不可用),那么从节点将保持从节点,并且不会有主节点。

我发现场景 3 比场景 2 更常见。为了解决这个问题,您可以考虑使用 MongoMMS(或其他东西)来监控集群,以便尽快调查任何节点不可用(特别是场景 3)。

于 2014-09-25T16:53:51.260 回答