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
Aurora MySQL 一段飛ばしのバージョンアップとその他もろもろの話
Search
hmatsu47
PRO
November 21, 2022
Technology
1
1.5k
Aurora MySQL 一段飛ばしのバージョンアップとその他もろもろの話
吉祥寺.pm31【オンライン】 2022/11/22
hmatsu47
PRO
November 21, 2022
Tweet
Share
More Decks by hmatsu47
See All by hmatsu47
Claude 3.5 で Haiku
hmatsu47
PRO
0
8
HeatWave on AWS の PrivateLink インバウンドレプリケーションで Aurora フェイルオーバーに追従する
hmatsu47
PRO
0
8
大吉祥寺.pm の LT で ChatGPT の力を借りて Next.js App Router ベースの投句箱を作って、 Lambda Web Adapter を使って公開した話
hmatsu47
PRO
0
8
ある日突然 DB の性能が 1/2(サイズのインスタンス相当)になった話
hmatsu47
PRO
0
30
pgvectorscale と pgai の話(ざっくり)
hmatsu47
PRO
0
49
pgvector 0.7.0 の新機能と、これから来る(かもしれない)pgvectorscale
hmatsu47
PRO
0
35
大人の社会科見学 ~ NTT 技術史料館に行ってみよう!
hmatsu47
PRO
0
420
pgvector 0.6.0 以降の進化についてざっくり取り上げてみる
hmatsu47
PRO
0
64
Cloudflare Workes からMySQL 系 DB への接続事情(2024/4 現在)
hmatsu47
PRO
0
130
Other Decks in Technology
See All in Technology
信頼性に挑む中で拡張できる・得られる1人のスキルセットとは?
ken5scal
2
530
VideoMamba: State Space Model for Efficient Video Understanding
chou500
0
190
Incident Response Practices: Waroom's Features and Future Challenges
rrreeeyyy
0
160
Amazon Personalizeのレコメンドシステム構築、実際何するの?〜大体10分で具体的なイメージをつかむ〜
kniino
1
100
TypeScriptの次なる大進化なるか!? 条件型を返り値とする関数の型推論
uhyo
2
1.7k
これまでの計測・開発・デプロイ方法全部見せます! / Findy ISUCON 2024-11-14
tohutohu
3
370
第1回 国土交通省 データコンペ参加者向け勉強会③- Snowflake x estie編 -
estie
0
130
OCI 運用監視サービス 概要
oracle4engineer
PRO
0
4.8k
ドメインの本質を掴む / Get the essence of the domain
sinsoku
2
150
100 名超が参加した日経グループ横断の競技型 AWS 学習イベント「Nikkei Group AWS GameDay」の紹介/mediajaws202411
nikkei_engineer_recruiting
1
170
オープンソースAIとは何か? --「オープンソースAIの定義 v1.0」詳細解説
shujisado
9
970
ノーコードデータ分析ツールで体験する時系列データ分析超入門
negi111111
0
410
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
47
2.1k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
44
2.2k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Docker and Python
trallard
40
3.1k
Documentation Writing (for coders)
carmenintech
65
4.4k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
0
96
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
The Pragmatic Product Professional
lauravandoore
31
6.3k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
The Art of Programming - Codeland 2020
erikaheidi
52
13k
Transcript
Aurora MySQL 一段飛ばしのバージョンアップと その他もろもろの話 吉祥寺.pm31【オンライン】 2022/11/22 まつひさ(hmatsu47)
自己紹介 松久裕保(@hmatsu47) • https://qiita.com/hmatsu47 名古屋で Web インフラのお守り係をしています 今日のレシピ(?) ◦ Zenn
の本: https://zenn.dev/hmatsu47/books/aurora-mysql3-plan-book https://zenn.dev/hmatsu47/books/aurora-mysql-do-book 2
レシピ? 3
レシピ? 4
今日のレシピ(嘘) 5
[1] 今年やったこと:Aurora MySQL v1 → v3 移行 • 10/15 に完了
◦ 正確には、移行対象のシステムがまだ一つ残 • コード修正担当の開発チームと、インフラ移行担当の (われわれ)SRE チームの共同作業 6
バージョンアップの原則 • 一つずつ順番にバージョンを上げていくべき ◦ 他社事例も大体そう https://tech.andpad.co.jp/entry/2022/06/02/100000 (ANDPAD) https://tech.readyfor.jp/entry/2022/07/13/181825 (READYFOR) ◦
例外 https://dev.classmethod.jp/articles/upgrade-aurora-mysql-5-6-to-8-0-simple-stupid/ (クラスメソッド) ※小規模社内システム・長時間停止可・アプリケーション動作確認済み 7
なのに、なぜ v2 を飛ばしたのか? • DB のマイグレーションだけに時間を割く余裕がなかった ◦ レガシーなアプリケーションゆえ、フレームワークや DB 以外の
環境のマイグレーションも必要(いっぱい) ◦ もちろん、提供するサービスの向上も大事 • そして、われわれには強い味方が(誇張表現) ◦ 2021 年 1 月の吉祥寺.pm25 でもちょっとだけ触れたやつ 8
ちょっと懐かしのアレ • 2021 年春に更新終了したが MySQL 8.0.24 対応版まで出していた ◦ Aurora MySQL
v3 は MySQL 8.0.23 ベースからのスタートなのでセーフ 9
実際にはそれなりに追加調査した(約 1 ヶ月) • そのあたりは前掲の「今日のレシピ(嘘)」を参照 ◦ 主に下のほう 10
続いてコードの先行調査&修正&動作確認 • コードの先行調査は 5 日ほどで完了 ◦ それなりに出てきたし、さらに範囲を広げると無限に… ▪ 割り切れば大丈夫(なはず) •
コードの修正はちょっと手こずる ◦ 一括置換ができない・lint も中途半端(つらい) • 案の定 SRE チーム内の動作確認では修正ミスを多数発見 ◦ 頑張って直した 11
そして、開発チームにコード修正タスクを渡す • 修正箇所が無限に湧いてきそうで大変だった模様 ◦ マネージャー指示は「対象を絞れ」だったが ▪ うまく伝わらなかった?(スキルの問題も) • 結果としては、ほぼ先行調査&修正→差分提示した範囲 に収まった
◦ ただし「他に対象がないか?」「正しく抽出できているか?」を 後追い確認するのが大変だった様子(要仕組み化) 12
一方、インフラのお守りをしている SRE チームは • データベース自体の移行準備をしていた ◦ 手順書とか移行作業で使う差分確認ツールとか • 大筋では以前から移行作業でやってきたことと同じ ◦
ただし一点大きな違いが 13
一方、インフラのお守りをしている SRE チームは • 手慣れた「binlog レプリケーション」はサポート外 ◦ バージョン飛ばし(v1 → v3)はサポート外
◦ 3 バージョン間多段レプリケーションもサポート外 14
当初の予定:DMS(CDC)でレプリケーション 15 • これならサポート対象
当初の予定:DMS(CDC)でレプリケーション 16 • これならサポート対象 • でも回避不能な問題で NG ◦ 特定条件で異常値が発生 •
諦めた
• 自己責任でサポート外構成 • できるだけ短期間で ◦ 数日間だけなら止まらない はず ◦ 実際に止まらなかった 実際の移行では:多段
binlog レプリケーション 17
移行当日 • 事件が 3 つ ◦ 直前の夜間バッチが終わらない事件😱 ◦ 主キーのないテーブルが突然現れた事件😱 ◦
サービス再開直前にサービス再開してた事件😱 18
移行当日 • 事件が 3 つ ◦ 直前の夜間バッチが終わらない事件😱 ◦ 主キーのないテーブルが突然現れた事件😱 ◦
サービス再開直前にサービス再開してた事件😱 • 切り戻しが必要になるような致命的な事件は発生せず ◦ ↑の 3 つもバージョン飛ばしとは無関係なものばかり 19
[2] 書いたコード:いくつか • アプリケーション(プロダクト)のフロントエンド ◦ ページ送り操作のたびに DB に重いクエリを投げていた画面を React で部分的に
SPA 化 20
[2] 書いたコード:いくつか • アプリケーション(プロダクト)のフロントエンド ◦ ページ送り操作のたびに DB に重いクエリを投げていた画面を React で部分的に
SPA 化 ◦ バックエンドの開発が間に合わないというオチで来年に持ち越し ▪ フロントエンドは 6 月中にはほぼ出来上がっていたけれど🤔 21
[2] 書いたコード:いくつか • アプリケーションリリース作業の地味な改善 ◦ CLI 操作が苦手な開発担当者のために SolidJS & Go
で簡単な GUI を用意 22
改善したところ 23 • 複数のテスト環境・ステージング環 境に、別環境のパイプラインで作っ たコンテナイメージをデプロイする ことがある • 本番環境には、必ずいずれかの環境 で動作確認したコンテナイメージを
デプロイする • デプロイには KAYAC fujiwara さん 作の ecspresso をありがたく使わせ ていただいている • ただ、使うメンバーの一部が CLI の 操作に不慣れ
コンテナイメージ URI の指定で • コピペミスが怖いとか、もろもろ意見があったので 24
こんな感じ • フロントエンドは SolidJS + SUID / TypeScript ◦ SUID
: SolidJS 版の MUI ◦ https://github.com/hmatsu47/select-repository-frontend-app • バックエンドは oapi-codegen で Gin の API を生成 ◦ Stoplight Studio で OpenAPI 3.0 の .yaml を生成 ◦ Go の oapi-codegen でコードの枠組みを自動生成 ◦ https://github.com/hmatsu47/select-repository-api 25
ポイント • 変な拘りは持たない ◦ ✖エンジニアが使うツールは CLI じゃなきゃダメ ▪ 本業のプロダクトコード書きに集中してもらったほうがプラス •
過度に依存されることは避ける ◦ 「このツールがないと仕事ができない」→業務がツールと密結合 ▪ メンテナンス地獄 • 要らなくなったら捨てる 26
[3] 来年に向けて : ただいま格闘中 • メールサーバー廃止✉ ◦ お守りをしたくないので API で送信&バウンス管理へ
27
まとめ:今年の振り返りと、来年に向けて • Aurora MySQL v1 → v3 移行が(ほぼ)完了した ◦ バージョンアップ
1 回分の時間と労力を節約 • DB 移行の合間にフロントエンドのコードを書いた ◦ バックエンド待ち(来年に持ち越し) • 地味な改善のためにコードを書いた ◦ お手軽コードで作業支援 • メールサーバー廃止に向けて格闘中 28