Ubuntu上的Node.js MongoDB:列表中没有有效的种子服务器
我正试图通过以下方式从Ubuntu连接到副本集:Ubuntu上的Node.js MongoDB:列表中没有有效的种子服务器,node.js,mongodb,ubuntu,replication,Node.js,Mongodb,Ubuntu,Replication,我正试图通过以下方式从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); }); });
return when.promise(function(resolve,reject){
new MongoClient().connect(url, {replSet: options }, function(err, db){
console.dir(err)
if (err)
reject(err);
resolve(db);
});
});
Url如下所示:
'mongodb://mongo1.mysite.com:36108,mongo2.mysite.com:36108,mongo3.mysite.com:36108/db_config?w=0'
我正在连接多个数据库,偶尔会看到以下错误:
{name:'MongoError',消息:“列表中没有有效的种子服务器”}
node.js崩溃
我现在有点迷路了。
主要的问题是它在MAC电脑上运行得很好,我只在Ubuntu上看到这个问题。我正在使用node.js的最新mongo驱动程序
更新
我查看了本机驱动程序源代码:
并发现由该条件触发的错误(第987行):
state.initialconnectionserver==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
试一试
2) w=0对我来说并不熟悉,可能是您的副本集的名称。副本集的连接字符串通常如下所示,其中rs0是副本集的名称
mongodb://mongo1.mysite.com:27017,mongo2.mysite.com:27017,mongo3.mysite.com:27017/replicaSet=rs0
3) 您可能没有配置副本集。检查
登录服务器mongo1.mysite.com
使用mongo admin-u clusteradmin-p whateverpassword进入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",
}
]
}
mongodb://mongo1.mysite.com:36108/db_config?w=mongo1.mysite.com:36108,mongo2.mysite.com:36108,mongo3.mysite.com:36108
增加文件描述符的数量解决了这个问题
在Ubuntu 12.04.5上,LTS的默认值是1024,这是不够的。请遵循和给出的解决方案。如果问题仍然存在,请将模块“mongodb”更新为版本2.2.27+,将“mongoose”更新为版本4.9.1+。我们在指向mongodb Atlas的EC2实例中遇到此错误
当我们将EC2 ip添加到Mongodb Atlas的ip白名单中时,这个问题得到了解决。对我来说,连接将“mongoose”和“Mongodb”更新为新版本。
不同版本使用的dbURI格式是不同的。请看一看。感谢您的长篇回复:1.在我的Mac上,我使用的是远程副本集,它可以工作。在Ubuntu上,它不能工作。2.我已将成员上的端口显式设置为36108。3.w=0禁用安全写入,请参阅MonbgoClient文档了解更多信息。4.副本集i已配置的和功能性成员“健康”" 5. 我不需要向我的副本集添加任何内容,而且您提供的url不正确db_config->数据库名称您可以尝试从Ubuntu机器上的mongo shell连接到副本集吗?尝试使用适用于
mongo
的相同连接字符串。奇怪。我发誓,我有一个实际的文件描述符错误,而不是没有有效的种子服务器,但在未来会注意到这一点。很好,将mogoose升级到4.9.1版解决了我的问题。
mongodb://mongo1.mysite.com:36108/db_config?w=mongo1.mysite.com:36108,mongo2.mysite.com:36108,mongo3.mysite.com:36108