美文网首页
mongodb副本集的配置及node.js的使用

mongodb副本集的配置及node.js的使用

作者: yuansc | 来源:发表于2015-09-15 14:45 被阅读900次

    最近在研究mongodb灾难恢复的一些事情,在这里与大家分享。

    Mongodb介绍

    这就直接省略了,不理解的其实也没必要往下面读了。

    什么是Mongodb副本集

    《Mongodb权威指南》里面这样说: 副本集是一组服务器,其中一个是主服务器,用于处理客户请求;还有多个备份服务器,用于保存主服务器的数据副本。如果主服务器崩溃了,备份服务器自动将其中一个成员升级为新的主服务器。 由此可见副本集对于应对灾难性事件是多么的合适。

    如何配置

    在这里先说一下如何在数据库层面将各个数据库联合在一块,形成一个副本集。

    准备

    • 3台装有Mongodb的服务器(虚拟机)(可联网,可相互访问)

    命令行配置

     mongod --dbpath ~/data/db/ --logpath ~/logs/log --replSet replset --fork --port 27017 --noauth
    

    1、 三台服务器都要以如上命令启动:

    其中解释一下参数名称:

    • dbpath: db数据文件存放位置
    • fork: 后台运行
    • port: 访问端口
    • noauth: 无认证访问(此处是为测试方便,请勿效仿)
    • replSet:副本集核心参数,副本集的名称,这个参数是必须的,而且必须三台机器完全一样
    • 更多参数可以根据需要添加

    2、 将三台服务器进行连接:

    在其中一台服务器中打开命令行

    #:mongo
    
    //配置副本集参数
    >config ={
      "_id" : "replset",
      "version" : 4,
      "members" : [
          {
              "_id" : 0,
              "host" : "172.16.137.135:27017"
          },
          {
              "_id" : 1,
              "host" : "172.16.137.136:27017"
          },
          {
              "_id" : 3,
              "host" : "172.16.137.137:27017"
          }
      ]
    }
    //初始化副本集
    >rs.initiate(config)
    
    //初始化成功
    >{
          "info" : "Config now saved locally.  Should come online in about a minute.",
          "ok" : 1
    }
    

    如上我们副本集Db层面就配置好了,大家可以简单做下测试:

    • 在主服务器上写的数据能否同步到另外的备份数据库
    • 当出数据库挂掉(可用kill -9模拟)之后,是否会推出一台新的主数据库
    • 当挂掉的主数据库启动之后它的角色有没有变化

    如果正常配置成功上面的答案应该分别是 能,会,它的新角色是备份数据库

    Node.js如何使用Mongodb副本集

    方法1

    var Server = require('mongodb').Server;
    var Db = require('mongodb').Db;
    var replsetServer = require('mongodb').ReplSetServers;
    var server1 = new Server('172.16.137.135', '27017', {});
    var server2 = new Server('172.16.137.136', '27017', {});
    var server3 = new Server('172.16.137.137', '27017', {});
    var servers=[server1,server2,server3];
    var replset = new replsetServer(servers);
    var db = new Db('repl', replset, {native_parser:true});
    db.open(function (err, db) {
      db.collection('user',function (err, collection) {
        collection.find({}).toArray(function(err, result) {
          console.log(err, result);
        })
      });
    });
    

    方法2

    var MongoClient = require('mongodb').MongoClient;
    var url = 'mongodb://172.16.137.135,172.16.137.136,172.16.137.137:27017/repl';
    MongoClient.connect(url, function (err, db) {
      var collection = db.collection('user');
      collection.find({}).toArray(function (err, result) {
        console.log(err, result);
      })
    });
    
    

    如上是我写的测试代码,用node-mongodb-native进行测试,Mongoose未测试,相信会Node的都能看懂就不过多讲解了。

    参考

    搭建高可用mongodb集群(二)—— 副本集

    replSetServersQueries.js

    相关文章

      网友评论

          本文标题:mongodb副本集的配置及node.js的使用

          本文链接:https://www.haomeiwen.com/subject/yqlmcttx.html