DBAtlas · データベース運用アトラス

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 レプリカセットの状態 · アプリケーションの接続文字列
  • インストール後 — ログのローテーション · バックアップ戦略 · 監視
環境に合わせた手順プランを開く →