狠狠撸

狠狠撸Share a Scribd company logo
#jawsdays?
Aurora MySQL の?
お手製?
メジャーバージョンアップ?
中原 隆文 | Yappli, Inc.?
#jawsdays?
自己紹介?
● Yappli, Inc. SREチーム所属?
● しがないインフラ|SREエンジニア?
● 福岡出身?
● 職歴?
?
?
● ゲームミュージック好き!?
● 好きなサービスは Fargate ?
?
中原 隆文 / @ottan?
#jawsdays?
会社紹介?
Aurora MySQL HandMade Major VersionUp
#jawsdays?
今回お話すること?
1. なんでそんなことやっちゃったのか??
2. Aurora MySQL のメジャーバージョンアップ?
3. バージョンアップ方法?
4. オンライン切替方法?
5. 実際の手順?
6. はまりどころ?
7. まとめ?
?
?
?
#jawsdays?
なんでそんなことやっちゃったのか?(1?
● int 型で近い将来あふれそうなカラムが…?
○ online alter するは厳しい…?
(数十億行、数百GB)?
○ 長時間のメンテは不可なのでDB切替かな??
○ どうせならメジャーver.上げるか!?
?
?
#jawsdays?
なんでそんなことやっちゃったのか?(2?
MySQL 5.7 ベースになってうれしいこと!?
● サブクエリーの高速化?
○ Writerを再起動に追い込むクソ味深クエリー対策!?
● JSON型で幸せに??
○ index まわりなどで制約が…?
○ 切替時の導入は見送り?
● パフォーマンスインサイト使いたい!?
○ 5.6 系でも使えるけどバージョン古すぎて…?
?
?
#jawsdays?
Aurora MySQL のメジャーバージョンアップ?
● 公式からver.1系からver.2系への?
インプレイス?アップグレードは提供されてない…?
(着手した 2019/11 の時点では)?
● もちろんオンライン?アップグレードも…?
ないなら自前でやるしか!
#jawsdays?
メジャーバージョンアップ方法(1?
● AWS DMS でアップグレード?
○ 空の ver. 2系を用意すると?
DMS がよろしくデータを移してくれる!?
○ データ単体の移行はちょっ速!?
○ 中継させて柔軟なデータの変換ができる!?
○ index や auto_incriment は持っていってくれない…?
Aurora MySQL 1.x Aurora MySQL 2.xAWS Database Migration
Service
Replication Replication
#jawsdays?
メジャーバージョンアップ方法(2?
● バージョンまたぎのレストアでアップグレード?
○ 特定のver.1系のスナップショットから?
ver.2系をレストアできる!?
(リリースノートにひっそり書いてある)?
○ Aurora では slave_type_conversions による?
型変換は非サポート…?
?
?
Aurora MySQL 1.x Aurora MySQL 2.x
Replication
#jawsdays?
オンライン切替方法(1?
● 参照先 endpoint の変更方法?
○ コード上で変更?
デプロイやタイマーによる切替?
?
○ CNAMEで変更?
コード上では endpoint の CNAME を参照させ、?
CNAMEのレコード変更することで切替?
?
#jawsdays?
オンライン切替方法(2?
● 切替の瞬間の新旧重複アクセスから整合性を担保?
○ 新クラスターの auto_incriment を上げて切替?
?
Old Cluster New Cluster
Replication
AUTO_INCREMENT=1000
id=1000
id=1001
…
AUTO_INCREMENT=1100
id=1100
id=1101
…
Application
Write
#jawsdays?
オンライン切替方法(3?
● 切替の瞬間の新旧重複アクセスから整合性を担保?
○ 旧クラスターへの書き込みを禁止して切替?
?
Old Cluster New Cluster
Replication
Application
Write
REVOKE GRANT
#jawsdays?
今回のバージョンアップ?切替方法?
● バージョンまたぎのレストアでアップグレード?
?DMSだと index, auto_increment の再生成が大変…?
?
● CNAME で参照先 endpoint の変更?
?タイマー切替や短時間でのデプロイの仕組みない…?
?
● 旧クラスターへの書き込みを禁止して整合性を担保?
?primary key に auto_increment を使ってないテーブルが…?
#jawsdays?
はまりどころ(1?
● Aurora では slave_type_conversions は非サポート?
○ binlog_format を statement 形式にしてなんとか…?
?
● レストアやバージョンアップには細かいバージョンの指定あり!?
○ aws rds describe-db-engine-versions の ValidUpgradeTarget?
○ 対象バージョンのリリースノート?
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Updates.2046.html?
?
● LTS はドキュメントで確認可能。?
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Updates.html#AuroraMySQL.U
pdates.LTS?
?
?
#jawsdays?
はまりどころ 2?
● レプリケーションのためには binlog を有効化が必要?
○ Aurora では binlog の副作用あるので期間を最小化?
■ 障害復旧時のリカバリに時間かかる?
■ パフォーマンスへの影響?
?
● ALTER かける前に対象テーブルの INDEX は DROP しといたほうが
速い?
(終わったら INDEX 再生成)?
#jawsdays?
今回やったバージョンアップ?切替手順?
1. 旧DBで statement 形式で binlog 有効化?
2. 旧DBでクラスタースナップショットとる (5.6.10a)?
3. 中間DBをスナップショットから作成 (1.19.5)?
4. 中間DBをマイナーバージョンアップ (1.20.0)?
5. 中間DBでクラスタースナップショットとる (1.20.0)?
6. 新DBをスナップショットから作成 (2.04.6)?
7. 新DBでALTERかける?
8. 新旧DB間でレプリケーションはる?
9. 旧DBへのアクセスを REVOKE で遮断?
10. CNAME 変更して参照先 endpoint 切替?
11. 新DBでのみ GRANT してアクセス再開?
12. 新旧DB間のレプリケーションを停止?
?
#jawsdays?
今回やったバージョンアップ?切替手順(1?
1. 旧DBで statement 形式で binlog 有効化?
?
Old Cluster (5.6.10a)
#jawsdays?
今回やったバージョンアップ?切替手順(2?
2. 旧DBでクラスタースナップショットとる (5.6.10a)?
Old Cluster (5.6.10a)
Cluster Snapshot
#jawsdays?
今回やったバージョンアップ?切替手順(3?
3. 中間DBをスナップショットから作成 (1.19.5)?
?
Old Cluster (5.6.10a)
Cluster Snapshot
Mid Cluster (1.19.5)
#jawsdays?
今回やったバージョンアップ?切替手順(4?
4. 中間DBをマイナーバージョンアップ (1.20.0)?
?
Old Cluster (5.6.10a) Mid Cluster (1.20.0)
#jawsdays?
今回やったバージョンアップ?切替手順(5?
5. 中間DBでクラスタースナップショットとる (1.20.0)?
?
Old Cluster (5.6.10a)
Cluster Snapshot
Mid Cluster (1.20.0)
#jawsdays?
今回やったバージョンアップ?切替手順(6?
6. 新DBをスナップショットから作成 (2.04.6)?
?
Old Cluster (5.6.10a)
Cluster Snapshot
New Cluster (2.04.6)
#jawsdays?
今回やったバージョンアップ?切替手順(7?
7. 新DBでALTERかける?
?
Old Cluster (5.6.10a) New Cluster (2.04.6)
#jawsdays?
今回やったバージョンアップ?切替手順(8?
8. 新旧DB間でレプリケーションはる?
?
Replication
Old Cluster (5.6.10a) New Cluster (2.04.6)
#jawsdays?
今回やったバージョンアップ?切替手順(9?
9. 旧DBへのアクセスを REVOKE で遮断?
?
Replication
Old Cluster (5.6.10a) New Cluster (2.04.6)
Application
Write
REVOKE
#jawsdays?
今回やったバージョンアップ?切替手順(10?
10. CNAME 変更して参照先 endpoint 切替?
?
Replication
Old Cluster (5.6.10a) New Cluster (2.04.6)
Application
Write
#jawsdays?
今回やったバージョンアップ?切替手順(11?
11. 新DBでのみ GRANT してアクセス再開?
?
Replication
Old Cluster (5.6.10a) New Cluster (2.04.6)
Application
Write
GRANT
#jawsdays?
今回やったバージョンアップ?切替手順(12?
12. 新旧DB間のレプリケーションを停止して旧DBを停止?
?
New Cluster (2.04.6)
#jawsdays?
まとめ?
● SaaS サービスは想定された使い方をしましょう!?
● ドキュメントをよく読み仕様の制限を理解して設計!?
● でも理想どおりにいかないのが現実の運用…?
● 獣道をいく勇気も必要かもしれません!?
● ご協力いただいたSAやCSの方ありがとうございました!?
#jawsdays?
仲間大募集中!?
https://yappli.co.jp/recruit/?
?
?
#jawsdays?

More Related Content

Aurora MySQL HandMade Major VersionUp