
2026/02/17 2:35
ペタバイト規模でのゼロダウンタイム移行(2024)
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
改善された要約
PlanetScale は、非ロックスナップショット、継続的レプリケーション、および Vitess ツールを組み合わせることで、ペタバイト規模の大容量 MySQL データベースのシームレスな移行を可能にします。まず、一貫したスナップショットがトラフィック停止なしでデータベース状態を取得し、メタデータは後続のレプリケーション用に保存されます。データはターゲットクラスターへコピーされる間、VReplication が新しいコピーを継続的な変更と同期させます。VDiff 比較が両側が一致していることを確認し、切り替え前に検証します。必要であれば、逆レプリケーションにより移行を即座にロールバックできます。追跡が完了した後、MoveTables SwitchTraffic がアプリケーショントラフィックを PlanetScale 経由にルーティングし、最終的な検証を行います。その後、短時間の切り替えで書き込みを一時停止し、逆レプリケーションを確立してエラーから保護します。自信が持てたら、MoveTables がルーティング規則をクリーンアップし、古いシステムを非稼働化します。このプロセスにより、企業はダウンタイムとデータ損失リスクを最小限に抑えつつ、Vitess 上で MySQL ワークロードをシャーディング・スケールでき、移行中も継続的なサービスを維持できます。
本文
マット・ロード著 | 2024年8月13日
スケーリングの課題、頻繁なメンテナンス作業、いつ崩壊するかという常に漂う不安、そして急激に上昇するコスト――これらは、多くのチームが「自分たちのデータベースが本来ある場所を超えてしまった」ことを回避しようと忍耐してきた共通の問題です。確かに理由は十分にあります。1つのデータベースサーバーやシステムから別のものへ移行する際には、長時間のダウンタイム、データ損失、バージョン不整合、予期せぬエラーといったリスクが伴います。
もし、移行をもっと簡単にできたら?
PlanetScale では、テラバイトからペタバイト規模のデータベースをゼロダウンタイムで移行することを日常的に実践しています。私たちのプロセスは、本番トラフィックを使って徹底的にテストし、必要ならば外部データベースへ戻すことも可能です。
1. データ移行の概要
| ステップ | 内容 |
|---|---|
| 1. スナップショット | ロックをかけずに一貫性のあるスナップショット(論理的または物理的)を取得。 |
| 2. リストア | SQL 文を再実行するか、物理スナップショットを新システムへ復元。 |
| 3. 検証 | 新しいシステムが正しくデータを読み取り・提供できることを基本チェックで確認。 |
| 4. 切り替え | アプリケーションのトラフィックを新システムへリダイレクト。 |
| 5. 廃止 | 新システムに満足したら、古いシステムを停止・アーカイブ。 |
単純な手順だと長時間のダウンタイムが不可欠であり、24 時間 7 日稼働する本番環境には適さないことが多いです。理想的なプロセスはすべてのステップをダウンタイムなしで実行し、問題が発生した場合に切り替えを元に戻せるようにします。
2. PlanetScale の移行手法
-
一貫性あるスナップショット
- ロックをかけずに取得し、メタデータも含めてスナップ後の変更を再現可能。
- 移行中もレプリケーションが継続できるため、可用性は維持されます。
-
データコピー & 継続的レプリケーション
- 新システムへデータをコピーしながら、古システムからの変更をリアルタイムでレプリケート。
- 常に最新状態を保ち、いつでも切り替え可能な状態にします。
-
VDiff(バリュー差分)検証
- VDiff を実行してコピーしたデータが正確かつ同期されていることを確認。
- 切り替え前に不一致点を特定できます。
-
事前切り替えトラフィックルーティング
- アプリケーションは PlanetScale へリクエストを送るが、実際のクエリはまだ古システムへルーティング。
- 実運用に近い環境でテストでき、パフォーマンスへの影響も最小限(同一クラウドリージョン内ならほぼ無視可)。
-
透明な切り替え
- 切り替え時にクエリを一時停止/バッファリングし、再開は 1 秒未満で完了。
- 逆レプリケーションを確立しておくことで、データ損失やダウンタイムなしに元へ戻せます。
-
最終化
- 確信したら古システムを廃止。
- ユーザーは切り替え時にわずかなレイテンシ増加しか感じません。
3. シャーディングとスケーリング
データベースが約 250 GiB(Vitess の推奨値)を超えると、水平シャーディングがハードウェアコストやパフォーマンス低下を抑えつつ最も効率的なスケール手段です。PlanetScale は Vitess を基盤にしており、未分割の MySQL データベースを移行中に複数シャードへ簡単に分割できます。
4. 技術詳細
-
スナップショット & レプリケーション
各シャードの PRIMARY タブレットは外部 MySQL インスタンスからストリームし、GTID スナップショットを取得する際にはテーブルを短時間ロックします。行は PK 順でターゲットシャードへ送られ、binlog イベントはフィルタリング・再生してデータを最新に保ちます。 -
VDiff ワークフロー
名前付きロックが同時変更を防止し、VDiff はソースとターゲットのスナップショットを行単位で比較。差分はサイドカー表に保存されレビュー用に残します。 -
トラフィック切り替え
が切り替えを実施:タブレットヘルス、レプリケーション遅延チェック、キー空間ロック、書き込みバッファリング、キャッチアップ完了待機、逆レプリケーション設定、自動インクリメント用シーケンス初期化、ルーティング規則更新。元のワークフローは凍結され、MoveTables SwitchTraffic
で不要なアーティファクトをクリーンアップ。MoveTables complete -
フォールトトレランス
任意のステップが失敗してもシステムは中断点から再開します。数時間・数日かけて行われる大規模移行にとって不可欠です。
5. 結論
データベースのバージョンアップ、シャーディング、または新しいシステムへの移行は避けられない課題です。PlanetScale のゼロダウンタイムアプローチは、綿密な計画と継続的レプリケーション、堅牢なツールを組み合わせることで典型的な落とし穴を排除できることを示しています。次のデータベース移行に向けて準備を進めているなら、これらの原則を採用するか、または私たちに連絡してください。顧客としても、コミュニティリソースを通じても喜んでサポートいたします。
快適な移行を!