Ubuntu上的Node.js MongoDB:列表中没有有效的种子服务器

时间:2014-11-29 21:01:31

标签: 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);
    });
});

Url看起来像这样:

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

仍然不确定为什么会这样。

5 个答案:

答案 0 :(得分:3)

不同之处在于您没有在自己的单个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 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",
        }
    ]
}
  1. 如果缺少该配置,则需要将3个主机add放入副本集配置中。
  2. rs.add(" mongo1.mysite.com:36108")//或" mongo1.mysite.com的默认端口:27017" rs.add(" mongo2.mysite.com:36108&#34) rs.add(" mongo3.mysite.com:36108&#34)

    但是,比任何事情都更好的是刷新包括此doc to convert a standalone to a replica set

    的副本集

    给定的/ db_config字符串看起来像rs.config()等效命令,但由http完成,并期望将服务器列表添加到副本集。但坦率地说,你无法连接到副本集来配置它?所以这看起来很奇怪。您可以连接到主要设备,请尝试

    mongodb://mongo1.mysite.com:36108/db_config?w=mongo1.mysite.com:36108,mongo2.mysite.com:36108,mongo3.mysite.com:36108
    

答案 1 :(得分:1)

增加文件描述符的数量解决了这个问题。

在Ubuntu 12.04.5上,LTS默认值为1024,这还不够。

答案 2 :(得分:0)

请遵循rinchnikGabe rainbow提供的解决方案。如果问题仍然存在,那么请更新模块 - " mongodb"版本2.2.27+和" mongoose"版本4.9.1+。

答案 3 :(得分:0)

我们在指向Mongodb Atlas的EC2实例中遇到此错误。

将EC2 ip添加到Mongodb Atlas的ip白名单后,此问题已解决。

答案 4 :(得分:0)

对我来说,该连接可以将“猫鼬”和“ mongodb”更新到新版本。 用于不同版本的dbURI格式是不同的。看看吧。