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

本文关键字:字符串 连接 驱动程序 用于 副本 MongoDB | 更新日期: 2023-09-27 18:32:14

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

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

  2. 如果其中一个 mongos 实例崩溃,客户端会发生什么情况?通过重试第二个 mongos 实例,失败的调用是否会得到妥善处理?客户端是否将失败的 mongos 实例列入黑名单并在一段时间后尝试?

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

代码片段:

        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());

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

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

2) 连接字符串的构建方式,你将在 3 个 mongo 之间进行负载平衡。 如果一个下降,那么另外两个将开始接收更多流量。 但是,错误会发生,并且不会自动重试任何内容。 您需要处理错误,并根据每个查询/写入来决定重试是否安全。

3)驱动程序在与分片系统通信时,将简单地将读取首选项转发给mongos。 请注意,mongos 版本 2.2 在读取首选项方面存在一些困难。 我建议你在2.4线上。