0 Dockerイメージの取得
docker pull mongo:5.0.9
1 マスターとスレーブサーバーのディレクトリ作成
mkdir -p /data/mongo/primary
mkdir -p /data/mongo/secondary
mkdir -p /data/mongo/config
mkdir -p /data/mongo/logs
2 セキュリティキーの生成
openssl rand -base64 756 > /data/mongo/config/mongo_security.key
chmod 600 /data/mongo/config/mongo_security.key
2.1 セキュリティキーの同期
scp /data/mongo/config/mongo_security.key user@slave_server_ip:/data/mongo/config/
3 設定ファイルの作成
nano /data/mongo/config/mongo_settings.conf
3.1 マスターサーバーの設定
# データストレージ設定
storage:
dbPath: /data/mongo/primary
# ログ設定
systemLog:
destination: file
logAppend: true
path: /data/mongo/logs/mongo_primary.log
# ネットワーク設定
net:
port: 27017
bindIp: 0.0.0.0
# レプリケーション設定
replication:
replSetName: "mongo_replica_set"
3.2 スレーブサーバーの設定
# スレーブサーバーにも同様の設定ファイルを作成
scp /data/mongo/config/mongo_settings.conf user@slave_server_ip:/data/mongo/config/
4 MongoDBコンテナの起動
docker run --name mongo_primary -d \
-p 27017:27017 \
--privileged=true \
-v /data/mongo/config:/etc/mongo/config \
-v /data/mongo/primary:/data/db \
-v /data/mongo/logs:/var/log/mongo \
mongo:5.0.9 --config /etc/mongo/config/mongo_settings.conf
5 レプリカセットの初期化
# コンテナに入る
docker exec -it mongo_primary bash
# MongoDBシェルを起動
mongosh
# レプリカセットの初期化
rs.initiate(
{
_id: "mongo_replica_set",
members: [
{ _id: 0, host: "master_ip:27017" },
{ _id: 1, host: "slave_ip:27017" }
]
}
)
# アービターノードを追加
rs.addArb("arbiter_ip:27017")
# レプリカセットの状態確認
rs.status()
6 ユーザーと権限の設定
use admin;
# 管理者ユーザーの作成
db.createUser({
user: "db_admin",
pwd: "secure_password_123",
roles: [{ role: "root", db: "admin" }]
})
use application_db;
# アプリケーションユーザーの作成
db.createUser({
user: "app_user",
pwd: "app_password_456",
roles: [{ role: "readWrite", db: "application_db" }]
})
# ユーザーリストの確認
show users
# 権限の確認
use admin;
db.runCommand({ connectionStatus: 1 })
7 認証機能の有効化
# 設定ファイルの修正
nano /data/mongo/config/mongo_settings.conf
# 認証設定の追加
security:
authorization: enabled
keyFile: /etc/mongo/config/mongo_security.key
# MongoDBコンテナの再起動
docker restart mongo_primary