我正在尝试使用以下方式从 Ubuntu 连接到副本集:
return when.promise(function(resolve,reject){
new MongoClient().connect(url, {replSet: options }, function(err, db){
console.dir(err)
if (err)
reject(err);
resolve(db);
});
});
网址如下所示:
'mongodb://mongo1.mysite.com:36108,mongo2.mysite.com:36108,mongo3.mysite.com:36108/db_config?w=0'
我正在连接到多个数据库,并且间歇性地看到此错误:
{ name: 'MongoError', message: 'no valid seed servers in list' }
并且 node.js 崩溃了。
此时我有点迷路了。 主要问题是它在 MAC 上完美运行,我只在 Ubuntu 上看到这个问题。我正在使用 node.js 的最新 mongo 驱动程序
更新
我看了一下原生驱动源码:
http://mongodb.github.io/node-mongodb-native/core/api/replset.js.html
并发现此条件触发了错误(第 987 行):
state.initialConnectionServers == 0 && state.replState.state == CONNECTING)
仍然不确定为什么会发生这种情况。
最佳答案
不同之处在于您在自己的单个 Mac(osx?)笔记本电脑/台式机上没有副本集。它以独立模式运行。但确实拥有或打算在这 3 台服务器上拥有一个副本集。
这里是提供的字符串的一些潜在问题。
1) 27017 是 mongo 的默认端口,因此除非专门将其更改为不正确的 36108。
mongodb://mongo1.mysite.com:36108,mongo2.mysite.com:36108,mongo3.mysite.com:36108/db_config?w=0
试试
mongodb://mongo1.mysite.com:27017,mongo2.mysite.com:27017,mongo3.mysite.com:27017/db_config?w=0
2) w=0 对我来说不熟悉,可能是你的副本集的名称。通常副本集的连接字符串如下,其中rs0是副本集的名称。
mongodb://mongo1.mysite.com:27017,mongo2.mysite.com:27017,mongo3.mysite.com:27017/replicaSet=rs0
3) 您可能没有配置副本集。查看rs.config
登录服务器,mongo1.mysite.com
使用 mongo admin -u clusteradmin -p 不管密码进入 mongo shell
类型
rs.config()
如果您没有看到类似以下内容,则说明您没有要连接的副本集。这里 rs0 是副本集的名称。你的可能叫 w???
{
"_id" : "rs0",
"version" : 4,
"members" : [
{
"_id" : 0,
"host" : "mongo1.mysite.com:36108"
},
{
"_id" : 1,
"host" : "mongo2.mysite.com:36108"
},
{
"_id" : 2,
"host" : "mongo3.mysite.com:36108",
}
]
}
- 如果缺少该配置,您需要 add您的 3 台主机进入副本集配置。
rs.add("mongo1.mysite.com:36108")//或带有“mongo1.mysite.com:27017”的默认端口 rs.add("mongo2.mysite.com:36108") rs.add("mongo3.mysite.com:36108")
但比任何事情都更好的是刷新包括这个 doc to convert a standalone to a replica set 在内的副本集
给定的/db_config 字符串看起来像 rs.config() 等效命令,但由 http 完成,并期望将服务器列表添加到副本集。但坦率地说,您无法连接到副本集来配置它?所以这看起来很奇怪。你可以连接到主 Node ,所以试试
mongodb://mongo1.mysite.com:36108/db_config?w=mongo1.mysite.com:36108,mongo2.mysite.com:36108,mongo3.mysite.com:36108
关于Ubuntu : no valid seed servers in list 上的 Node.js MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27207067/