シャードへのノードの追加
のシャーディングされたクラスター 内の既存のシャードにメンバーを追加できます。 シャードにノードを追加する理由は、レプリカセットにノードを追加するのと同じ理由です。 たとえば、ノードの数を増やすと、フェイルオーバーが発生した場合にプライマリを置き換える候補が増えます。 ノードを追加すると、データの冗長性とレプリカセットの可用性も向上します。
詳細については、「レプリカセットの配置アーキテクチャ 」を参照してください。
このタスクについて
MongoDB 5.0 より前では、新しく追加されたセカンダリは、データの一貫性が確保されるまでは読み取りを処理できず、プライマリにもなれませんが、投票メンバーとしてカウントされます。 MongoDB バージョン 5.0 より前のバージョンを実行中で、 votes
とpriority
の設定が0より大きいセカンダリを追加すると、投票ノードの過半数がオンラインであるにもかかわらずプライマリを使用できない状況が発生する可能性があります。選出される。 このような状況を回避するには、最初にpriority :0
とvotes :0
を使用して新しいセカンダリを追加することを検討してください。 次に、 rs.status()
を実行して、ノードがSECONDARY
状態に移行したことを確認します。 最後に、 rs.reconfig()
を使用して優先順位と投票を更新します。
始める前に
シャード レプリカセットにノードを追加するには、次の手順が必要です。
アクティブなシャーディングされたクラスターのレプリカセット。
新しいノードの新しいホスト サーバー。 新しいホスト サーバーは、シャーディングされたデータセットをサポートし、アクティブなレプリカセットからネットワーク経由でアクセスできる必要があります。
手順
データディレクトリの準備
次のいずれかの戦略を使用して、新しいノードのデータディレクトリを準備します。
新しいノードが既存のノードのデータを自動的に同期するようにします。 このプロセスには時間がかかりますが、管理者の介入は必要ありません。
新しいノードのデータディレクトリに、データが含まれていないことを確認します。新しいノードは、既存のノードからデータをコピーします。
新しいノードがリカバリ状態にある場合、MongoDB がレプリケーション プロセスの一環としてすべてのデータをコピーする前に、そのノードは終了してセカンダリになる必要があります。
既存のノードからデータディレクトリを手動でコピーします。 新しいノードはセカンダリ メンバーになり、レプリカセットの現在の状態に追いつきます。 データをコピーすると、新しいノードが他のレプリカセット ノードと同期するまでの時間が短縮される可能性があります。
データディレクトリを新しいノードにコピーし、 oplog によって許可されたウィンドウ 期間内にレプリケーションを開始できることを確認します。 それ以外の場合、新しいインスタンスで最初の同期を実行する必要があり、「 自己管理型レプリカセットのノードの再同期 」で説明されているように、データの完全な再同期が必要になります。
oplog に関するレプリカセット ノードの現在の状態を確認するには、
rs.printReplicationInfo()
を使用します。
レプリケーション配置パターンの背景については、「レプリカセット配置のアーキテクチャ」ドキュメントを参照してください。
新しい インスタンスを起動するmongod
データディレクトリとレプリカセット名を指定します。 次の例えでは、 /srv/mongodb/db0
データディレクトリとrs0
レプリカセットを指定します。
mongod --dbpath /srv/mongodb/db0 --replSet rs0 --bind_ip localhost,<ip address of the mongod host>
警告
インスタンスをパブリックにアクセス可能な IP アドレスにバインドする前に、クラスターを不正アクセスから保護する必要があります。 セキュリティ推奨事項の完全なリストについては、「自己管理型配置のセキュリティ チェックリスト」を参照してください。 最低限、認証を有効化し、ネットワーク インフラストラクチャの強化 を検討してください。
設定オプションの詳細については、 mongod
マニュアル ページを参照してください。
レプリカセットのプライマリに接続する
ノードの追加は、プライマリーに接続している間のみ可能です。 プライマリに接続するには、 mongosh
を使用します。 host
とport
の値を配置に関連する値に置き換えます。
mongosh --host mongodb0.example.com --port 28015
どのメンバーがプライマリであるかわからない場合は、レプリカセットの任意のメンバーに接続してdb.hello()
コマンドを発行します。
rs.add()
を使用してレプリカセットに新しいノードを追加
member configuration document
を メソッドに渡します。 たとえば、ホストmongodb3.example.net
にメンバーを追加するには、次のコマンドを発行します。
rs.add( { host: "mongodb3.example.net:27017", priority: 0, votes: 0 } )
新しいノードが 状態に達していることを確認しますSECONDARY
レプリカセット メンバーの状態を確認するには、 rs.status()
を実行します。
rs.status()
次のステップ
新しく追加されたメンバーがSECONDARY
状態に移行したら、必要に応じてrs.reconfig()
を使用して、新しく追加されたメンバーのpriority
とvotes
を更新します。
警告
rs.reconfig()
shell メソッドを使用すると、現在のプライマリを強制的に降格させることができ、選挙が行われます。プライマリが降格すると、mongod
はすべてのクライアント接続を閉じます。通常、この処理時間は 10 ~ 20 秒ですが、スケジュールされたメンテナンス期間中にこれらの変更を行ってください。MongoDB のバージョンによって検証ルールが異なる可能性があるため、異なるバージョンの MongoDB のノードを含むレプリカセットの再設定は避けてください。
例
rs.conf()
がmongodb3.example.net:27017
の構成ドキュメントをmembers
配列の 5 番目の要素として返す場合、優先順位と投票を1
に更新するには、次の一連の操作を使用します。
var cfg = rs.conf(); cfg.members[4].priority = 1 cfg.members[4].votes = 1 rs.reconfig(cfg)