Mongodb-replication

提供:Dev Guides
移動先:案内検索

MongoDB-レプリケーション

レプリケーションは、複数のサーバー間でデータを同期するプロセスです。 レプリケーションは冗長性を提供し、異なるデータベースサーバー上のデータの複数のコピーによりデータの可用性を高めます。 レプリケーションは、単一サーバーの損失からデータベースを保護します。 レプリケーションを使用すると、ハードウェア障害やサービスの中断から回復することもできます。 データの追加コピーを使用して、災害復旧、レポート、またはバックアップ専用にすることができます。

複製する理由

  • データを安全に保つために データの高可用性(24 7)
  • 災害からの回復
  • メンテナンスのためのダウンタイムなし(バックアップ、インデックスの再構築、圧縮など)
  • 読み取りスケーリング(読み取り元の追加コピー)
  • レプリカセットはアプリケーションに対して透過的です

MongoDBでのレプリケーションの仕組み

MongoDBは、レプリカセットを使用してレプリケーションを実現します。 レプリカセットは、同じデータセットをホストする mongod インスタンスのグループです。 レプリカでは、1つのノードがすべての書き込み操作を受け取るプライマリノードです。 セカンダリなどの他のすべてのインスタンスは、プライマリからの操作を適用して、同じデータセットを持つようにします。 レプリカセットには、プライマリノードを1つだけ含めることができます。

  • レプリカセットは、2つ以上のノードのグループです(通常、最低3つのノードが必要です)。
  • レプリカセットでは、1つのノードがプライマリノードで、残りのノードがセカンダリノードです。
  • すべてのデータは、プライマリノードからセカンダリノードに複製されます。
  • 自動フェールオーバーまたはメンテナンス時に、プライマリの選択が確立され、新しいプライマリノードが選択されます。
  • 障害が発生したノードの回復後、レプリカセットに再び参加し、セカンダリノードとして機能します。

クライアントアプリケーションが常にプライマリノードと対話し、プライマリノードがデータをセカンダリノードに複製するMongoDBレプリケーションの典型的な図を示します。

MongoDBレプリケーション

レプリカセットの機能

  • N個のノードのクラスター
  • 任意の1つのノードをプライマリにすることができます
  • すべての書き込み操作はプライマリに移動します
  • 自動フェイルオーバー
  • 自動回復
  • プライマリーのコンセンサス選挙

レプリカセットをセットアップする

このチュートリアルでは、スタンドアロンMongoDBインスタンスをレプリカセットに変換します。 レプリカセットに変換するには、次の手順があります-

  • 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という名前のmongodインスタンスを開始します。
  • コマンドプロンプトを起動して、このmongodインスタンスに接続します。
  • Mongoクライアントで、コマンド* rs.initiate()*を発行して、新しいレプリカセットを開始します。
  • レプリカセットの構成を確認するには、* rs.conf()コマンドを発行します。 レプリカセットのステータスを確認するには、コマンド rs.status()*を発行します。

メンバーをレプリカセットに追加する

メンバーをレプリカセットに追加するには、複数のマシンでmongodインスタンスを起動します。 次に、mongoクライアントを起動し、コマンド* rs.add()*を発行します。

構文

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

mongodインスタンス名が mongod1.net で、ポート 27017 で実行されているとします。 このインスタンスをレプリカセットに追加するには、Mongoクライアントでコマンド* rs.add()*を発行します。

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

プライマリノードに接続している場合にのみ、レプリカセットにmongodインスタンスを追加できます。 プライマリに接続しているかどうかを確認するには、mongoクライアントでコマンド* db.isMaster()*を発行します。