MongoDB レプリケーション: 作成方法 MongoDB レプリカセット

⚡ スマートサマリー

MongoDB レプリケーションは、複数のデバイスで同一のデータを保持します。 MongoDB サーバー、サーバー障害からの保護、および負荷分散の有効化。グループ化された MongoDB インスタンスはレプリカセットを形成し、プライマリインスタンスが書き込みを受け付け、セカンダリインスタンスが読み取り操作とフェイルオーバーを処理します。

  • 🗄️ コアコンセプト: レプリケーションは、同じデータを複数のサーバーにコピーすることで、プライマリサーバーが故障した場合でも情報が利用可能になるようにします。
  • 👑 小学校と中学校: レプリカセットは、書き込みを受け付けるプライマリメンバー1つと、読み取りを処理するセカンダリメンバー1つで構成されます。
  • 🚀 セット作成: rs.initiate() コマンドは、replSet オプションを指定して最初の mongod インスタンスが起動された後にレプリカ セットを開始します。
  • ➕ メンバーの追加: rs.add() コマンドはセカンダリサーバーを接続し、rs.remove() コマンドは構成からメンバーを削除します。
  • 🔧 トラブルシューティング: rs.status() および rs.printReplicationInfo() コマンドは、診断のためにハートビートの状態と Oplog サイズを公開します。

MongoDB レプリケーション: 作成方法 MongoDB レプリカセット

何ですか MongoDB 複製?

レプリケーションとは、同じデータが複数の場所で利用可能であることを保証するプロセスを指します。 MongoDB サーバー。これは、データ可用性を向上させる目的で必要となる場合がある。

なぜなら、メインの場合は MongoDB 何らかの理由でサーバーがダウンすると、データにアクセスできなくなります。ただし、データを定期的に別のサーバーにレプリケートしておけば、プライマリ サーバーに障害が発生した場合でも、別のサーバーからデータにアクセスできます。

レプリケーションのもう XNUMX つの目的は、負荷分散の可能性です。 システムに接続するユーザーが多数いる場合、全員が XNUMX つのシステムに接続するのではなく、ユーザーを複数のサーバーに接続して、負荷を均等に分散することができます。

In MongoDB、複数 MongoDB サーバーはレプリカセットと呼ばれるグループにまとめられます。レプリカセットにはプライマリサーバーがあり、クライアントからのすべての書き込み操作を受け付けます。その後セットに追加される他のインスタンスはすべてセカンダリインスタンスと呼ばれ、主にすべての読み取り操作に使用されます。

レプリカ セットを作成する方法 MongoDB rs.initiate() を使用して最初のメンバーを追加する

前のセクションで説明したように、レプリケーションを有効にするには、まずレプリカ セットを作成する必要があります。 MongoDB インスタンス。

例として、ServerA、ServerB、ServerCという3台のサーバーがあると仮定しましょう。この構成では、ServerAがプライマリサーバー、ServerBとServerCがセカンダリサーバーとなります。以下のスクリーンショットをご覧いただくと、より分かりやすいでしょう。

レプリカ セットの作成 MongoDB

を作成するために従う必要がある手順は次のとおりです。 MongoDB レプリカ セットと最初のメンバーのセットへの追加。

ステップ1)すべてのmongod.exeインスタンスが追加されていることを確認します。

レプリカ セットに追加されるすべての mongod.exe インスタンスが異なるサーバーにインストールされていることを確認してください。これは、1 つのサーバーがダウンしても他のサーバーが利用可能であり、他のインスタンスが MongoDB 使えるようになる。

ステップ2)すべてのmongo.exeインスタンスが相互に接続します

すべての mongo.exe インスタンスが相互に接続できることを確認します。 ServerA から、以下の 2 つのコマンドを発行します。

mongo --host ServerB --port 27017
mongo --host ServerC --port 27017

同様に、残りのサーバーからも同じことを実行します。

ステップ3)最初のmongod.exeインスタンスを起動します

replSet オプションを指定して最初の mongod.exe インスタンスを起動します。このオプションはグループを提供します。ping このレプリカセットに含まれるすべてのサーバーに対して。

mongo --replSet "Replica1"

