Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MySQLアンカンファレンス#008_大規模Aurora MySQLクラスタの 無停止アップ...

Yuta Kikai
April 09, 2025
120

MySQLアンカンファレンス#008_大規模Aurora MySQLクラスタの 無停止アップグレードを支えた Aurora Blue_Green Deployment機能

Amebaブログでサービス無停止のAurora MySQLアップグレードをおこなった際の方法と、遭遇したトラブルについて簡単に紹介しています。

Yuta Kikai

April 09, 2025
Tweet

Transcript

  1. アメーバブログはAmazon Aurora MySQLを使用 ❏ マイクロサービス毎にAurora MySQL v2(MySQL5.7互換)クラスタが存在 ❏ 開発環境、ステージング環境、本番環境などが存在 ❏

    マイクロサービス数 × 環境数 = 百数十クラスタが稼働 ❏ 1年以内にすべてのクラスタのアップグレードを完了する必要があった
  2. 2024年8月 AWS公式ブログにB/G切り戻しの記事が投稿 Implement a rollback strategy after an Amazon Aurora

    MySQL blue/green deployment switchover Blue/Green Deployment機能の機能追加で、B/G切替時の旧Greenクラスタの binlogファイルとpositionをイベント欄に表示してくれるようになった (この時Aurora MySQLアップグレードの期限日付まで残り3ヶ月...)
  3. B/G間のレプリケーションステータスちゃんと確認しよう事件 • B/Gのステータス「利用完了」はあくまでも作成完了という意味だけ ◦ レプリケーションのステータスとかは見ていない • モニタリングの「AuroraBinlogReplicaLag」の0はレプリ停止状態でも0 ◦ Seconds_Behind_MasterはNULLだけど、0です •

    切り替え前にGreenのライターインスタンスのイベント欄は確認しておく ◦ 当時何のエラーで止まっていたか思い出せないですが、多分文字コードとか照合順序の設定い じったりしていたので、そこで止まっていた...?
  4. SELECT COUNT スローダウン問題 • MySQL 8.0で有名なあの問題 ◦ Aurora MySQL v3のLTSはVersion3.04(MySQL8.0.28互換)

    ◦ MySQL8.0.37以降でこのSELECT COUNT問題は一部解決している ▪ Changes in MySQL 8.0.37 (2024-04-30, General Availability)
  5. バグ詳細 • Bug #100597 INDEX hint does not affect count(*)

    execution ◦ ヒント句をつけてもセカンダリインデックスが使用されずにクラスタ化インデックスが利用されてしまう ◦ EXPLAINの結果ではセカンダリインデックスが使われるように見えるが実際は使われておらず、 WHERE句を追加したときのみ使用されたという報告 • Bug #112767 SELECT COUNT(*) degraded performance on 8.0 compared to 5.7 ◦ 並列読み取りスレッドのページを事前に読み込む機能が、クラスタ化インデックスにおいて必要以上に ページを読み込んでしまい、過剰な読み取りI/Oを引き起こしてSELECT COUNTのパフォーマンスが 悪化しているという報告
  6. まとめ ❏ アメーバブログはAurora B/G Deploymentをつかいノーメンテでアップグレード ❏ Aurora B/G Deploymentは素晴らしい機能だが注意点もある ❏

    MySQL 5.7から8.0へのパフォーマンス問題は大変だった ❏ 早く次のLTS対応のAurora MySQLが出てくれたらうれしい