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

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); }); });

我正试图通过以下方式从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',消息:“列表中没有有效的种子服务器”}

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",
        }
    ]
}
  • 如果缺少该配置,则需要将3台主机添加到副本集配置中 rs.add(“mongo1.mysite.com:36108”)//或默认端口为“mongo1.mysite.com:27017” rs.add(“mongo2.mysite.com:36108”) rs.add(“mongo3.mysite.com:36108”)

    但比任何事情都好的是,包括这个

    给定的/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
    

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


    在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