【问题标题】:Node js / MongoDB replica set array in javascriptjavascript中的Node js / MongoDB副本集数组
【发布时间】:2013-10-29 18:21:34
【问题描述】:

警告:我是新手程序员(更多是系统管理员)。我们得到了一个使用 MongoDB 的节点 js 应用程序。据我所知,mongo.js 文件使用的是 mongojs 和 monq java 类。它只设置了一个 MongoDB,我正在尝试设置一个新的 HA 环境以使用副本集。这是他们提供的:

var mongojs = require('mongojs');
var monq = require('monq');
var dbName = 'exampledb';
var db = mongojs(dbName, ['collections']);
var client = monq('mongodb://127.0.0.1/exampledb', { w: 1 });

exports.db = db;
exports.ObjectId = mongojs.ObjectId;
exports.monqClient = client;

现在对于一个副本集,根据this article,我需要做如下修改:

var db = mongojs('replset0.com, replset1.com, replset2.com/mydb?slaveOK=true?', ['collections']);

我不完全确定在那之后我需要为这条线做什么。我猜我必须为副本集的每个成员(设置是主要的、次要的、仲裁者)创建一个包含主机名和端口号的数组,例如:

var replSet = new replSet();
var replSet[0] = "server0:port0"
var replSet[1] = "server1.:port1"
var replSet[2] = "server2.:port2"

我将如何检测哪个节点是主节点?此外,如果主节点失败,我将不得不重新启动节点 js 应用程序(永远使用)?

【问题讨论】:

    标签: javascript node.js mongodb replication


    【解决方案1】:

    我找到了答案,因为它正在调用 MongoDB 的 URI http://docs.mongodb.org/manual/reference/connection-string/

    应该是这样的:

    var client = monq('mongodb://server0:port0,server1:port1,server2:port2/[dbname]?replicaSet=[replicaSet Name]
    

    【讨论】:

      【解决方案2】:

      第一个问题:只要将连接字符串中的所有成员都给它,mongojs 驱动程序应该能够确定哪个是主要的。不用自己想办法。

      第二个问题:不,您不必重新启动节点应用程序。集合中的其他成员将选举一个新的主节点,尽管 mongo 检测失败并运行选举需要时间。

      有关详细信息,请参阅mongodb docs on replica sets

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多