Ubuntu : no valid seed servers in list 上的 Node.js MongoDB

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

网址如下所示:

'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",
        }
    ]
}
  1. 如果缺少该配置,您需要 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/

相关文章:

node.js - Firestore,使用快照获取文档ID

node.js,mongoose如何通过多个ID在对象数组中查找

node.js - Mongoose 通过引用数组填充和搜索

api - meteor :meteor-collectionapi PUT 覆盖整个对象而不是只更新我想要的字段

python - 如何永久 "wire"EC2 ip 地址到 virtualenv 中的 django

node.js - PayPal 客户端验证失败

mysql - 如何使用 mysql 库在 Node.js 中创建存储过程?

mongodb - 吗啡的索引注释不起作用

javascript - dayjs() 的时区错误

linux - for 中的参数过多