Uber、2100超のMySQL 5.7クラスタをダウンタイムなしで8.0に移行したと明かす 理由やアップグレード戦略、移行の教訓とは:1万6000以上のノードを3つの地域、19の運用ゾーンに分散配置
Uberは2024年8月に公開したブログ記事で、2100を超えるMySQL 5.7クラスタをサービスのダウンタイムなしでMySQL 8.0に移行していたことを明らかにした。
Uberは公式ブログで、同社におけるデータインフラの中核を担う「MySQL 5.7」を「MySQL 8.0」に移行させた取り組みを紹介した。
Uberが2024年8月に公開した記事によると、同社のデータインフラは、2100を超えるMySQLクラスタで構成され、1秒当たり約300万件のクエリを処理している。数PBに及ぶデータの可用性を確保するために、1万6000以上のノードを3つの地域、19の運用ゾーンに分散配置しているという。
Uberは、MySQL 5.7からMySQL 8.0への移行による成果について「データベースのロック時間は94%減少し、一部のクエリ実行時間は78%短縮された」とした上で、MySQL 5.7をMySQL 8.0に移行させた理由や、アップグレード戦略を次のように説明している。
MySQL 8.0への移行を決めた理由
Uberが、MySQL 5.7からMySQL 8.0への移行を決めた理由は大きく分けて2つある。
1つ目は、MySQL 5.7の拡張サポートが2023年10月31日に終了し、セキュリティの脆弱(ぜいじゃく)性やバグが放置されるといったリスクが生じたことだ。
2つ目は、MySQL 8.0でクエリ実行速度の高速化や並列処理の改善など、ユーザー体験(UX)の向上が期待でき、「デュアルパスワード」をはじめとする、運用効率を高めるさまざまな新機能や強化が行われていたことだ。
こうした背景の下、Uberは2023年ごろからMySQL 8.0へのアップグレードに着手し、1年以上の期間を経て、アップグレードを果たしたという。
移行における課題
MySQL 8.0に移行する上で課題となったのが、アップグレード中のダウンタイムを最小限に抑えることだった。
「サービスレベル目標(SLO)とサービスレベル契約(SLA)を維持することは、ユーザーへのサービスが中断されないことを保証する上で最も重要だった。綿密な計画とアップグレード作業全体において、ダウンタイムの最小化に重点を置いた」
そこで同社は、MySQL 5.7と並行してMySQL 8.0をインストールするサーバを用意し、トラフィックを徐々にMySQL 8.0に切り替える「サイドバイサイドアップグレード」を採用した。
「サイドバイサイドアップグレードの場合、MySQL 8.0ノードを構築しながらMySQL 5.7ノードを実行し続けることができる。つまり、大幅なダウンタイムなしでアプリケーションを新しいノードに徐々に移行できる。もしMySQL 8.0ノードで問題が生じた場合は、古いMySQL 5.7ノードにロールバックすることも可能であり、本番環境の読み取り専用アプリケーションの負荷を検証することもできる。パフォーマンス低下やデータ損失などのリスクを軽減し、移行完了前に、MySQL 8.0が期待通りに動作することを確認するのに役立つ」
さらに、MySQL 5.7からMySQL 8.0への移行を完全に自動化するため、専用のワークフローシステムを新たに開発したという。このワークフローシステムによるアップグレードプロセスは以下の通りだ。
- ノードレプリケーション:クラスタ内の各MySQL 5.7ノードに対応するMySQL 8.0レプリカノードを同じリージョン/ゾーンに追加し、MySQL 5.7ノードとMySQL 8.0ノード間の一貫性を維持する
- 耐久性テスト:約1週間かけて、システムのパフォーマンスを観察し、MySQL 8.0ノードによって引き起こされるパフォーマンス低下やSLA違反を検出する
- トラフィックの転送:耐久性テストの終了後、MySQL 5.7のレプリカノードを無効化し、トラフィックの転送をできなくさせる
- MySQL 8.0ノードをクラスタのプライマリーステータスに昇格させる
- 古いノードを削除:全てのMySQL 5.7ノードが削除され、MySQL 8.0へのアップグレードが完了する
「何千ものクラスタを手作業でアップグレードするのは容易ではない。複数のステップからなるアップグレードプロセスと自動ロールバック機構を組み込んだ堅牢(けんろう)なワークフローシステムにより、人的エラーのリスクを軽減し、シームレスなアップグレードを実現可能になった」と、Uberは述べている。
MySQL 8.0移行の効果
Uberによると、MySQL 8.0への移行により、以下のようなパフォーマンスの改善につながったという。
- 1024スレッドで100万のデータを挿入する場合、最も遅い1%の処理のレイテンシ(p99レイテンシ)が29%改善した
- 1024スレッドで100万のデータを読み取る場合、p99レイテンシが33%改善した
- 1024スレッドで100万のデータを更新する場合、p99レイテンシが47%改善した
- データベースのロックタイムが約94%短縮した
- 一部のクエリの実行時間が約78%短縮した
アップグレードを通じて得られた教訓
Uberは、MySQL 8.0へのアップグレードを通じて得られた教訓を、次のように共有している。
- 大規模なアップグレード時は、可観測性プラットフォーム、テスト体制、堅牢なロールバック機能が重要な役割を果たす
- 綿密なテスト手順と段階的なアップグレードプロセスを採用することで、早期に潜在的な問題を発見、対処でき、新たな障害につながるリスクを大幅に低減できる
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 「MySQL 9.0」公開 JavaScriptストアドプログラムやVECTOR型をサポート
オープンソースのリレーショナルデータベース管理システム「MySQL」の最新版「MySQL 9.0」がリリースされた。 - Oracle、「Java 23」を提供開始 機能強化と変更点をおさらい
Oracleはプログラミング言語「Java」の最新版「Java 23」の一般提供を開始した。 - 「Wasmer Edge」、PHPアプリケーションにMySQLおよびPostgreSQL拡張を統合
Wasmerは、Wasmer Edgeのアップデートを実施した。アップデートにより、外部データベースを使用してPHPアプリケーションの状態を保持できるようになった。