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.2k
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
17k
東京にいながら仕事のほとんどを京都のエンジニアと一緒にしている私のリモートワークの話 / Hatena Engineer Seminar #6
dekokun
3
11k
はてなでの サービス信頼性向上のための 取り組み事例
dekokun
15
5.7k
Other Decks in Programming
See All in Programming
タクシーアプリ『GO』のリアルタイムデータ分析基盤における機械学習サービスの活用
mot_techtalk
4
1.5k
CSC509 Lecture 12
javiergs
PRO
0
160
みんなでプロポーザルを書いてみた
yuriko1211
0
280
Compose 1.7のTextFieldはPOBox Plusで日本語変換できない
tomoya0x00
0
190
Contemporary Test Cases
maaretp
0
140
macOS でできる リアルタイム動画像処理
biacco42
9
2.4k
watsonx.ai Dojo #4 生成AIを使ったアプリ開発、応用編
oniak3ibm
PRO
1
140
광고 소재 심사 과정에 AI를 도입하여 광고 서비스 생산성 향상시키기
kakao
PRO
0
170
Less waste, more joy, and a lot more green: How Quarkus makes Java better
hollycummins
0
100
OnlineTestConf: Test Automation Friend or Foe
maaretp
0
120
Why Jakarta EE Matters to Spring - and Vice Versa
ivargrimstad
0
1.1k
聞き手から登壇者へ: RubyKaigi2024 LTでの初挑戦が 教えてくれた、可能性の星
mikik0
1
130
Featured
See All Featured
The Invisible Side of Design
smashingmag
298
50k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
Designing Experiences People Love
moore
138
23k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
329
21k
How STYLIGHT went responsive
nonsquared
95
5.2k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
Keith and Marios Guide to Fast Websites
keithpitt
409
22k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
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 アップグレードライフを!