Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Amazon Aurora の v1 が EOL になるので 10 クラスタアップグレードし...
Search
dekokun
June 08, 2022
Programming
0
2.3k
Amazon Aurora の v1 が EOL になるので 10 クラスタアップグレードして出てきたノウハウ
Hatena Engineer Seminar #20 AWS Renovation 編
https://hatena.connpass.com/event/249039/
の発表資料です
dekokun
June 08, 2022
Tweet
Share
More Decks by dekokun
See All by dekokun
フルCDNアーキテクチャ実験 / Minami Aoyama Night #1
dekokun
5
18k
東京にいながら仕事のほとんどを京都のエンジニアと一緒にしている私のリモートワークの話 / Hatena Engineer Seminar #6
dekokun
3
11k
はてなでの サービス信頼性向上のための 取り組み事例
dekokun
15
5.8k
Other Decks in Programming
See All in Programming
Orleans + Sekiban + SignalR でリアルタイムWeb作ってみた
tomohisa
0
250
Browser and UI #2 HTML/ARIA
ken7253
2
180
Flutterでllama.cppをつかってローカルLLMを試してみた
sakuraidayo
0
150
flutter_kaigi_mini_4.pdf
nobu74658
0
150
設計の本質:コード、システム、そして組織へ / The Essence of Design: To Code, Systems, and Organizations
nrslib
10
3.8k
読書シェア会 vol.4 『ダイナミックリチーミング 第2版』
kotaro666
0
110
生成AI時代のフルスタック開発
kenn
7
570
エンジニアが挑む、限界までの越境
nealle
1
330
知識0からカンファレンスやってみたらこうなった!
syossan27
5
270
生成AIで知るお願いの仕方の難しさ
ohmori_yusuke
1
120
REALITY コマンド作成チュートリアル
nishiuriraku
0
120
The New Developer Workflow: How AI Transforms Ideas into Code
danielsogl
0
140
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.7k
Practical Orchestrator
shlominoach
187
11k
Designing Experiences People Love
moore
142
24k
The Cult of Friendly URLs
andyhume
78
6.4k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
710
Designing for humans not robots
tammielis
253
25k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.6k
Into the Great Unknown - MozCon
thekraken
38
1.8k
BBQ
matthewcrist
88
9.6k
Building an army of robots
kneath
305
45k
For a Future-Friendly Web
brad_frost
177
9.7k
Transcript
Amazon Aurora の v1 が EOL になるので 10クラスタアップグレードして 出てきたノウハウ id:dekokun
/ @dekokun 2022/06/07 Hatena Engineer Seminar #20 「AWS Renovation 編」 1
dekokun • SRE • 1児の父 2
話すこと • 背景 • アップグレード の方法 • 罠たち(本題) 3
4 背景
Aurora MySQL のv1 EOL • 2023年2月28日にサポートを終了 ◦ 2022年9月27日以降作成できなくなる ◦ 2022年2月28日以降自動的にアップグレードされる
5
私の所属するチーム • 名称:サービスプラットフォームチーム • はてなの基盤となる多数のサービスを扱う チーム 6
チームの持つ多数のサービス • はてなスターや人力検索はてな等、ユーザに 直接触ってもらうサービス • はてなのシステム内部から使われるマイクロ サービス的なもの • 完全に社内向けの小規模Webサービス 7
多数のサービス・多数のDB • 多数のAurora ◦ 計24クラスタ ◦ v1(アップグレード対象):今年頭時点で計20クラスタ 8
多数のサービス・多数のDB • 現在、20クラスタ中12クラスタのアップグ レードが完了 • 今日は、これまでのアップグレードでハマっ た事象をメインにノウハウを紹介します 9
10 アップグレードの方法
インプレース vs Blue/Green • インプレース ◦ 既存のクラスタをAWSがアップグレードしてくれる • Blue/Green ◦
バージョンの新しいクラスタを作って古いクラスタか らレプリケーションをしつつアプリケーションの参照 するクラスタを切り替える 11
• ボタンポチでアップグレードが完了するので 手順がシンプル • データの量などでダウンタイムが決まる ◦ ダウンタイムはだいたい10分〜(すごく時間がかかる ことあり。後述 12 インプレース
• 新クラスタを旧クラスタからcloneして生成 • 旧クラスタから変更をレプリケーションしつ つ新クラスタをアップグレード • アプリケーションのDBの接続先を新クラスタ に向ける 13 Blue/Green
https://aws.amazon.com/jp/blogs/database/performing-major-version-upgrades-for-a mazon-aurora-mysql-with-minimum-downtime/ より 14 Blue/Green
• ダウンタイムはアプリケーションのデプロイ にかかる時間 + α ◦ データ量その他にあまり依存しない 15 Blue/Green
インプレース vs Blue/Green • 社内向け等で求める可用性が低いサービスの DBはコンソールからポチポチするだけのイン プレース方式を採用しようと思ったが ◦ 後述の罠により面倒になりすべてブルーグリーンに 16
インプレース vs Blue/Green • ブルーグリーンの面倒なところはコマンド一 発に自動化した ◦ DBをcloneしてアップグレードしてeventからポジ ションを取得しレプリケーションをはるところ 17
18 罠たち(本題)
たくさんの罠たち • インプレース方式では再起動が必須 • インプレースなアップグレードに数時間 • レプリケーションのポジションが不明 • show innodb
statusの出力が欠けてる • binlog出力のためのF/O ◦ F/O時にローカルストレージ枯渇の危険 19
20 インプレース方式では 再起動が必須
インプレース方式では再起動が必須 • インプレースアップグレード完了後はパラ メータグループが適用されていない状態に ◦ 手動で再起動が必要 21
インプレース方式では再起動が必須 • “アップグレードプロセス中にカスタムパラ メータグループを指定した場合は、アップグ レード終了後にクラスターを手動で再起動す る必要があります。” 22 https://docs.aws.amazon.com/ja_ jp/AmazonRDS/latest/AuroraUserGuide/Au roraMySQL.Updates.MajorVersionUpgrade.html
より
インプレース方式では再起動が必須 • このDBは“可用性が低くてもいいから”と何も 考えずにポチッとupgradeしてから、手動で 再起動するまでの書き込みでデータがおかし くなるかも? 23
インプレース方式では再起動が必須 ◦ アップグレード前後でアプリケーションを 止めてアップグレード後に再起動すれば良 い、が 24
インプレース方式では再起動が必須 ◦ ボタンポチで済む(はずだった)のがインプ レースのいいところだったのに… ◦ 後述の”インプレースなアップグレードに 数時間”も含めて面倒になってインプレー ス方式はやめた 25
26 インプレースな アップグレードに数時間
インプレースなアップグレードに数時間 27 ◦ Blue/GreenでDBをcloneした直後にイン プレースなアップグレードを行うと2回に1 回くらい、数時間かかる
インプレースなアップグレードに数時間 28 https://aws.amazon.com/jp/blogs/database/performing-major-version-upgrades-for-a mazon-aurora-mysql-with-minimum-downtime/ より
インプレースなアップグレードに数時間 29 ◦ snapshotに時間がかかっている様子 ◦ アップグレードの時間は保証されていない
インプレースなアップグレードに数時間 30 ◦ Blue/Green方式中にアップグレードに時 間がかかってもユーザ影響はないですし ゆったり待ちましょう
31 レプリケーションの ポジションが不明
レプリケーションのポジションが不明 32 ◦ https://aws.amazon.com/jp/blogs/database/performing-major-version-upgrades-for-a mazon-aurora-mysql-with-minimum-downtime/ より
レプリケーションのポジションが不明 33 ◦ cloneするとDBのeventとしてレプリケー ションのポジションが出力される ◦ そのポジションに対して以下打つ ▪ ”call mysql.rds_set_external_master”
レプリケーションのポジションが不明 34 ◦ たまにこのイベントが出力されない… ▪ 当然レプリケーションが設定できない ◦ 諦めてcloneし直しましょう
レプリケーションのポジションが不明 35 ◦ こういうことがあるので、是非一通りの流 れを自動化しておきましょう
36 binlog出力のためのF/O
binlog出力のためのF/O 37 https://aws.amazon.com/jp/blogs/database/performing-major-version-upgrades-for-a mazon-aurora-mysql-with-minimum-downtime/ より
binlog出力のためのF/O 38 ◦ レプリケーションを行うということは binlogの出力が必要 ◦ そのためにはDBの再起動が必要
binlog出力のためのF/O 39 ◦ 直前にやろうとして慌てないように ◦ 久しぶりのfailoverの際に注意すべきこと がある
F/O時にローカルストレージ枯渇の危険 40 ◦ version 2.10.2のchangelog ▪ “Fixed an issue which
can cause excessive internal logging when attempting zero downtime patching and restart causing local storage to fill up.” https://aws.amazon.com/jp/blogs/database/performing-major-version-upgra des-for-amazon-aurora-mysql-with-minimum-downtime/ より
F/O時にローカルストレージ枯渇の危険 41 ◦ readerインスタンスにてローカルストレー ジが枯渇することがあるとのこと ◦ ローカルストレージが枯渇すると一時テー ブルを作るようなクエリが失敗する
F/O時にローカルストレージ枯渇の危険 42 ◦ ローカルストレージを監視しておこう ▪ CloudWatchのFreeLocalStorage ▪ Mackerelのrds.aurora.storage.free
43 show innodb statusの 出力が欠けてる
show innodb statusの出力が欠けてる 44 ◦ 構築したAurora V2クラスタにMackerelの mysql pluginを向けてメトリックを取得し ようとしたらpanicした
◦ 調査したところ、show innodb statusの 出力が一部想定外
show innodb statusの出力が欠けてる 45 ◦ 想定: “Pending normal aio reads:
0 [0, 0, 0, 0] , aio writes: 0 [0, 0, 0, 0] ,” ◦ 実際:”Pending normal aio reads:, aio writes: [0, 0, 0, 0] ,”
show innodb statusの出力が欠けてる 46 ◦ 想定: “Pending normal aio reads:
0 [0, 0, 0, 0] , aio writes: 0 [0, 0, 0, 0] ,” ◦ 実際:”Pending normal aio reads:, aio writes: [0, 0, 0, 0] ,”
47 なんか足りないっすね
show innodb statusの出力が欠けてる 48 ◦ v2の最近のバージョンで起きてるっぽい ◦ AWSのサポートに伝えた ◦ aio
readsが空でもpluginがpanicしないよ うにmackerelチームに修正してもらった ▪ 当然ながら値は取れてない ▪ AWSの修正を応援しています
49 もうこれ以上 罠は無いと信じたい! 残り8クラスタ やっていくぞ!
50 みなさまも 楽しい Aurora アップグレードライフを!