我有一个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);
答案 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()
。