MongoDB レプリカセットの構築 (3 メンバー、keyfile と認可)
MongoDBレベル: 中級所要時間: 60~90 分3 メンバーの MongoDB 8.0 (または 7.0) レプリカセットを一から構築します。公式リポジトリ、XFS のデータディレクトリ、RAM に応じた WiredTiger キャッシュ、keyfile によるメンバー間認証、認可、管理者ユーザーとアプリケーションユーザー、read/write concern、フェイルオーバーテスト、接続文字列までを扱い、最終的にメンバー 1 台の喪失を停止なしで乗り切れる、パスワードで保護されたレプリカセットが得られます。データ量や書き込み負荷が 1 台のサーバーを超える場合はシャードクラスタのガイドを開いてください。構築済みのセットの日常運用、バックアップ、ハードニングは別の MongoDB ガイドで扱います。
構成: サーバー 3 台 (primary 1 + secondary 2)、データを保持するメンバーは奇数台
開始前の確認
- すべてのサーバーが同じ最新の OS で稼働し、時刻は NTP (chrony) で同期されている。メンバー間の時刻のずれはセッションと oplog の問題を引き起こします。
- RAM と CPU がフォームの値と一致している (WiredTiger キャッシュはこの値から計算されます)。スワップは設定済みだが小さい。
- データディレクトリ (…) が専用のディスク/LV 上にあり、XFS でフォーマットされ、noatime でマウントされ、fstab に登録されている。WiredTiger で ext4 を使うと性能問題が起きることがあります。
- 各サーバー名がすべてのサーバーとアプリケーションサーバーから名前解決できる (DNS または /etc/hosts)。レプリカセットの構成には IP ではなく名前を使います。
- サーバー間でポート … が開放され、アプリケーションネットワークからこのポートに到達できる。ポートは他のサービスで使用されていない。
- サーバーから repo.mongodb.org と pgp.mongodb.com に HTTPS で接続できる、または社内ミラーが設定されている。
- OS 標準の mongodb パッケージや古い MongoDB のインストールが存在しない。
- 最初のサーバーから他のサーバーへ root (または sudo 権限を持つユーザー) で scp できる (keyfile のコピー用)。できない場合は安全な方法でファイルを手動で移してください。
- root または sudo 権限でログインしている。メンテナンスウィンドウとサーバースナップショット (切り戻し) の計画が用意されている。
ガイドのフェーズ
- OS の準備 (全メンバー) — ホスト名: … · システム更新と必要なツール · 名前解決 (/etc/hosts) · カーネルパラメータ (sysctl) · sysctl 設定を適用する · Transparent Huge Pages: 8.0 向けに有効化する …
- MongoDB ソフトウェアのインストール (全メンバー) — MongoDB … リポジトリを追加する · MongoDB … リポジトリを追加する · MongoDB をインストールする · データディレクトリを準備する · SELinux ポリシーとラベル
- keyfile (メンバー間認証) — keyfile を作成する · keyfile を他のメンバーにコピーする · keyfile のパーミッション: …
- 構成 — mongod.conf: … · systemd 設定を確認する · ファイアウォールでポートを開放する
- サービスの起動 (全メンバー) — mongod を有効化して起動する
- レプリカセットを開始し、ユーザーを作成する — 他のメンバーへの接続を確認する · rs.initiate · 管理者ユーザーを作成する · アプリケーションユーザーを作成する · デフォルトの read/write concern
- 検証とフェイルオーバーテスト — レプリカセットの状態 · 書き込み/読み取りテスト · 計画的フェイルオーバーテスト (rs.stepDown) · アプリケーションの接続文字列
- インストール後 — ログローテーション · logrotate をテストする · バックアップを計画する (必須) · 監視を設定する · セキュリティ: TLS とアクセス