没有replicaSet可选参数的MongoDB URL

时间:2018-04-19 13:47:27

标签: mongodb mongodb-java

我有一个mongoDB集群

   server1:27017
   server2:27017
   server3:27017

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

我的问题是:在不知道replicaSet名称的情况下,以下mongoDB url是否合法并且将丢失可选的replicaSet可选参数会导致将来出现任何可能的问题?

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

2 个答案:

答案 0 :(得分:1)

为了澄清,尽管连接到副本集可能有用,但最好指定replicaSet选项。

根据您使用的MongoDB Drivers,它可能会略有不同。例如引用Server Discovery and Monitoring Spec for Initial Topology Type

  

在Java驱动程序中,单个种子意味着单个,但包含一个种子的列表意味着未知,因此如果发现种子是副本集成员,它可以转换到副本集监视。相比之下,无论种子数量多少,PyMongo都需要一个非null的setName才能开始复制集监视。

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

  

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

如果您有权访问admin数据库,则可以在mongo shell上执行rs.status()以查找副本集的名称。有关详细信息,另请参阅replSetGetStatus

答案 1 :(得分:1)

应该可以找出副本集的名称,以避免这种担心。打开与任何一个节点的连接(例如,直接连接到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()