MongoDB URL 没有replicaSet可选参数

MongoDB URL without replicaSet optional parameter

我有一个 mongoDB 集群

   server1:27017
   server2:27017
   server3:27017

由于历史原因,IT 团队无法提供此集群的副本集名称。

我的问题是:在不知道副本集名称的情况下,以下 mongoDB url 是否合法,缺少可选的副本集可选参数是否会导致将来出现任何可能的问题?

mongodb://username:password@server1:27017,server2:27017,server3:27017

我正在使用 Java 设置 MongoDB 连接,方法如下

String MONGO_REPLICA_SET = "mongodb://username:password@server1:27017,server2:27017,server3:27017";
MongoClientURI mongoClientURI = new MongoClientURI(MONGODB_REPLICA_SET);
mongoClient = new MongoClient(mongoClientURI);

澄清一下,虽然连接到副本集可能会起作用,但最好指定 replicaSet 选项。

取决于MongoDB Drivers that you're using it may behaves slightly differently. For example quoting the Server Discovery and Monitoring Spec for Initial Topology Type:

In the Java driver a single seed means Single, but a list containing one seed means Unknown, so it can transition to replica-set monitoring if the seed is discovered to be a replica set member. In contrast, PyMongo requires a non-null setName in order to begin replica-set monitoring, regardless of the number of seeds.

存在变体,最好检查连接是否仍然可以处理拓扑发现和故障转移。

For historical reason, IT team could not provide the replicaSet name for this cluster.

如果您有权访问 admin 数据库,则可以执行 rs.status() on mongo shell to find out the name of the replica set. See also replSetGetStatus 以获取更多信息。

复制集的名字应该是可以查出来的,这样就不用担心了。打开与您的任何一个节点的连接(例如直接连接到 server1:27017)和 运行 rs.status();这将告诉您副本集的名称以及许多其他有用的数据,例如完整的已配置节点集及其各自的状态。

在这个输出示例中,"rsInternalTest" 是副本集名称:

{
    "set" : "rsInternalTest",
    "date" : ISODate("2018-05-01T11:38:32.608Z"),
    "myState" : 1,
    "term" : NumberLong(123),
    "heartbeatIntervalMillis" : NumberLong(2000),
    "optimes" : {
        ...
    },
    "members" : [ 
        {
            "_id" : 1,
            "name" : "server1:27017",
            "health" : 1.0,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 1652592,
            "optime" : {
                "ts" : Timestamp(1525174711, 1),
                "t" : NumberLong(123)
            },
            "optimeDate" : ISODate("2018-05-01T11:38:31.000Z"),
            "electionTime" : Timestamp(1524371004, 1),
            "electionDate" : ISODate("2018-04-22T04:23:24.000Z"),
            "configVersion" : 26140,
            "self" : true
        }
        ...
    ],
    "ok" : 1.0
}

请注意,您将需要高级别用户帐户登录,否则您将没有权限运行 rs.status()