Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

自己管理型レプリカセットのノードの再同期

項目一覧

  • 手順

レプリカセット ノードは、レプリケーション プロセスが大幅に遅延したため、ノードによってまだレプリケーションされていない oplog エントリをプライマリが上書きしたときに「古い」状態になります。ノードは遅延を挽回できず「陳腐化」します。この状況が発生した場合は、データを排除したうえで最初の同期を実行し、ノードを完全に再同期する必要があります。

このチュートリアルでは、古いノードを再同期する方法と、別のノードのシード データを使用して新しいノードを作成する方法の両方について説明します。どちらもレプリカセット ノードの復元に使用できます。ノードを同期するときは、大量のデータを移動するための帯域幅がシステムに存在する時間を選択してください。使用率が低い時間帯またはメンテナンスウィンドウ中に同期を予定します。

MongoDB は、初期同期を実行するために次の 2 つのオプションを提供します。

注意

書き込みクォーラムが変更されないように、一度に複数のレプリカセット ノードをローテーションしないでください。

警告

最初の同期中に、mongoddbPath ディレクトリの内容を削除します。

この手順は、レプリカセットの同期のための MongoDB の通常のプロセスに依存します。これにより、ノード上の現在データが格納されます。MongoDB の最初の同期のプロセス概要については、「レプリカセットの同期」セクションを参照してください。

最初の同期の操作は、セットの他のノードに影響を与え、プライマリへのトラフィックを増やす可能性があります。同期ノードには、アクセス可能で最新のセットの別のノードが必要です。

インスタンスにデータがない場合、「自己管理型レプリカセットへのノードの追加 」または「自己管理型レプリカセット ノードの置き換え」 の手順に従って、レプリカセットに新しいノードを追加できます。

また、dbPath ディレクトリのコンテンツが無い状態でインスタンスを再起動することにより、すでにセットのノードである mongod に最初の同期を強制的に実行させることもできます。

  1. ノードの mongod インスタンスを停止します。確実にシャットダウンするには、mongosh から db.shutdownServer() メソッドを使用するか、Linux システムで mongod --shutdown オプションを使用します。

  2. (任意)ノードの dbPath ディレクトリからすべてのデータとサブディレクトリのバックアップを作成します。完全なバックアップが必要ない場合は、問題が発生した場合に役立つ可能性のあるトラブルシューティング データを保存するために、diagnostic.data ディレクトリのみをバックアップすることを検討してください。詳細については、「フルタイム診断データ取得」を参照してください。

  3. ノードの dbPath ディレクトリからすべてのデータとサブディレクトリを削除します。

  4. mongod プロセスを再起動します。

この時点で、 mongodは最初の同期を実行します。最初の同期の長さは、データベースのサイズとレプリカセットのノード間のネットワーク レイテンシによって異なります。

このアプローチでは、レプリカセットの既存のノードのデータファイルを使用して、新しいノードまたは古いノードを「シード」にします。データファイルは、新しいノードが oplog にキャッチアップできるように十分に新しい必要があります 。そうでない場合、ノードは最初の同期を実行する必要があります。

データファイルは、スナップショットまたは直接のコピーとして取得できます。ただし、ほとんどの場合、ファイルのコピー操作中にデータファイルが変更されるため、実行中の mongod インスタンスから別のインスタンスにデータファイルをコピーすることはできません。

重要

データファイルをコピーする場合は、コピーに local データベースの内容が含まれていることを確認します。

データファイルには バックアップは使用 できませんmongodump スナップショットバックアップ のみ を使用してください。実行中のmongodインスタンスの一貫したスナップショットを取得する方法については、「自己管理型配置のバックアップ メソッド 」ドキュメントを参照してください。

「シード」ソースからデータファイルをコピーしたあと、新しいmembers[n]._idmongodインスタンスを起動し、レプリカセットの現在の状態が反映されるまで、oplog からのすべての操作を適用可能にします。レプリカセットの現在のステータスを確認するには、rs.printSecondaryReplicationInfo() または rs.status() を使用します。

戻る

プライマリの強制

項目一覧