自己管理型レプリカセットのノードの再同期
項目一覧
レプリカセット ノードは、レプリケーション プロセスが大幅に遅延したため、ノードによってまだレプリケーションされていない oplog エントリをプライマリが上書きしたときに「古い」状態になります。ノードは遅延を挽回できず「陳腐化」します。この状況が発生した場合は、データを排除したうえで最初の同期を実行し、ノードを完全に再同期する必要があります。
このチュートリアルでは、古いノードを再同期する方法と、別のノードのシード データを使用して新しいノードを作成する方法の両方について説明します。どちらもレプリカセット ノードの復元に使用できます。ノードを同期するときは、大量のデータを移動するための帯域幅がシステムに存在する時間を選択してください。使用率が低い時間帯またはメンテナンスウィンドウ中に同期を予定します。
MongoDB は、初期同期を実行するために次の 2 つのオプションを提供します。
空のデータ ディレクトリで
mongod
を再起動し、MongoDB の通常の最初の同期機能を使用してデータを復元します。これはよりシンプルなオプションですが、データの置き換えに時間がかかる可能性があります。レプリカセット内の別のノードから最新のデータ ディレクトリをコピーしてマシンを再起動します。この手順ではデータの置き換えはより速くできますが、より多くの手動の手順が必要になります。
「別ノードからのデータファイルのコピーによる同期」を参照してください。
手順
注意
書き込みクォーラムが変更されないように、一度に複数のレプリカセット ノードをローテーションしないでください。
ノードの自動同期
この手順は、レプリカセットの同期のための MongoDB の通常のプロセスに依存します。これにより、ノード上の現在データが格納されます。MongoDB の最初の同期のプロセス概要については、「レプリカセットの同期」セクションを参照してください。
最初の同期の操作は、セットの他のノードに影響を与え、プライマリへのトラフィックを増やす可能性があります。同期ノードには、アクセス可能で最新のセットの別のノードが必要です。
インスタンスにデータがない場合、「自己管理型レプリカセットへのノードの追加 」または「自己管理型レプリカセット ノードの置き換え」 の手順に従って、レプリカセットに新しいノードを追加できます。
また、dbPath
ディレクトリのコンテンツが無い状態でインスタンスを再起動することにより、すでにセットのノードである mongod
に最初の同期を強制的に実行させることもできます。
ノードの
mongod
インスタンスを停止します。確実にシャットダウンするには、mongosh
からdb.shutdownServer()
メソッドを使用するか、Linux システムでmongod --shutdown
オプションを使用します。(任意)ノードの
dbPath
ディレクトリからすべてのデータとサブディレクトリのバックアップを作成します。完全なバックアップが必要ない場合は、問題が発生した場合に役立つ可能性のあるトラブルシューティング データを保存するために、diagnostic.data
ディレクトリのみをバックアップすることを検討してください。詳細については、「フルタイム診断データ取得」を参照してください。ノードの
dbPath
ディレクトリからすべてのデータとサブディレクトリを削除します。
この時点で、 mongod
は最初の同期を実行します。最初の同期の長さは、データベースのサイズとレプリカセットのノード間のネットワーク レイテンシによって異なります。
別ノードからのデータファイルのコピーによる同期
このアプローチでは、レプリカセットの既存のノードのデータファイルを使用して、新しいノードまたは古いノードを「シード」にします。データファイルは、新しいノードが oplog にキャッチアップできるように十分に新しい必要があります 。そうでない場合、ノードは最初の同期を実行する必要があります。
データファイルのコピー
データファイルは、スナップショットまたは直接のコピーとして取得できます。ただし、ほとんどの場合、ファイルのコピー操作中にデータファイルが変更されるため、実行中の mongod
インスタンスから別のインスタンスにデータファイルをコピーすることはできません。
重要
データファイルをコピーする場合は、コピーに local
データベースの内容が含まれていることを確認します。
データファイルには バックアップは使用 できませんmongodump
。 スナップショットバックアップ のみ を使用してください。実行中のmongod
インスタンスの一貫したスナップショットを取得する方法については、「自己管理型配置のバックアップ メソッド 」ドキュメントを参照してください。
ノードの同期
「シード」ソースからデータファイルをコピーしたあと、新しいmembers[n]._id
で mongod
インスタンスを起動し、レプリカセットの現在の状態が反映されるまで、oplog からのすべての操作を適用可能にします。レプリカセットの現在のステータスを確認するには、rs.printSecondaryReplicationInfo()
または rs.status()
を使用します。