MongoDB rolling upgrade (7.0 → 8.0): replica set と sharded cluster
MongoDBレベル: 上級所要時間: 60〜120 分 (データサイズに依存しない。メンバーあたり数分)稼働中の MongoDB 7.0 replica set または sharded cluster を、サービスを止めずに (rolling) 8.0 へアップグレードします。事前チェック (バージョン、FCV、メンバーの状態、ドライバー互換性)、バックアップ、まず secondary、次に stepDown と旧 primary。sharded cluster では balancer の停止、config server、各 shard、mongos の順に進めます。FCV 8.0 への引き上げは任意で burn-in 期間の後に回せます。ロールバックの選択肢とその制約も含みます。同じメジャーバージョン内のパッチ更新 (8.0.x → 8.0.y) ではリポジトリは変わらず、同じメンバー順序で進めます。6.0 からの場合は先に 7.0 へ移行します。
構成: Replica set (3 メンバー以上) または sharded cluster (config server + shard + mongos)
開始前の確認
- すべての… mongod (config server と shard のメンバー) と mongos…メンバー…が 7.0.x で稼働し、FCV は 7.0 です。6.0 からの場合は先に 7.0 へアップグレードします (メジャーバージョンは飛ばせません)。
- ROLLBACK/RECOVERING/STARTUP2 状態のメンバーはなく、secondary は primary から数秒以内の遅れです。
- Oplog ウィンドウがメンテナンス時間 (メンバーごとの停止時間) より十分に長い (少なくとも数時間)。短い場合、停止していたメンバーは復帰時に initial sync が必要になります。
- すべてのアプリケーションドライバーが MongoDB 8.0 と互換性のあるバージョンである (ドライバー互換性表)。古いドライバーは 8.0 に接続できないか、新しい動作をサポートしない可能性があります。
- 8.0 の互換性の変更ページを確認済みで、削除または変更された機能 (パラメーター、コマンド、クエリの動作) を使用していない。可能であれば事前にテスト環境でアップグレードのリハーサルを実施済み。
- 最新で、リストアをテスト済みのバックアップがある (スナップショットまたは mongodump)。メンテナンスウィンドウが承認済み。
- 各メンバーのデータディスクと /var/log に十分な空き容量があり、8.0 リポジトリ (repo.mongodb.org) にアクセスできる。
- Config server と shard のメンバーでは mongod が mongod systemd サービスと /etc/mongod.conf で稼働し、mongos サーバーのサービス名は … である。各サーバーで動いている mongod/mongos プロセスは 1 つだけ。
- アップグレード中に balancer を停止できる。実行中の chunk 移行、resharding、インデックス作成はない。メンテナンス中に shard key やコレクションのメタデータの変更は予定されていない。
ガイドのフェーズ
- 事前チェック — バージョン、FCV、ロール (すべての… mongod…メンバー…) · メンバーの状態とレプリケーション遅延 · クラスターの状態、shard、balancer · 無効な system.buckets コレクション · ドライバーと互換性の確認 · バックアップと戻りポイント …
- リポジトリの変更 (全メンバー) — 8.0 リポジトリを追加し、7.0 リポジトリを無効にする · 8.0 リポジトリを追加し、7.0 リポジトリを無効にする
- Secondary を 1 台ずつアップグレードする — Secondary: … が primary でないことを確認して停止する · Secondary: … に 8.0 のバイナリをインストールする · Secondary: … の THP を 8.0 向けに設定する · Secondary: … を起動して SECONDARY になるのを待つ · Secondary: … が primary でないことを確認して停止する · Secondary: … に 8.0 のバイナリをインストールする …
- Primary を退かせてアップグレードする — Secondary が 8.0 で正常であることを確認する · Primary を退かせる (stepDown) · 旧 primary: … が primary でないことを確認して停止する · 旧 primary: … に 8.0 のバイナリをインストールする · 旧 primary: … の THP を 8.0 向けに設定する · 旧 primary: … を起動して SECONDARY になるのを待つ
- Balancer を停止する — Balancer を停止し、移行の完了を確認する
- Balancer を再開してバージョンを確認する — すべてのコンポーネントが 8.0 であることを確認する · Balancer を再開する
- 検証 — 全メンバーが 8.0 · アプリケーションとログの確認
- featureCompatibilityVersion 8.0 — FCV を 8.0 に引き上げる · FCV を確認する
- ロールバック (問題が発生した場合のみ) — ロールバックの方法を選ぶ · バイナリを 7.0 に戻す: … · バックアップからのリストア · Sharded cluster でのロールバックの順序