2016-08-18 70 views
1

我有一个包含2个服务器的复制组。在测试故障转移时,我关闭了主服务器。我希望所有的客户端都可以开始访问其他服务器。相反,他们一直试图击败主要和超时。中学从来没有选择自己的主要。在MongoDB中,我有一个2成员replicaset。一个倒下,没有任何东西可以连接

要么我错误地配置客户端,要么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

它是值得直接检查您的replicaset的状态,以查看故障转移是否有效 - 不要只相信客户端已经切换,如果可能的话。 –

+0

@VinceBowdren Yup,做到了。剩下的服务器表示次要的,并且它不能连接到任何其他副本集成员。 – Nikhil

回答

2

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

按照mongo文档,一个副本集需要建立至少3个成员。由于主要失败,中学没有选择自己作为主人的时间。此外,这可能会导致伤害,只是杀死中学,并看到主要将降级,所以副本集将无法使用。

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

相关问题