今回は「MongoDBの既存レプリカセットに新しいメンバーを追加する方法」についてまとめます。
前提・制約
MongoDBのレプリカセットにおけるそもそもの制約も含めて追加しようとしている新しいMongoDBサーバーが以下の前提や制約を満たしていることを確認しておきます。
- 有効なレプリカセットが既に存在している
- 追加したい新しいMongoDBは有効なレプリカセットにアクセス可能な状態
- 追加するメンバーを含めて投票権は7台以下になっている
- 追加するメンバー含めてレプリカセット全体が50台以下になっている
レプリカセットへの追加手順
レプリカセットに追加
-
MongoDBを起動
1mongod --config
"C:\mongodb\server4\mongod4.cfg"
-
プライマリサーバーに接続
プライマリサーバーが不明な場合、任意のサーバーに接続して rs.status() を実行することでプライマリサーバーがどれか確認できます。
1mongo --host 127.0.0.1:8001
-
レプリカセットに追加する新しいメンバー情報を作成
優先度(priority)、隠し(hidden)、遅延(slaveDelay)など必要な設定があれば合わせて準備しておきます。
1PRIMARY> member = { host: "127.0.0.1:8004" }
アービターの場合、以下のように arbiterOnly を設定しておきます。
1PRIMARY> member = { host: "127.0.0.1:8004", arbiterOnly: true }
-
レプリカセットに新規メンバーを追加
1PRIMARY> rs.add(member)
追加したメンバーのデータ確認
レプリカセットメンバーに追加されると自動的にデータ同期が始まります。 データ同期されていることを以下の手順で確認します。
-
追加したメンバーへ接続
1mongo --host 127.0.0.1:8004
-
参照設定変更
セカンダリ接続しただけだとデータ参照できないので、以下の mongoシェル を実行して参照できるようにします。
1SECONDARY> rs.slaveOk()
-
データ確認
以下はサンプルとして test データベースの users コレクション を参照するようなコードです。 存在する任意のコレクションを確認してみてください。
12SECONDARY> use test
SECONDARY> db.users.
find
()
新規メンバーのデータを同期
基本的にはデータは自動的に同期されますが、何かしらの理由でうまくいかなかった場合、以下の手順で強制的に再同期させます。
-
追加した新規メンバーを停止
追加した新規メンバーに mongoシェル でログインし、以下のコマンドを実行します。
12> use admin
> db.shutdownServer()
-
追加したMongoDBサーバーの dbPath 配下のファイル・フォルダを削除
追加した後に再同期を自動的におこなえるようにするため、 dbPath 配下のファイル・フォルダは削除しておきます。
-
追加した新規メンバーを起動
コマンドプロンプト上で以下のコマンドを実行します。
1mongo --config "C:\mongo\server4\server4.cfg"
今回は「MongoDBの既存レプリカセットに新しいメンバーを追加する方法」についてまとめました。 参考になったでしょうか? 本記事がお役に立っていると嬉しいです!!
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!