副本集未按预期工作

时间:2014-06-03 02:27:40

标签: node.js mongodb sails.js sails-mongo

我的配置如下,我的MongoDB不需要用户名或密码:

mongo: {
    module: 'sails-mongo',
    url: "mongodb://127.0.0.1:27017/mydb",
    replSet: {
        servers: [
            {
                host: "127.0.0.1",
                port : 27018
            },
            {
                host: "127.0.0.1",
                port : 27019
            }
        ],
        options: {connectWithNoPrimary:true, rs_name:"rs0"}
    }      
}

它运行正常,这意味着我没有收到连接错误,我可以进行查询。但是当我降低127.0.0.1:27017,127.0.0.1:27018变成PRIMARY就好像我做了一个rs.status()。在此之后,我无法再进行任何查询并继续获取以下内容:

  

错误:没有打开连接

我确信我在本地计算机上正确设置了副本集,因为我使用MongoDB本机驱动程序来测试上面提到的场景(将PRIMARY和SECONDARY取下来作为PRIMARY)并且没有问题。

var url = 'mongodb://127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019/mydb?w=0&wtimeoutMS=5000&replicaSet=sg1&readPreference=secondary';

mongodb.MongoClient.connect(url, function(err, result) {
    if(err || result === undefined || result === null) {
          throw err;
    } else {
          db = result;  
    } 
});

1 个答案:

答案 0 :(得分:0)

好的,我找到了答案。由于session.js而发出此消息。我评论了文件中的所有内容,现在它正在运行。我猜的原因是在session.js中,它只指向一个主机,这是原始的PRIMARY。当你关闭这个mongodb PRIMARY时,session.js不再能连接,所以它抛出了异常。我还在sessions.js中尝试了mongodb URL字符串,同时放入副本集中的hosts ip(mongodb://127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019 / mydb)但是没有“帆升”。当只放置单个主机然后它是好的。

现在如果我需要存储会话信息,我需要启动另一个mongodb实例,然后session.js指向这个新的瞬间。