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