我有一个由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);
答案 0 :(得分:2)
这是您的方案的有效行为。
根据mongo docs,需要使用至少3个成员构建副本集。由于主要失败,然后二级没有选择自己作为主人的quora。此外,这可能会导致伤害,只是杀死次要,并看到主要将降级,所以副本集将根本不可用。
在您的设置中添加仲裁器以解决此问题。 More here