9/11に開催された、【Chatwork × みてね勉強会】EKS&Aurora最新ノウハウでお話させていただいた、みてねSREの伊東の登壇資料です。
Aurora MySQL version 3でのTempTable溢れの振り返り【Chatwork × みてね勉強会】EKS&Aurora最新ノウハウ
View Slide
MIXI, Inc.自己紹介 株式会社MIXI Vantageスタジオ みてねプロダクト開発部 基盤開発グループ SREチーム 伊東 宏起 https://hekki.info
MIXI, Inc.家族アルバム みてねの紹介写真プリントフォトブックスマホで撮影した子どもの写真や動画を家族と共有し、コミュニケーションして楽しむ家族アルバムサービスです。
MIXI, Inc.家族アルバム みてねの紹介利用者数1,800万人を突破(2023年5月時点)※ iOS・Android™ アプリ登録者数、ブラウザ版登録者数の合計7言語・175の国と地域でサービスを提供
MIXI, Inc.本日お話する内容 - 障害発生時のタイムライン - 障害の原因を分析 - 再発防止策 - まとめ
MIXI, Inc.障害発生時のタイムライン - ある日のピークタイム、APIサーバーの全面に配置されているALBのHTTPCode_Target_5XX_Countが急激に増加しアラートが発報 - アプリケーションログを確認したところ The table is full というエラーが頻発していることが判明 - Aurora MySQLクラスターのライターインスタンス・リーダーインスタンスそれぞれクエリを投げてみると、リーダーインスタンスのみで同様のエラーが出ていることに気づく - そこで新しいリーダーインスタンスを追加してみたところエラーが出ない - インスタンス固有の問題と勘違いし、既存のリーダーインスタンスを削除したところ、新しいリーダーインスタンスでも同様のエラーが発生 - ピークタイムの終わりに伴って負荷が下がった結果、自然とエラーが解消
MIXI, Inc.- TempTableストレージエンジンとは? - MySQL8.0で登場した、テンポラリテーブルのためのストレージエンジン - 基本的にインメモリで動作しつつ、データが大きすぎる場合にディスク領域も確保する - TempTableストレージエンジンがテンポラリテーブルに割り当てることができるメモリ・ディスク領域の上限はそれぞれtemptable_max_ram, temptable_max_mmap で定義されている - どちらもデフォルト値は1GB 障害の原因を分析 TempTableストレージエンジンが確保 したメモリ・ディスク領域のサイズが上限値を超えてしまった
MIXI, Inc.- Aurora MySQL 3系のリードレプリカの場合、Aurora DB クラスター独自のストレージアーキテクチャによりテンポラリテーブルの挙動が異なる - aurora_tmptable_enable_per_table_limit はデフォルトで0 - temptable_max_ram を超えるまでメモリ領域を確保 - メモリ領域を使い切ったら temptable_max_mmap 超えるまでディスク領域を確保 - ディスク領域も使い切ったら The table is full となる 障害の原因を分析(つづき) TempTableストレージエンジンが確保したメモリ・ディスク領域のサイズが上限値を超えてしまった 引用元: https://aws.amazon.com/jp/blogs/database/use-the-temptable-storage-engine-on-amazon-rds-for-mysql-and-amazon-aurora-mysql/
MIXI, Inc.- TempTableストレージエンジンがメモリ・ディスクをどのぐらい確保しているかを可視化 - prometheus-mysql-exporterを導入してメトリクスを収集・Grafanaで可視化 - https://github.com/prometheus/mysqld_exporter - 実績値を元に temptable_max_ram, temptable_max_mmap を十分に引き上げ - 初手の応急処置ではリーダーインスタンスの台数を増やすことでエラーを抑止したが、リーダーインスタンスを安全に元の台数に戻すこともできた 再発防止策
MIXI, Inc.- Aurora MySQL 3へのアップグレードに伴って私達の環境で発生した障害を振り返りました - アップグレード時に下記のようにケアしていれば、障害を起こすことはなかったはずなので反省 - temptable_max_ram, temptable_max_mmap を予め引き上げておく - アップグレード後にテンポラリテーブルの使用状況を確認 - temptable_max_ram, temptable_max_mmap を適正値まで調整 - 同様の問題に遭遇したエントリーが散見されるので、Aurora MySQL 3系のお使いの場合は参考にしていただけると幸いです まとめ
MIXI, Inc.