MongoDB レプリケーション(レプリカセット)

MongoDBレプリケーションは、複数のサーバー間でデータを同期するプロセスです。

レプリケーションはデータの冗長バックアップを提供し、複数のサーバーにデータのコピーを保存することで、データの可用性を高め、データの安全性を保証します。

レプリケーションにより、ハードウェア障害やサービス停止からデータを復旧することもできます。


レプリケーションとは?

  • データの安全性を確保
  • データの高可用性 (24*7)
  • 災害復旧
  • ダウンタイムなしのメンテナンス(バックアップ、インデックス再構築、圧縮など)
  • データの分散読み取り

MongoDBレプリケーションの原理

MongoDBのレプリケーションには少なくとも2つのノードが必要です。そのうち1つはプライマリノードで、クライアントからのリクエストを処理し、残りはすべてセカンダリノードで、プライマリノードのデータを複製します。

MongoDBの各ノードの一般的な構成は、プライマリ1台にセカンダリ1台、またはプライマリ1台にセカンダリ複数台です。

プライマリノードはすべての操作をoplogとして記録します。セカンダリノードは定期的にプライマリノードをポーリングしてこれらの操作を取得し、自身のデータコピーに対してそれらの操作を実行することで、セカンダリノードのデータとプライマリノードのデータを一致させます。

MongoDBレプリケーションの構造図は次のとおりです:

MongoDB复制结构图

上記の構造図では、クライアントはプライマリノードからデータを読み取ります。クライアントがプライマリノードにデータを書き込むとき、プライマリノードとセカンダリノードがデータをやり取りしてデータの一貫性を保証します。

レプリカセットの特徴:

  • Nノードのクラスター
  • 任意のノードがプライマリノードになれる
  • すべての書き込み操作はプライマリノードで行われる
  • 自動フェイルオーバー
  • 自動リカバリ

MongoDBレプリカセットの設定

このチュートリアルでは、同じMongoDBを使用してMongoDBのマスター/スレーブの実験を行います。操作手順は次のとおりです:

1. 実行中のMongoDBサーバーを停止します。

次に、--replSet オプションを指定してMongoDBを起動します。--replSet の基本的な構文は次のとおりです:

mongod --port "PORT" --dbpath "YOUR_DB_DATA_PATH" --replSet "REPLICA_SET_INSTANCE_NAME"

例

mongod --port 27017 --dbpath "D:\set up\mongodb\data" --replSet rs0

上記の例では、ポート番号27017のrs0という名前のMongoDBインスタンスが起動します。

起動後、コマンドプロンプトを開いてMongoDBサービスに接続します。

Mongoクライアントで rs.initiate() コマンドを使用して、新しいレプリカセットを起動します。

rs.conf() を使用してレプリカセットの構成を確認できます。

レプリカセットの状態を確認するには rs.status() コマンドを使用します。


レプリカセットへのメンバー追加

レプリカセットにメンバーを追加するには、複数のサーバーを使用してMongoサービスを起動する必要があります。Mongoクライアントに入り、rs.add() メソッドを使用してレプリカセットのメンバーを追加します。

構文

rs.add() コマンドの基本的な構文は次のとおりです:
>rs.add(HOST_NAME:PORT)

例

mongod1.net という名前でポート番号27017のMongoサービスを起動済みだとします。クライアントのコマンドウィンドウで rs.add() コマンドを使用してレプリカセットに追加します。コマンドは次のとおりです:

>rs.add("mongod1.net:27017")
>

MongoDBでは、プライマリノード経由でのみMongoサービスをレプリカセットに追加できます。現在実行中のMongoサービスがプライマリノードであるかどうかを確認するには、db.isMaster() コマンドを使用できます。

MongoDBのレプリカセットは、よくあるマスター/スレーブとは異なります。マスター/スレーブでは、マスターがダウンするとすべてのサービスが停止しますが、レプリカセットでは、マスターがダウンすると、レプリカがプライマリノードを引き継いでプライマリノードになり、ダウンすることはありません。

その他の拡張