自己管理型コンフィギュレーションサーバーを置き換える
重要
次の手順は8.0コンフィギュレーションサーバーに適用されます。 MongoDB の以前のバージョンについては、対応するバージョンの MongoDB マニュアルを参照してください。
Overview
コンフィギュレーションサーバーのレプリカセットが読み取り専用になる、つまり、プライマリがない場合、シャーディングされたクラスターは、チャンクの分割や移行など、クラスターのメタデータを変更する操作をサポートできません。 チャンクは分割または移行できませんが、アプリケーションはシャーディングされたクラスターにデータを書込むことができます。
いずれかのコンフィギュレーションサーバーが使用できない、または操作できない場合は、可能な限り迅速に修復または交換してください。 次の手順では、 コンフィギュレーションサーバー レプリカセットのノードを新しいノードに置き換えます。
チュートリアルは MongoDB 8.0に固有です。 MongoDB の以前のバージョンについては、対応するバージョンの MongoDB マニュアルを参照してください。
Considerations
次の制限は、コンフィギュレーションサーバーに使用するレプリカセット構成に適用されます。
インデックスを構築する必要があります(つまり どのノードも
members[n].buildIndexes
設定を false に設定しないでください。)
手順
置換コンフィギュレーションサーバーを起動します。
--configsvr
、 --replSet
、 --bind_ip
オプション、および配置に応じてその他のオプションを指定して、 mongod
インスタンスを起動します。
警告
インスタンスをパブリックにアクセス可能な IP アドレスにバインドする前に、クラスターを不正アクセスから保護する必要があります。 セキュリティ推奨事項の完全なリストについては、「自己管理型配置のセキュリティ チェックリスト」を参照してください。 最低限、認証を有効化し、ネットワーク インフラストラクチャの強化 を検討してください。
mongod --configsvr --replSet <replicaSetName> --bind_ip localhost,<hostname(s)|ip address(es)>
新しいコンフィギュレーションサーバーをレプリカセットに追加します。
mongosh
をコンフィギュレーションサーバー レプリカセットのプライマリに接続し、 rs.add()
を使用して新しいノードを追加します。
警告
MongoDB 5.0 より前では、新しく追加されたセカンダリは、データの一貫性が確保されるまでは読み取りを処理できず、プライマリにもなれませんが、投票メンバーとしてカウントされます。MongoDB バージョン 5.0 より前のバージョンを実行中で、 votes
とpriority
の設定が0より大きいセカンダリを追加すると、投票ノードの過半数がオンラインであるにもかかわらずプライマリを選出できない状況が発生する可能性があります。このような状況を回避するには、最初にpriority :0
とvotes :0
を使用して新しいセカンダリを追加することを検討してください。次に、 rs.status()
を実行して、ノードがSECONDARY
状態に移行したことを確認します。最後に、 rs.reconfig()
を使用して優先順位と投票をアップデートします。
rs.add( { host: "<hostnameNew>:<portNew>", priority: 0, votes: 0 } )
最初の同期プロセスでは、コンフィギュレーションサーバーのレプリカセットの 1 つのノードから再起動せずに新しいノードにすべてのデータがコピーされます。
mongos
インスタンスは、再起動せずに、コンフィギュレーションサーバー レプリカセット ノードの変更を自動的に認識します。
新しく追加されたコンフィギュレーションサーバーの投票と優先順位設定を更新します。
新しいノードが
SECONDARY
状態に達していることを確認します。 レプリカセット メンバーの状態を確認するには、rs.status()
を実行します。rs.status() レプリカセットを再構成して、新しいノードの投票と優先順位を更新します。
var cfg = rs.conf(); cfg.members[n].priority = 1; // Substitute the correct array index for the new member cfg.members[n].votes = 1; // Substitute the correct array index for the new member rs.reconfig(cfg) ここで、
n
はmembers
配列内の新しいノードの配列インデックスです。
警告
rs.reconfig()
shell メソッドを使用すると、現在のプライマリを強制的に降格させることができ、選挙が行われます。プライマリが降格すると、mongod
はすべてのクライアント接続を閉じます。通常、この処理時間は 10 ~ 20 秒ですが、スケジュールされたメンテナンス期間中にこれらの変更を行ってください。MongoDB のバージョンによって検証ルールが異なる可能性があるため、異なるバージョンの MongoDB のノードを含むレプリカセットの再設定は避けてください。
置き換えるノードをコンフィギュレーションサーバーのレプリカセットから削除します。
置き換えコンフィギュレーションサーバーの最初の同期が完了したら、プライマリに接続されているmongosh
セッションから、 rs.remove()
を使用して古いノードを削除します。
rs.remove("<hostnameOld>:<portOld>")
mongos
インスタンスは、再起動せずに、コンフィギュレーションサーバー レプリカセット ノードの変更を自動的に認識します。
必要に応じて、mongos
の構成または DNS エントリを更新します。
レプリカセット コンフィギュレーションサーバーでは、 mongos
インスタンスは--configdb
またはsharding.configDB
設定でコンフィギュレーションサーバー レプリカセット名と少なくとも 1 つのレプリカセット メンバーを指定します。
そのため、 mongos
インスタンスが--configdb
またはsharding.configDB
設定で削除されたレプリカセット ノードを指定していない場合は、それ以上のアクションは必要ありません。
ただし、 mongos
インスタンスが--configdb
またはconfigDB
設定で削除されたノードを指定した場合は、次のいずれかが実行されます。
次回
mongos
を再起動する際に 設定を更新するか、古いコンフィギュレーションサーバーを提供していたシステムを指す DNS エントリを変更して、同じホスト名が新しいコンフィギュレーションサーバーを指すようにします。