【问题标题】:Node.js MongoDB on Ubuntu: no valid seed servers in listUbuntu 上的 Node.js MongoDB:列表中没有有效的种子服务器
【发布时间】:2015-01-28 04:47:30
【问题描述】:

我正在尝试使用以下方式从 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)

仍然不确定为什么会发生这种情况。

【问题讨论】:

    标签: node.js mongodb ubuntu replication


    【解决方案1】:

    不同之处在于您在自己的单个 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. 如果缺少该配置,您需要 add 您的 3 台主机进入副本集配置。

    rs.add("mongo1.mysite.com:36108") // 或带有“mongo1.mysite.com:27017”的默认端口 rs.add("mongo2.mysite.com:36108") rs.add("mongo3.mysite.com:36108")

    但比任何事情都更好的是刷 o 副本集,包括这个 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. 在我的 Mac 上,我正在使用远程副本集并且它可以工作。在 Ubuntu 上没有。 2. 我已将成员的端口明确设置为 36108。 3. w=0 禁用安全写入,更多信息请参考 MonbgoClient 文档。 4. 副本集已配置,功能成员“健康” 5. 我不需要向我的副本集添加任何内容,您提供的 url 不正确
    • db_config -> 数据库名称
    • 您可以尝试从 Ubuntu 机器上的 mongo shell 连接到副本集吗?尝试使用适用于mongo 的相同连接字符串。
    【解决方案2】:

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

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

    【讨论】:

    • 奇怪。发誓我有一个实际的文件描述符错误,而不是没有有效的种子服务器,但将来会注意这一点。
    【解决方案3】:

    请按照rinchnikGabe rainbow给出的解决方案。如果问题仍然存在,请更新模块 - “mongodb”到版本 2.2.27+,“mongoose”到版本 4.9.1+。

    【讨论】:

    • 太好了,将 mogoose 升级到 4.9.1 版解决了我的问题。
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      对我来说,连接可以将“mongoose”和“mongodb”更新到新版本。 不同版本使用的dbURI格式不同。也看看那个。

      【讨论】:

        猜你喜欢
        • 2017-09-08
        • 2017-03-26
        • 2011-03-21
        • 1970-01-01
        • 1970-01-01
        • 2013-12-24
        • 2021-08-05
        • 1970-01-01
        • 2014-02-05
        相关资源
        最近更新 更多