【问题标题】:In MongoDB, I have a 2 member replicaset. One goes down, and nothing can connect在 MongoDB 中,我有一个 2 成员副本集。一个掉下来,什么都连接不上
【发布时间】:2016-08-18 15:05:49
【问题描述】:

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

【问题讨论】:

  • 值得直接检查您的副本集的状态,看看故障转移是否有效 - 如果可能的话,不要只相信客户端已经切换。
  • @VinceBowdren 是的,做到了。剩下的服务器说是次要的,它无法连接到任何其他副本集成员。

标签: c# mongodb replicaset


【解决方案1】:

这是您的场景的有效行为。

根据 mongo 文档,需要构建一个副本集,其中至少有 3 个成员。由于主要失败,那么次要没有足够的人数来选举自己作为主人。此外这可能会导致伤害,只需杀死辅助并看到主将降级,因此副本集将根本不可用。

在您的设置中添加一个仲裁器来解决这个问题。 More here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    相关资源
    最近更新 更多