在MongoDB中,我有一个2成员复制集.一个倒下了,没有东西可以连接

本文关键字:一个 连接 有一个 MongoDB 成员 复制 | 更新日期: 2023-09-27 18:02:54

我有一个由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);

在MongoDB中,我有一个2成员复制集.一个倒下了,没有东西可以连接

对于您的场景,这是一个有效的行为。

根据mongo文档,一个副本集需要至少包含3个成员。当初级失败时,二级就没有quora来选举自己为大师了。此外,这可能会导致伤害,只要杀死次要的,看到主要的将会下降,所以副本集将无法使用。

在你的设置中添加一个仲裁者来解决这个问题。这里