在 MongoDB 中,我有一个 2 成员副本集。一个掉下来,什么都不能连接
In MongoDB, I have a 2 member replicaset. One goes down, and nothing can connect
我有一个由 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);
这对您的场景来说是有效的行为。
根据 mongo 文档,需要构建至少包含 3 个成员的副本集。由于主要失败,因此次要没有法定人数来选举自己作为主人。而且这可能会导致危害,只需杀死次要并看到主要将降压,因此副本集将根本无法使用。
在您的设置中添加仲裁器以解决此问题。
More here
我有一个由 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);
这对您的场景来说是有效的行为。
根据 mongo 文档,需要构建至少包含 3 个成员的副本集。由于主要失败,因此次要没有法定人数来选举自己作为主人。而且这可能会导致危害,只需杀死次要并看到主要将降压,因此副本集将根本无法使用。
在您的设置中添加仲裁器以解决此问题。 More here