MongoDB レプリケーション(レプリカセット)
MongoDBレプリケーションは、複数のサーバー間でデータを同期するプロセスです。
レプリケーションはデータの冗長バックアップを提供し、複数のサーバーにデータのコピーを保存することで、データの可用性を高め、データの安全性を保証します。
レプリケーションにより、ハードウェア障害やサービス停止からデータを復旧することもできます。
レプリケーションとは?
- データの安全性を確保
- データの高可用性 (24*7)
- 災害復旧
- ダウンタイムなしのメンテナンス(バックアップ、インデックス再構築、圧縮など)
- データの分散読み取り
MongoDBレプリケーションの原理
MongoDBのレプリケーションには少なくとも2つのノードが必要です。そのうち1つはプライマリノードで、クライアントからのリクエストを処理し、残りはすべてセカンダリノードで、プライマリノードのデータを複製します。
MongoDBの各ノードの一般的な構成は、プライマリ1台にセカンダリ1台、またはプライマリ1台にセカンダリ複数台です。
プライマリノードはすべての操作をoplogとして記録します。セカンダリノードは定期的にプライマリノードをポーリングしてこれらの操作を取得し、自身のデータコピーに対してそれらの操作を実行することで、セカンダリノードのデータとプライマリノードのデータを一致させます。
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のレプリカセットは、よくあるマスター/スレーブとは異なります。マスター/スレーブでは、マスターがダウンするとすべてのサービスが停止しますが、レプリカセットでは、マスターがダウンすると、レプリカがプライマリノードを引き継いでプライマリノードになり、ダウンすることはありません。
その他の拡張