MongoDB シャードクラスタのインストール (config server + シャード + mongos)
MongoDBレベル: 上級所要時間: 2~3 時間データ量や書き込み負荷が 1 つのレプリカセットの限界を超えたときに構築するシャードクラスタです。3 メンバーの config server レプリカセット、2 つまたは 3 つのシャードレプリカセット、2 台の mongos ルーターを構成し、keyfile による内部認証、認可、sh.addShard、シャードキーの選定、コレクションのシャーディング、バランサー、データ分散の確認までを行います。最終的に、アプリケーションが mongos にだけ接続する、水平方向に拡張可能なクラスタが得られます。データが 1 台のサーバーに収まるなら、レプリカセット構成の方がシンプルで十分です。
構成: config server 3 台 + シャードメンバー 2×3 台 + mongos 2 台 (最低 11 台。テスト用ならより少なくて可)
開始前の確認
- すべてのサーバーが同じ最新の 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 権限でログインしている。メンテナンスウィンドウとサーバーのスナップショット (切り戻し) の計画ができている。
- シャードキーをアプリケーションチームと一緒に決定済み: 最も頻繁なクエリのフィルターフィールド、高いカーディナリティ、値の偏りのない分布。シャードキーは後から reshardCollection で変更できるが、コストが大きい。
ガイドのフェーズ
- OS の準備 (全サーバー) — ホスト名: … · ホスト名: … · ホスト名: … · ホスト名: … · ホスト名: … · システムの更新と必要なツール …
- MongoDB ソフトウェアのインストール — MongoDB … のリポジトリを追加する · MongoDB … のリポジトリを追加する · MongoDB サーバーソフトウェアをインストールする (config server とシャード) · mongos と mongosh をインストールする (ルーター) · データディレクトリを準備する · SELinux ポリシー、ラベル、ポート …
- keyfile (クラスタ内部認証) — keyfile を作成する · keyfile を全サーバーにコピーする · keyfile の権限
- Config server レプリカセット — mongod.conf (config server): … · mongod を起動する · rs.initiate (config server)
- Shard A (レプリカセット shardA) — mongod.conf (shard A): … · mongod を起動する · rs.initiate (shard A) · シャードローカルの管理者ユーザー (shard A)
- Shard B (レプリカセット shardB) — mongod.conf (shard B): … · mongod を起動する · rs.initiate (shard B) · シャードローカルの管理者ユーザー (shard B)
- Shard C (レプリカセット shardC) — mongod.conf (shard C): … · mongod を起動する · rs.initiate (shard C) · シャードローカルの管理者ユーザー (shard C)
- mongos (ルーター) — mongos.conf: … · mongos の systemd サービス · mongos を起動する · クラスタ管理者を作成する · シャードを追加する (sh.addShard) · アプリケーションユーザーを作成する
- シャードキーとコレクションのシャーディング — シャードキーの選定 (判断の手順) · コレクションをシャーディングする · バランサーの状態 · バランサーの実行時間帯
- 検証 — クラスタの状態 · 分散テスト · config server レプリカセットの状態 · アプリケーションの接続文字列
- インストール後 — ログのローテーション · バックアップ戦略 · 監視