MongoDB C#驱动程序:用于在副本集上进行分片的连接字符串

时间:2013-09-20 17:12:59

标签: c# mongodb connection-string replication sharding

我需要按照MongoDB参考中的建议设置分片副本集,以获得高可用性&可扩展性。在这种情况下,我对C#驱动程序的连接字符串及其行为几乎没有疑问(下面的代码片段):

  1. 下面的连接字符串是否适合连接到mongos实例:mongos1,mongos2& mongos3?

  2. 如果其中一个mongos实例崩溃,客户端会发生什么?通过重试第二个mongos实例来优雅地处理失败的呼叫吗?客户端是否将失败的mongos实例列入黑名单并在某个时间后尝试?

  3. 如果我想设置readpreference,驱动程序是否会知道副本集的存在和荣誉设置ReadPreference?

  4. 代码段:

            MongoUrlBuilder bldr = new MongoUrlBuilder();
            List<MongoServerAddress> servers = new List<MongoServerAddress>();
            servers.Add(new MongoServerAddress("mongos1:27016"));
            servers.Add(new MongoServerAddress("mongos2:27016"));
            servers.Add(new MongoServerAddress("mongos3:27016"));
    
            bldr.Username = "myuser";
            bldr.Password = "mypwd";
            bldr.Servers = servers;
            bldr.DatabaseName = "mydb";
    
            bldr.ReadPreference = ReadPreference.Primary;
    
            var server = MongoServer.Create(bldr.ToMongoUrl());
    

1 个答案:

答案 0 :(得分:5)

1)是的,这很好。请注意,所有这些都可以放在实际的连接字符串中。 mongodb的://为myuser:MYPWD @ mongos1:27016,mongos2:27016,mongos3:27016 / MYDB / readPreference =主

2)建立连接字符串的方式,你将在3个mongos上进行负载均衡。如果一个发生故障,那么另外两个将开始接收更多流量。但是,错误将发生,并且不会自动重试任何内容。您需要处理错误并根据每个查询/写入做出是否可以安全重试。

3)驱动程序在与分片系统通信时,只会将读取首选项转发给mongos。请注意,mongos 2.2版在阅读偏好方面存在一些困难。我建议你进入2.4线。