mongodbレプリカセットの構成とnode.jsの使用

3250 ワード

最近mongodbの災害復旧について研究していますが、ここで皆さんと共有します.

Mongodbの紹介


これはそのまま省略しますが、理解していないものは下に読む必要はありません.

Mongodbレプリカセットとは


「Mongodb権威ガイド」では、レプリカセットはクライアントリクエストを処理するためのプライマリ・サーバのセットです.プライマリ・サーバのデータ・コピーを保存するバックアップ・サーバも複数あります.プライマリ・サーバがクラッシュした場合、バックアップ・サーバはメンバーの1つを自動的に新しいプライマリ・サーバにアップグレードします.このように、レプリカセットが災害対応にどのように適しているかがわかります.

構成方法


ここでは、まず、各データベースをデータベースレベルで結合してレプリカセットを形成する方法について説明します.

の準備を

  • Mongodbを搭載したサーバ(仮想マシン)(ネットワーク接続可能、相互アクセス可能)
  • コマンドライン構成

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

    1、3台のサーバは、上記のコマンドで起動します.
    パラメータ名を説明します.
  • dbpath:dbデータファイル格納場所
  • fork:バックグラウンド運転
  • port:アクセスポート
  • noauth:認証なしアクセス(ここではテストの便利さのため、真似しないでください)
  • replset:レプリカセットコアパラメータ、レプリカセットの名前、このパラメータは必須であり、3台のマシンが完全に同じ
  • でなければならない.
  • より多くのパラメータは、必要に応じて
  • を追加することができる.
    2、3台のサーバーを接続する:
    いずれかのサーバでコマンドラインを開く
    #: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はテストしていません.ノードが読めると信じていますが、説明は多くありません.

    リファレンス


    高可用性mongodbクラスタの構築(二)--コピーセット
    replSetServersQueries.js