1

我有两个服务器,每个服务器都有一个 mongo 实例。

在第一台服务器上,我将 mongo 实例设置为主要服务器,而在第二台服务器上,我将 mongo 实例设置为次要服务器。

我没有机会让另一台服务器成为仲裁者。

我怎样才能在只有两个服务器的情况下使用 mongodb?

如果主要失败,次要自动成为主要?

谢谢!

4

2 回答 2

1

在副本集中拥有偶数个成员不是一个好习惯,因为它会导致选举问题。In order to be elected node is required to get majority of votes. 如果您有两个成员,则需要获得两票,如果至少有一个节点关闭,这是不可能的。有几种选择:

  1. 将轻量级仲裁节点添加到第一台或第二台服务器到replicaSet,因此您将在副本集中拥有三个成员。它不会阻止您在网络分区的情况下进行恢复,但它比只有两个节点副本集要好一些。

  2. 在主从模式下使用副本集,即没有自动恢复,您可以通过设置 votes:2 来实现它。如果primary宕机,你需要重新配置replica set并为secondary设置 votes:2,然后secondary会被选为primary。因此,您可以选择手动恢复。

于 2014-05-07T08:57:29.653 回答
1

我怎样才能在只有两个服务器的情况下使用 mongodb?

如果您真的想走这条路,我可能会补充说这是一条非常糟糕的路,那么您可以将您的主要成员设置为没有投票,在这种情况下,在发生故障转移时唯一的投票成员将是次要成员,但是,这会导致另一个问题。如果发生辅助故障转移,您将无法选出主要成员(任何成员的故障转移都会触发选举)。

因此,即使有 2 个成员,您可以考虑一次故障转移,但您不能同时考虑两者。

于 2014-05-07T08:32:51.760 回答