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.4k
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
Cursorハンズオン実践!
eltociear
2
1.2k
O Que É e Como Funciona o PHP-FPM?
marcelgsantos
0
200
SwiftDataを使って10万件のデータを読み書きする
akidon0000
0
240
スマホから Youtube Shortsを見られないようにする
lemolatoon
27
34k
オープンソースソフトウェアへの解像度🔬
utam0k
17
3.1k
Google Opalで使える37のライブラリ
mickey_kubo
3
150
Go言語はstack overflowの夢を見るか?
logica0419
0
610
GC25 Recap: The Code You Reviewed is Not the Code You Built / #newt_gophercon_tour
mazrean
0
110
モテるデスク環境
mozumasu
3
1.3k
ALL CODE BASE ARE BELONG TO STUDY
uzulla
28
6.7k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
640
「ちょっと古いから」って避けてた技術書、今だからこそ読もう
mottyzzz
12
7.2k
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Docker and Python
trallard
46
3.6k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.7k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
Site-Speed That Sticks
csswizardry
13
930
Rails Girls Zürich Keynote
gr2m
95
14k
A designer walks into a library…
pauljervisheath
209
24k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
130k
4 Signs Your Business is Dying
shpigford
185
22k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1k
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 アップグレードライフを!