MongoDB 単一ノードをレプリカセットに変換する
本製品の構成では、MongoDB の単一ノードには、ストレージコンポーネントイメージに内蔵された MongoDB と、個別にデプロイした MongoDB の2種類があります。さらに認証の有効・無効によって、次の4つのケースに分かれます。
- 内蔵 MongoDB、認証無効
- 内蔵 MongoDB、認証有効
- 外部 MongoDB、認証無効
- 外部 MongoDB、認証有効
- 認証なし組み込みMongoDBの場合
- 組み込み MongoDB(認証有効)
- 認証なし外部MongoDBの場合
- 外部 MongoDB(認証有効)
組み込み MongoDB とは、sc:3.2.0 イメージ内に含まれる MongoDB コンポーネントを指します。
-
docker-compose.yaml に
ENV_MONGODB_DAEMON_ARGS: "--replSet sc-mongodb"を追加します。ENV_MONGODB_DAEMON_ARGSを追加すると、自動的にレプリカセットモードに変換されます。内蔵スクリプトはrs.initiate({_id: "sc-mongodb",members:[ {_id : 1, host : "sc:27017"} ]})です(他のクライアントからこの MongoDB に接続する場合は、各クライアントに sc サービス名の名前解決用 hosts エントリを追加してください)。services:core:image: nocoly/core:7.5.1environment: &app-environmentENV_MONGODB_DAEMON_ARGS: "--replSet sc-mongodb" -
サービスを再起動します。マネージャのルートディレクトリで以下を実行してください。
bash ./service.sh restartall
組み込み MongoDB とは、sc:3.2.0 イメージ内に含まれる MongoDB コンポーネントを指します。
-
キーファイルを作成します。
echo $(openssl rand -base64 32) > /data/hap/script/volume/data/mongodb/keyfilechmod 400 /data/hap/script/volume/data/mongodb/keyfile -
環境変数
ENV_MONGODB_DAEMON_ARGSを修正し、--keyFile /data/mongodb/keyfile --replSet sc-mongodbを追加します。services:core:image: nocoly/core:7.5.1environment: &app-environmentENV_MONGODB_DAEMON_ARGS: "--auth --keyFile /data/mongodb/keyfile --replSet sc-mongodb" -
サービスを再起動します。マネージャのルートディレクトリで以下を実行してください。
bash ./service.sh restartall -
レプリカセットへの変換を行います。
ストレージコンポーネントのコンテナにアクセスします。
docker exec -it script_sc_1 bashroot アカウントで admin データベースに接続します。
mongo mongodb://root:******@sc:27017/adminレプリカセットを初期化します(他のクライアントからこの MongoDB に接続する場合は、各クライアントに sc サービス名の名前解決用 hosts エントリを追加してください)。
rs.initiate({_id: "sc-mongodb",members:[ {_id : 1, host : "sc:27017"} ]}) -
もう一度サービスを再起動します。マネージャのルートディレクトリで以下を実行してください。
bash ./service.sh restartall
-
起動コマンドに
--replSet sc-mongodbを追加して MongoDB を再起動します。例:mongod --bind_ip 0.0.0.0 --dbpath /data/mongodb --logpath /data/logs/mongodb.log --replSet sc-mongodb -
MongoDB に接続し、レプリカセッ トへの変換を行います。
admin データベースへ接続します。
mongo mongodb://sc:27017/adminレプリカセットを初期化します(他のクライアントからこの MongoDB に接続する際、IP アドレスで通信できない場合はサービス名を指定できます。ただし、すべてのクライアントに sc サービス名の名前解決用 hosts エントリを追加する必要があります)。
rs.initiate({_id:"sc-mongodb",members:[{_id:1,host:"サービス名またはIP:27017"}]}) -
サービスを再起動します。マネージャのルートディレクトリで以下を実行してください。
bash ./service.sh restartall
-
MongoDB のデータディレクトリ(例:
/data/mongodb/)にキーファイルを作成します。echo $(openssl rand -base64 32) > /data/mongodb/keyfilechmod 400 /data/mongodb/keyfile -
起動コマンドに
--keyFile /data/mongodb/keyfile --replSet sc-mongodbを追加して MongoDB を再起動します。例:mongod --bind_ip 0.0.0.0 --dbpath /data/mongodb --logpath /data/logs/mongodb.log --auth --keyFile /data/mongodb/keyfile --replSet sc-mongodb -
MongoDB に接続し、レプリカセットへの変換を行います。
root アカウントで admin データベースに接続します。
mongo mongodb://root:******@sc:27017/adminレプリカセットを初期化します(他のクライアントからこの MongoDB に接続する際、IP アドレスで通信できない場合はサービス名を指定できます。ただし、すべてのクライアントに sc サービス名の名前解決用 hosts エントリを追加する必要があります)。
rs.initiate({_id:"sc-mongodb",members:[{_id:1,host:"サービス名またはIP:27017"}]}) -
サービスを再起動します。マネージャのルートディレクトリで以下を実行してください。
bash ./service.sh restartall