【发布时间】:2016-06-13 14:33:16
【问题描述】:
所以最近我们重新设计了 MongoDB 数据库集群,除了我们已经实施的分片之外,还使用 SSL 和副本集。 SSL 运行起来并不难,我们只需要拆分私钥和证书,然后一切正常。然而,让我的 Node.js 应用程序连接到两个 mongos 实例被证明比我预期的要困难。
在我们实现副本集之前,我们只有两个分片,每个分片都运行一个 mongos 路由器,在 mongoose 中我给了它以下连接字符串:
mongodb://Host1:27017,Host2:27017/DatabaseName
然后,在连接的选项对象中,我传入了以下内容:
{mongos: true}
这似乎工作得很好。但是,在实现副本集之后,每当我通过 mongos 选项时,应用程序就永远不会连接。我们的集群现在已设置好,因此在 2 个副本集中有 4 个 MongoDB 服务器,每个副本集 2 个服务器。每个副本集中的 master 也运行一个 mongos 路由器实例。我以为我应该能够像以前一样连接,但它永远不会连接。如果我只使用 1 个没有选项的分片创建连接,则应用程序连接得很好。但是,这并不理想,因为重点是在路由器实例之间具有冗余。有人可以在这里提供一些见解吗?
这里是 sh.status() 的输出:
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("57571fc5bfe098f05bbbe370")
}
shards:
{ "_id" : "rs0", "host" : "rs0/mongodb-2:27018,mongodb-3:27018" }
{ "_id" : "rs1", "host" : "rs1/mongodb-4:27018,mongodb-5:27018" }
active mongoses:
"3.2.7" : 4
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
No recent migrations
databases:
{ "_id" : "Demo", "primary" : "rs0", "partitioned" : true }
我被要求输出 rs.config(),这里是来自第一个主节点:
{
"_id" : "rs0",
"version" : 1,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "mongodb-2:27018",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "mongodb-3:27018",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("57571692c490a699f61e3784")
}
}
【问题讨论】:
-
你能转储 rs.config() 输出吗?
-
所以我尝试从 mongos shell 运行 rs.config(),但我得到了这个:
2016-06-13T15:15:23.893+0000 E QUERY [thread1] Error: error: { "$err" : "can't use 'local' database through mongos", "code" : 20 } : -
道歉 - rs 用于副本集.....你能运行
sh.status() -
我编辑了帖子以包含 sh.status 和 rs.status