自己管理型シャーディングされたクラスターの復元
項目一覧
この手順では、 論理ボリューム マネージャー( LVM )のスナップショット などの既存のバックアップスナップショットからシャーディングされたシャーディングされたクラスターを復元します。ソースとターゲットのシャーディングされたシャーディングされたクラスターは同じ数のシャードを持つ必要があります。 シャーディングされたシャーディングされたクラスターのすべてのコンポーネントのLVMスナップショットの作成の詳細については、「 ファイルシステム スナップショットを使用した自己管理シャードクラスタのバックアップ 」を参照してください。
注意
mongodump
とmongorestore
をシャーディングされたクラスターのバックアップ戦略として使用するには、「データベース ダンプを使用した自己管理型シャーディングされたクラスターのバックアップ 」を参照してください。
シャーディングされたクラスターではバックアップと復元に次のいずれかの連携的なプロセスも利用できます。これによりシャード間のトランザクションはアトミック性が継続的に保証されます。
Considerations
AES256-GCM
暗号化モードを使用する暗号化ストレージ エンジンの場合、 AES256-GCM
はすべてのプロセスについて、キーと一意のカウンター ブロック値を使用することを求めます。
AES256-GCM
暗号で構成されたストレージ エンジンの場合:
- ホット バックアップからの復元
- バージョン 4.2 以降、「ホット」バックアップ(
mongod
が実行されている状態)で取得したファイルからの復元では、MongoDB が起動時に「汚染された」キーを検出し、データベース キーを自動的にロールオーバーして、IV(Initialization Vector: 初期化ベクトル)の再利用を回避できるようになりました。
- コールド バックアップからの復元
ただし、「コールド」バックアップ(
mongod
が実行されていない状態)で取得したファイルからの復元では、MongoDB が起動時に「汚染された」キーを検出できず、IV を再利用すると、機密性と整合性における保証が無効になります。バージョン 4.2 以降では、コールド ファイルシステム スナップショットから復元した後にキーが再利用されるのを回避するため、MongoDB に新しいコマンド ライン オプション
--eseDatabaseKeyRollover
が追加されました。--eseDatabaseKeyRollover
オプションを使用して起動すると、mongod
インスタンスはAES256-GCM
暗号で構成されたデータベース キーをロールオーバーして終了します。
始める前に
MongoDB 8.0以降では、 directShardOperations
ロールを使用して、シャードに対してコマンドを直接実行する必要があるメンテナンス操作を実行できます。
警告
directShardOperations
ロールを使用して コマンドを実行すると、クラスターが正しく動作しなくなり、データが破損する可能性があります。 directShardOperations
ロールは、メンテナンス目的で、または MongoDB サポートのガイダンスに必ず従う必要があります。 メンテナンス操作を実行したら、 directShardOperations
ロールの使用を停止します。
A.(任意)レプリカセットの構成確認
この手順では、デフォルト構成を使用して、コンフィギュレーションサーバー レプリカセット(CSRS)と各シャード レプリカセットの新しいレプリカセットを開始します。 復元された CSRS とシャードに対して別のレプリカセット構成を使用するには、レプリカセットを再構成する必要があります。
mongo
shellソースクラスターが正常に実行中され、アクセス可能な場合は、各レプリカセット内のプライマリレプリカセットメンバーに シェルを接続します。次に、rs.conf()
を実行してレプリカ構成ドキュメントを表示します。
ソース シャーディングされたクラスターの 1 つ以上のコンポーネントにアクセスできない場合は、既存の内部ドキュメントを参照して、各シャード レプリカセットとコンフィギュレーションサーバー レプリカセットの構成要件を再構築してください。
B. 復元用のターゲット ホストの準備
- ストレージ領域の要件
- ターゲット ホスト ハードウェアに、復元されたデータ用の十分なオープン ストレージ領域があることを確認します。 ターゲット ホストに保持する既存のシャーディングされたクラスター データが含まれている場合は、既存データと復元されたデータの両方に十分なストレージ領域があることを確認してください。
- LVM の要件
- LVMスナップショットの場合は、少なくとも 1 つのLVM管理ボリュームグループと、抽出されたスナップショットデータ用に十分な空き領域がある論理ボリュームが必要です。
- MongoDB のバージョン要件
ターゲット ホストとソース ホストが同じ MongoDB Server バージョンを持っていることを確認します。 ホストマシンで使用可能な MongoDB のバージョンを確認するには、ターミナルまたは shell から
mongod --version
を実行します。インストールに関する詳細なドキュメントについては、「 MongoDB のインストール 」を参照してください。
- 実行中の MongoDB プロセスのシャットダウン
既存のクラスターに復元する場合は、ターゲット ホストで
mongod
またはmongos
プロセスをシャットダウンします。mongos
を実行しているホストの場合は、mongo
shell をmongos
に接続し、admin
データベースからdb.shutdownServer()
を実行します。use admin db.shutdownServer() mongod
を実行しているホストの場合は、mongo
shell をmongod
に接続し、db.hello()
を実行します。isWritablePrimary
が false の場合、mongod
はレプリカセットのセカンダリメンバーです。 シャットダウンするには、admin
データベースからdb.shutdownServer()
を実行します。isWritablePrimary
が true の場合、mongod
はレプリカセットのプライマリメンバーです。 最初に 、レプリカセットの セカンダリ ノードを シャットダウンします 。 レプリカセットの他のノードを識別するには、rs.status()
を使用します。プライマリは、大多数のノードがオフラインであることを検出すると、自動的に降格します。 ステップダウン後(
db.hello()
がisWritablePrimary: false
を返します)、mongod
を安全にシャットダウンできます。
- データディレクトリの準備
復元されたデータベース ファイルのターゲット ホスト上にディレクトリを作成します。
mongod
を実行するユーザーが、そのディレクトリ内のすべてのファイルとサブフォルダに対する読み取り、書込み (write)、実行権限があることを確認します。sudo mkdir /path/to/mongodb sudo chown -R mongodb:mongodb /path/to/mongodb sudo chmod -R 770 /path/to/mongodb /path/to/mongodb
を、作成したデータディレクトリへのパスに置き換えます。 RHEL / CentOS、Amazon Linux、および SUSE では、デフォルトのユーザー名はmongod
です。- ログ ディレクトリの準備
ターゲット ホストに
mongod
ログ ファイルのディレクトリを作成します。mongod
を実行するユーザーが、そのディレクトリ内のすべてのファイルとサブフォルダに対する読み取り、書込み (write)、実行権限があることを確認します。sudo mkdir /path/to/mongodb/logs sudo chown -R mongodb:mongodb /path/to/mongodb/logs sudo chmod -R 770 /path/to/mongodb/logs /path/to/mongodb/logs
を作成したログ ディレクトリへのパスに置き換えます。 RHEL / CentOS、Amazon Linux、および SUSE では、デフォルトのユーザー名はmongod
です。- 構成ファイルを作成
この手順では、
mongod
構成ファイル を使用して を起動することを前提としています。構成ファイルを希望の場所に作成します。
mongod
を実行するユーザーに、構成ファイルに対する読み取りおよび書込み権限があるようにします。sudo touch /path/to/mongod.conf sudo chown mongodb:mongodb /path/to/mongodb/mongod.conf sudo chmod 644 /path/to/mongodb/mongod.conf RHEL / CentOS、Amazon Linux、および SUSE では、デフォルトのユーザー名は
mongod
です。お好みのテキストエディタで構成ファイルを開き、配置に応じて を変更します。 または、
mongod
の元の構成ファイルにアクセスできる場合は、それをターゲット ホスト上の希望する場所にコピーします。重要
構成ファイルに次の設定が含まれていることを検証します。
storage.dbPath
には、目的のデータ ディレクトリへのパスを設定する必要があります。systemLog.path
は、使用するログ ディレクトリへのパスに設定する必要がありますnet.bindIp
には、ホスト マシンの IP アドレスを含める必要があります。replication.replSetName
には、特定のレプリカセット内の各ノードにわたって同じ 値があります。sharding.clusterRole
には、特定のレプリカセット内の各ノードにわたって同じ 値があります。また、スナップショットで指定されたのと同じ起動オプションを新しい配置で指定する必要があります。
C. コンフィギュレーションサーバーのレプリカセットを復元する
CSRS プライマリmongod
データファイルを復元します。
ご希望のバックアップ メソッドに対応するタブを選択します。
LVMスナップショットをターゲット ホスト マシンにマウントします。 LVM スナップショットをマウントするための具体的な手順は、LVM 構成によって異なります。
次の例では、 「 ファイルシステム スナップショットを使用した自己管理型配置のバックアップと復元 」 手順 の スナップショットの作成 ステップを使用して作成された LVM スナップショットを前提としています。
lvcreate --size 250GB --name mongod-datafiles-snapshot vg0 gzip -d -c mongod-datafiles-snapshot.gz | dd o/dev/vg0/mongod-datafiles-snapshot mount /dev/vg0/mongod-datafiles-snapshot /snap/mongodb この例は、可能なすべての LVM 構成に適用されるわけではありません。 LVM 復元に関する詳細なガイダンスについては、システムの LVM ドキュメントを参照してください。
スナップショット マウントから
mongod
データファイルを B. Prepare the Target Host for Restorationで作成されたデータ ディレクトリにコピーします。cp -a /snap/mongodb/path/to/mongodb /path/to/mongodb -a
オプションは、フォルダーとファイルの権限を保持しながら、ソース パスの内容を宛先パスに再帰的にコピーします。次の構成ファイル設定をコメントアウトするか省略します。
#replication: # replSetName: myCSRSName #sharding: # clusterRole: configsvr 構成ファイルを使用して
mongod
を起動するには、構成ファイルへの完全パスを指定して、コマンドラインで--config
オプションを指定します。mongod --config /path/to/mongodb/mongod.conf 名前空間でフィルタリングされたスナップショットから復元する場合は、
--restore
オプションを指定します。mongod --config /path/to/mongod/mongod.conf --restore mongod
がシステム サービスとして実行するように構成されている場合は、システム サービス マネージャーに推奨されるプロセスを使用して起動します。
ホスト上で選択したバックアップに保存されているデータファイルにアクセスできるようにします。 これには、バックアップ ボリュームをマウントする、ソフトウェア ユーティリティでバックアップを開く、または別のツールを使用してデータをディスクに抽出する必要がある場合があります。 バックアップに含まれるデータにアクセスする手順については、ご希望のバックアップ ツールのドキュメントを参照してください。
バックアップ データのロケーションから
mongod
データファイルをB. Prepare the Target Host for Restorationで作成されたデータ ディレクトリにコピーします。cp -a /backup/mongodb/path/to/mongodb /path/to/mongodb -a
オプションは、フォルダーとファイルの権限を保持しながら、ソース パスの内容を宛先パスに再帰的にコピーします。次の構成ファイル設定をコメントアウトするか省略します。
#replication: # replSetName: myCSRSName #sharding: # clusterRole: configsvr 構成ファイルを使用して
mongod
を起動するには、構成ファイルへの完全パスを指定して、コマンドラインで--config
オプションを指定します。mongod --config /path/to/mongodb/mongod.conf 名前空間でフィルタリングされたスナップショットから復元する場合は、
--restore
オプションも指定します。mongod --config /path/to/mongod/mongod.conf --restore 注意
Cloud ManagerまたはMongoDB Ops Managerのみ
Cloud ManagerまたはMongoDB Ops Managerバックアップの手動復元を実行する場合は、起動前に
disableLogicalSessionCacheRefresh
サーバー パラメータを指定する必要があります。mongod --config /path/to/mongodb/mongod.conf \ --setParameter disableLogicalSessionCacheRefresh=true mongod
がシステム サービスとして実行するように構成されている場合は、システム サービス マネージャーに推奨されるプロセスを使用して起動します。
local
データベースを削除します。
db.dropDatabase()
を使用してlocal
データベースを削除します。
use local db.dropDatabase()
フィルタリングされたファイルリストをローカルデータベースに挿入します。
この手順は、名前空間でフィルタリングされたスナップショットから復元する場合にのみ必要です。
各シャードについて、次の名前形式のフィルタリングされたファイル リストを見つけます: <shardRsID>-filteredFileList.txt
。 このファイルには、次の形式の JSON オブジェクトのリストが含まれています。
{ "filename":"file1", "ns":"sampleDb1.sampleCollection1", "uuid": "3b241101-e2bb-4255-8caf-4136c566a962" }
各シャード ファイルの各 JSON オブジェクトを、 local
データベース内の新しいdb.systems.collections_to_restore
コレクションに追加します。 空のns
またはuuid
フィールドを持つエントリは無視できます。 エントリを挿入するときは、 uuid
フィールドを タイプUUID()
として挿入する必要があります。
計画的または完了したシャードホスト名またはレプリカセット名の変更については、config.shards
のメタデータを更新します。
次のすべてが当てはまる場合は、この手順をスキップできます。
この手順中に、シャード ノード ホスト マシンのホスト名が または 変更されることはありません。
この手順中にシャード レプリカセット名が または 変更されることはありません。
find()
構成データベース のshards
コレクションに対して次の メソッドを発行します。<shardName>
をシャード名に置き換えます。 デフォルトでは、シャード名はそのレプリカセット名です。 addShard
コマンドを使用してシャードを追加し、カスタムname
を指定した場合は、そのname
に<shardName>
を指定する必要があります。
use config db.shards.find( { "_id" : "<shardName>" } )
この操作は、次のようなドキュメントを返します。
{ "_id" : "shard1", "host" : "myShardName/alpha.example.net:27018,beta.example.net:27018,charlie.example.net:27018", "state" : 1 }
重要
_id
値は、対応するシャード上の_id : "shardIdentity"
ドキュメント内のshardName
値と一致する必要があります。 この手順の後半でシャードを復元するときに、 shards
の_id
フィールドがシャードのshardName
値と一致していることを検証します。
updateOne()
メソッドを使用してhosts
string を更新し、シャードの予定されたレプリカセット名とホスト名リストを反映します。 たとえば、次の操作は、"_id" : "shard1"
を使用してシャードの host
接続stringを更新します。
db.shards.updateOne( { "_id" : "shard1" }, { $set : { "host" : "myNewShardName/repl1.example.net:27018,repl2.example.net:27018,repl3.example.net:27018" } } )
すべてのシャード メタデータが、クラスター内の各シャードに計画されているレプリカセット名とホスト名リストを正確に反映するまで、このプロセスを繰り返します。
mongod
を新しい単一ノードレプリカセットとして再起動します。
をシャットダウンし mongod
ます。以下の構成ファイルオプションのコメントを解除するか、または追加します。
replication: replSetName: myNewCSRSName sharding: clusterRole: configsvr
レプリカセット名を変更する場合は、続行する前に、 replSetName
フィールドを新しい名前で更新する必要があります。
更新された構成ファイルを使用してmongod
を起動します。
mongod --config /path/to/mongodb/mongod.conf
mongod
がシステム サービスとして実行するように構成されている場合は、システム サービス マネージャーに推奨されるプロセスを使用して起動します。
新しいレプリカセットを開始します。
デフォルト設定でrs.initiate()
を使用してレプリカセットを開始します。
rs.initiate()
操作が完了したら、 rs.status()
を使用してノードがプライマリになったことを確認します。
レプリカセット ノードを追加します。
CSRS 内の各レプリカセット ノードごとに、ホストマシン上でmongod
を起動します。 クラスターの残りのすべてのノードを正常に起動したら、 mongo
shell をプライマリ レプリカセット ノードに接続します。 プライマリから、 rs.add()
メソッドを使用してレプリカセットの各ノードを追加します。 プレフィックスとしてレプリカセット名を含め、その後にノードのmongod
プロセスのホスト名とポートを含めます。
rs.add("config2.example.net:27019") rs.add("config3.example.net:27019")
特定のレプリカmember
構成設定を持つノードを追加する場合は、ノードのホスト名と配置に必要な 設定を定義するドキュメントをrs.add()
members
に渡すことができます。
rs.add( { "host" : "config2.example.net:27019", priority: <int>, votes: <int>, tags: <int> } )
新しい各メンバーは、プライマリに追いつくために最初の同期を実行します。 同期するデータ量、ネットワークのトポロジーと健全性、各ホスト マシンの電源などの要因によっては、最初の同期が完了するまでに長時間かかる場合があります。
ノードを追加するときに、レプリカセットによって新しいプライマリが選択される場合があります。 どのノードが現在のプライマリであるかを識別するには、 rs.status()
を使用します。 rs.add()
はプライマリからのみ実行できます。
追加で必要なレプリケーション設定が必要な場合は、構成します。
rs.reconfig()
メソッドは、パラメータとして渡された構成ドキュメントに基づいてレプリカセット構成を更新します。 レプリカセットのプライマリ ノードに対してreconfig()
を実行する必要があります。
ステップA. Review Replica Set Configurationsで識別されたレプリカセットの元の構成ファイル出力を参照し、必要に応じて設定を適用します。
D. 各シャード レプリカセットを復元する
シャード プライマリmongod
データファイルを復元します。
ご希望のバックアップ メソッドに対応するタブを選択します。
LVMスナップショットをターゲット ホスト マシンにマウントします。 LVM スナップショットをマウントするための具体的な手順は、LVM 構成によって異なります。
次の例では、 「 ファイルシステム スナップショットを使用した自己管理型配置のバックアップと復元 」 手順 の スナップショットの作成 ステップを使用して作成された LVM スナップショットを前提としています。
lvcreate --size 250GB --name mongod-datafiles-snapshot vg0 gzip -d -c mongod-datafiles-snapshot.gz | dd o/dev/vg0/mongod-datafiles-snapshot mount /dev/vg0/mongod-datafiles-snapshot /snap/mongodb この例は、可能なすべての LVM 構成に適用されるわけではありません。 LVM 復元に関する詳細なガイダンスについては、システムの LVM ドキュメントを参照してください。
スナップショット マウントから
mongod
データファイルをB. Prepare the Target Host for Restorationで作成されたデータ ディレクトリにコピーします。cp -a /snap/mongodb/path/to/mongodb /path/to/mongodb -a
オプションは、フォルダーとファイルの権限を保持しながら、ソース パスの内容を宛先パスに再帰的にコピーします。次の構成ファイル設定をコメントアウトするか省略します。
#replication: # replSetName: myShardName #sharding: # clusterRole: shardsvr 構成ファイルを使用して
mongod
を起動するには、構成ファイルへの完全パスを指定して、コマンドラインで--config
オプションを指定します。mongod --config /path/to/mongodb/mongod.conf 名前空間フィルターを使用してスナップショットから復元する場合は、
--restore
オプションを指定してください。mongod --config /path/to/mongod/mongod.conf --restore mongod
がシステム サービスとして実行するように構成されている場合は、システム サービス マネージャーに推奨されるプロセスを使用して起動します。
ホスト上で選択したバックアップに保存されているデータファイルにアクセスできるようにします。 これには、バックアップ ボリュームをマウントする、ソフトウェア ユーティリティでバックアップを開く、または別のツールを使用してデータをディスクに抽出する必要がある場合があります。 バックアップに含まれるデータにアクセスする手順については、ご希望のバックアップ ツールのドキュメントを参照してください。
バックアップ データのロケーションから
mongod
データファイルをB. Prepare the Target Host for Restorationで作成されたデータ ディレクトリにコピーします。cp -a /backup/mongodb/path/to/mongodb /path/to/mongodb -a
オプションは、フォルダーとファイルの権限を保持しながら、ソース パスの内容を宛先パスに再帰的にコピーします。次の構成ファイル設定をコメントアウトするか省略します。
#replication: # replSetName: myShardName #sharding: # clusterRole: shardsvr 構成ファイルを使用して
mongod
を起動するには、構成ファイルへの完全パスを指定して、コマンドラインで--config
オプションを指定します。mongod --config /path/to/mongodb/mongod.conf 注意
Cloud ManagerまたはMongoDB Ops Managerのみ
Cloud ManagerまたはMongoDB Ops Managerバックアップの手動復元を実行する場合は、起動前に
disableLogicalSessionCacheRefresh
サーバー パラメータを指定する必要があります。mongod --config /path/to/mongodb/mongod.conf \ --setParameter disableLogicalSessionCacheRefresh=true mongod
がシステム サービスとして実行するように構成されている場合は、システム サービス マネージャーに推奨されるプロセスを使用して起動します。
__system
ロールを持つ一時ユーザーを作成します。
この手順では、 admin.system.version
コレクション内のドキュメントを変更します。 認証を強制するクラスターの場合、このコレクションを変更する権限は__system
ロールのみに付与されます。 クラスターが認証を強制しない場合は、この手順をスキップできます。
警告
__system
ロールの所有者は、データベース内の任意のオブジェクトに対して任意のアクションを実行することができます。 この手順には、このステップで作成された ユーザーを削除するための手順が含まれています。 この手順の範囲外で、このユーザーをアクティブのままにしないでください。
指定されたホストのみが特権ユーザーとして認証できるように、 clientSource
認証制限を構成してこのユーザーを作成することを検討してください。
admin
データベースでのuserAdmin
ロール、またはuserAdminAnyDatabase
ロールを持つユーザーとして認証します。use admin db.auth("myUserAdmin","mySecurePassword") __system
ロールを持つユーザーを作成します。db.createUser( { user: "mySystemUser", pwd: "<replaceMeWithAStrongPassword>", roles: [ "__system" ] } ) パスワードは、システムのセキュリティを確保し、悪意のあるアクセスを防止または遅延させるために、ランダムで長く、複雑なものにする必要があります。
特権ユーザーとして認証します。
db.auth("mySystemUser","<replaceMeWithAStrongPassword>")
local
データベースを削除します。
db.dropDatabase()
を使用してlocal
データベースを削除します。
use local db.dropDatabase()
minOpTimeRecovery
ドキュメントをadmin.system.versions
コレクションから削除します。
シャーディング内部を更新するには、deleteOne()
データベースのsystem.version
コレクションに対して次のadmin
メソッドを発行します。
use admin db.system.version.deleteOne( { _id: "minOpTimeRecovery" } )
注意
system.version
コレクションは内部のシステム コレクションです。 このような特定の指示が与えられた場合にのみ、 を変更する必要があります。
オプション: CSRS ホスト名またはレプリカセット名が変更された場合は、各シャードの ID ドキュメントでシャード メタデータを更新します。
次のすべてが当てはまる場合は、この手順をスキップできます。
この手順では、CSRS ホストのホスト名は変更されませんでした。
この手順では、CSRS レプリカセット名は変更されませんでした。
admin
データベースのsystem.version
コレクションには、 CSRS 接続stringなど、シャードに関連するメタデータが含まれています。 CSRS の復元中に CSRS 名またはノードのホスト名が変更された場合は、このメタデータを更新する必要があります。
次のfind()
メソッドをadmin
データベース内のsystem.version
コレクションに対して発行します。
use admin db.system.version.find( {"_id" : "shardIdentity" } )
find()
メソッドは、次のようなドキュメントを返します。
{ "_id" : "shardIdentity", "clusterId" : ObjectId("2bba123c6eeedcd192b19024"), "shardName" : "shard1", "configsvrConnectionString" : "myCSRSName/alpha.example.net:27019,beta.example.net:27019,charlie.example.net:27019" }
次のupdateOne()
メソッドは、host
stringが最新の CSRS 接続stringを表すようにドキュメントを更新します。
db.system.version.updateOne( { "_id" : "shardIdentity" }, { $set : { "configsvrConnectionString" : "myNewCSRSName/config1.example.net:27019,config2.example.net:27019,config3.example.net:27019"} } )
重要
shardName
値は、CSRS のshards
コレクション内の_id
値と一致する必要があります。 CSRS のメタデータがシャードのメタデータと一致することを検証します。 CSRS メタデータを表示する手順については、この手順のC. Restore Config Server Replica Set部分のサブステップ3を参照してください。
mongod
を新しい単一ノードレプリカセットとして再起動します。
をシャットダウンし mongod
ます。以下の構成ファイルオプションのコメントを解除するか、または追加します。
replication: replSetName: myNewShardName sharding: clusterRole: shardsvr
レプリカセット名を変更する場合は、続行する前に、 replSetName
フィールドを新しい名前で更新する必要があります。
更新された構成ファイルを使用してmongod
を起動します。
mongod --config /path/to/mongodb/mongod.conf
mongod
がシステム サービスとして実行するように構成されている場合は、システム サービス マネージャーに推奨されるプロセスを使用して起動します。
新しいレプリカセットを開始します。
デフォルト設定でrs.initiate()
を使用してレプリカセットを開始します。
rs.initiate()
操作が完了したら、 rs.status()
を使用してノードがプライマリになったことを確認します。
レプリカセット ノードを追加します。
シャード レプリカセット内の各レプリカセット ノードについて、そのホストマシン上でmongod
を起動します。 クラスターの残りのすべてのノードを正常に起動したら、 mongo
shell をプライマリ レプリカセット ノードに接続します。 プライマリから、 rs.add()
メソッドを使用してレプリカセットの各ノードを追加します。 プレフィックスとしてレプリカセット名を含め、その後にノードのmongod
プロセスのホスト名とポートを含めます。
rs.add("repl2.example.net:27018") rs.add("repl3.example.net:27018")
特定のレプリカmember
構成設定を持つノードを追加する場合は、ノードのホスト名と配置に必要な 設定を定義するドキュメントをrs.add()
members
に渡すことができます。
rs.add( { "host" : "repl2.example.net:27018", priority: <int>, votes: <int>, tags: <int> } )
新しい各メンバーは、プライマリに追いつくために最初の同期を実行します。 同期するデータ量、ネットワークのトポロジーと健全性、各ホスト マシンの電源などの要因によっては、最初の同期が完了するまでに長時間かかる場合があります。
ノードを追加するときに、レプリカセットによって新しいプライマリが選択される場合があります。 どのノードが現在のプライマリであるかを識別するには、 rs.status()
を使用します。 rs.add()
はプライマリからのみ実行できます。
追加で必要なレプリケーション設定が必要な場合は、構成します。
rs.reconfig()
メソッドは、パラメータとして渡された構成ドキュメントに基づいてレプリカセット構成を更新します。 レプリカセットのプライマリ ノードに対してreconfig()
を実行する必要があります。
ステップA. Review Replica Set Configurationsで識別されたレプリカセットの元の構成ファイル出力を参照し、必要に応じて設定を適用します。
一時特権ユーザーを削除します。
認証が強制されるクラスターの場合は、この手順の前半で作成した特権ユーザーを削除します。
admin
データベースでのuserAdmin
ロール、またはuserAdminAnyDatabase
ロールを持つユーザーとして認証します。use admin db.auth("myUserAdmin","mySecurePassword") 特権ユーザーを削除します。
db.removeUser("mySystemUser")
E. 各 の再起動 mongos
クラスター内の各mongos
を再起動します。
mongos --config /path/to/config/mongos.conf
配置に必要な他のすべてのコマンドライン オプションを含めます。
CSRS レプリカセット名またはノードのホスト名が変更された場合は、更新された構成サーバー接続mongos
を使用してsharding.configDB
構成ファイルの設定string を更新します。
sharding: configDB: "myNewCSRSName/config1.example.net:27019,config2.example.net:27019,config3.example.net:27019"
F. クラスターのアクセス可能性を検証する
mongo
shell をクラスターのmongos
プロセスの 1 つに接続します。 クラスター全体のステータスを確認するには、 sh.status()
を使用します。 sh.status()
がバランサーが実行中でないことを示す場合は、 sh.startBalancer()
を使用してバランサーを再起動します。 [1]
すべてのシャードがアクセス可能で通信していることを確認するには、一時的にシャーディングされたコレクションにテスト データを挿入します。 クラスター内の各シャード間でデータが分割され、移行されていることを確認します。 mongo
shell を各シャード プライマリに接続し、 db.collection.find()
を使用して、データが期待どおりにシャーディングされたことを検証できます。
[1] | MongoDB 6.0.3以降、 自動チャンク分割は実行されません。 これはバランシング ポリシーの改善によるものです。 自動分割コマンドは引き続き存在しますが、操作は実行されません6.0.3より前のバージョンの MongoDB では、 sh.startBalancer() は、シャーディングされたクラスターの自動分割も有効にします。 |