検索
ニュース

Uber、2100超のMySQL 5.7クラスタをダウンタイムなしで8.0に移行したと明かす 理由やアップグレード戦略、移行の教訓とは1万6000以上のノードを3つの地域、19の運用ゾーンに分散配置

Uberは2024年8月に公開したブログ記事で、2100を超えるMySQL 5.7クラスタをサービスのダウンタイムなしでMySQL 8.0に移行していたことを明らかにした。

Share
Tweet
LINE
Hatena

 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への移行を完全に自動化するため、専用のワークフローシステムを新たに開発したという。このワークフローシステムによるアップグレードプロセスは以下の通りだ。

  1. ノードレプリケーション:クラスタ内の各MySQL 5.7ノードに対応するMySQL 8.0レプリカノードを同じリージョン/ゾーンに追加し、MySQL 5.7ノードとMySQL 8.0ノード間の一貫性を維持する
  2. 耐久性テスト:約1週間かけて、システムのパフォーマンスを観察し、MySQL 8.0ノードによって引き起こされるパフォーマンス低下やSLA違反を検出する
  3. トラフィックの転送:耐久性テストの終了後、MySQL 5.7のレプリカノードを無効化し、トラフィックの転送をできなくさせる
  4. MySQL 8.0ノードをクラスタのプライマリーステータスに昇格させる
  5. 古いノードを削除:全てのMySQL 5.7ノードが削除され、MySQL 8.0へのアップグレードが完了する
サイドバイサイドアップグレードの流れ(提供:Uber)
サイドバイサイドアップグレードの流れ(提供:Uber)

 「何千ものクラスタを手作業でアップグレードするのは容易ではない。複数のステップからなるアップグレードプロセスと自動ロールバック機構を組み込んだ堅牢(けんろう)なワークフローシステムにより、人的エラーのリスクを軽減し、シームレスなアップグレードを実現可能になった」と、Uberは述べている。

MySQL 8.0移行の効果

 Uberによると、MySQL 8.0への移行により、以下のようなパフォーマンスの改善につながったという。

  • 1024スレッドで100万のデータを挿入する場合、最も遅い1%の処理のレイテンシ(p99レイテンシ)が29%改善した
  • 1024スレッドで100万のデータを読み取る場合、p99レイテンシが33%改善した
  • 1024スレッドで100万のデータを更新する場合、p99レイテンシが47%改善した
  • データベースのロックタイムが約94%短縮した
  • 一部のクエリの実行時間が約78%短縮した
100万のデータを挿入する場合のパフォーマンス比較(青色がMySQL 5.7、赤色がMySQL 8.0を示している)(提供:Uber)
100万のデータを挿入する場合のパフォーマンス比較(青色がMySQL 5.7、赤色がMySQL 8.0を示している)(提供:Uber)
ロックタイムの短縮(提供:Uber)
ロックタイムの短縮(提供:Uber)

アップグレードを通じて得られた教訓

 Uberは、MySQL 8.0へのアップグレードを通じて得られた教訓を、次のように共有している。

  • 大規模なアップグレード時は、可観測性プラットフォーム、テスト体制、堅牢なロールバック機能が重要な役割を果たす
  • 綿密なテスト手順と段階的なアップグレードプロセスを採用することで、早期に潜在的な問題を発見、対処でき、新たな障害につながるリスクを大幅に低減できる

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る