Dockerを使用したMongoDBレプリカセットの構築手順

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

タグ: Docker MongoDB レプリカセット クラスタリング データベース管理

5月21日 03:24 投稿