ここで、「Replica1」はレプリカ セットの名前です。 レプリカ セット名には、意味のある任意の名前を選択できます。

ステップ4)最初のサーバーがレプリカセットに追加されます

最初のサーバーがレプリカセットに追加されたので、次のステップは、rs.initiate() コマンドを発行してレプリカセットを初期化することです。

ステップ5)レプリカセットを検証する

レプリカセットが正しく設定されていることを確認するには、rs.conf() コマンドを実行してレプリカセットを検証してください。

レプリカ セット: rs.add() を使用したセカンダリの追加

セカンダリ サーバーは、rs.add コマンドを使用するだけでレプリカ セットに追加できます。 このコマンドは、セカンダリ サーバーの名前を取得し、そのサーバーをレプリケーション セットに追加します。

ステップ1) レプリカセットの一部となる必要があるServerA、ServerB、ServerCがあるとします。ServerAはレプリカセットのプライマリサーバーとして定義されています。

ServerBとServerCをレプリカセットに追加するには、次のコマンドを実行します。

rs.add("ServerB")
rs.add("ServerC")

レプリカ セット: rs.remove() を使用した再構成または削除

構成セットからサーバーを削除するには、「rs.remove」コマンドを使用する必要があります。

ステップ1) まず、削除したいインスタンスをシャットダウンします。これは、mongoシェルからdb.shutdownServerコマンドを実行することで実行できます。

ステップ2) プライマリサーバーに接続します。

ステップ3) rs.remove コマンドを使用して、レプリカ セットから必要なサーバーを削除します。たとえば、ServerA、ServerB、ServerC からなるレプリカ セットがあり、ServerC をレプリカ セットから削除したい場合は、次のコマンドを実行します。

rs.remove("ServerC")

レプリカ セットのトラブルシューティング

レプリカセットの使用中に問題が発生した場合のトラブルシューティング方法は、以下のとおりです。

  1. すべてのmongo.exeインスタンスが相互に接続できることを確認してください。ServerA、ServerB、ServerCという3つのサーバーがあるとします。ServerAから、以下の2つのコマンドを実行してください。
    mongo --host ServerB --port 27017
    mongo --host ServerC --port 27017
  2. rs.status コマンドを実行してください。このコマンドはレプリカセットの状態を表示します。デフォルトでは、各メンバーは「ハートビート」メッセージと呼ばれるメッセージを相互に送信します。これは、サーバーが稼働していることを示すメッセージです。「status」コマンドはこれらのメッセージの状態を取得し、レプリカセット内のメンバーに問題がないかどうかを表示します。
  3. Oplog のサイズを確認してください。Oplog はコレクションです。 MongoDB に対して行われた書き込み履歴を保存します。 MongoDB データベース。 MongoDB 次に、この Oplog を使用して、レプリカ セット内の他のメンバーに書き込みを複製します。 Oplog を確認するには、必要なメンバー インスタンスに接続し、rs.printReplicationInfo コマンドを実行します。このコマンドは、ログのサイズと、ログ ファイルがいっぱいになるまでにトランザクションを保持できる期間を表示します。

よくあるご質問

はい。AIアシスタントは、レプリカセット用のmongod起動オプション、rs.initiate()設定、およびrs.add()コマンドを生成できます。設定を本番サーバーに適用する前に、ホスト名、ポート、およびメンバーの優先順位を必ず確認してください。

はい。AIを活用した監視ツールは、rs.status()とOplogメトリックを読み取り、プライマリよりも動作が遅いセカンダリを検出できます。ネットワーク遅延やディスクの速度低下など、原因を示唆することも可能ですが、エンジニアは対応前に確認する必要があります。

MongoDB 投票メンバーの数は奇数(通常は3人)を推奨します。そうすることで、選挙で過半数を獲得できます。データノードが2つしか予算的に難しい場合は、データを保存せずに同数票を解消するために仲裁ノードを追加できます。

予備選挙で当選者が出なくなった場合、残りのメンバーが選挙を行い、資格のある副候補者を自動的に予備選挙に昇格させます。新しい予備選挙が決定したら、業務再開を記述し、ping アプリケーションは最小限のダウンタイムで利用可能です。