在MongoDB中,我有一个2成员复制集。一个下降,没有任何东西可以连接

时间:2016-08-18 15:05:50

标签: c# mongodb replicaset

我有一个由2台服务​​器组成的复制集。测试故障转移时,我关闭了主服务器。我希望所有客户都能开始点击其他服务器。相反,他们不断尝试击中初级和超时。中学从不选择自己的主要。

要么我错误地配置客户端,要么mongo副本集需要三台服务器才能进行任何故障转移。哪一个?这是我的配置。

var settings = new MongoClientSettings
{
    Credentials = new[] { credential },
    ConnectionMode = ConnectionMode.ReplicaSet,
    WriteConcern = WriteConcern.WMajority,
    WaitQueueTimeout = TimeSpan.FromMinutes(30),
    MaxConnectionPoolSize = 3000

};

string[] hosts = ConfigurationManager.AppSettings["MongoServerIpsSemiColonSeparated"].Split(';');
var servers = hosts.Select(x => new MongoServerAddress(x)).ToList();
settings.Servers = servers;
settings.ReplicaSetName = ConfigurationManager.AppSettings["NameOfReplicaset"];

Client = new MongoClient(settings);

1 个答案:

答案 0 :(得分:2)

这是您的方案的有效行为。

根据mongo docs,需要使用至少3个成员构建副本集。由于主要失败,然后二级没有选择自己作为主人的quora。此外,这可能会导致伤害,只是杀死次要,并看到主要将降级,所以副本集将根本不可用。

在您的设置中添加仲裁器以解决此问题。 More here