Slide 1

Slide 1 text

1 RDS B/Gデプロイで本番環境のDB をMySQL5.7から8.0にアップグ レードしたので知⾒を共有します こわくないRDS B/Gデプロイ 染⽮健⼈ on 2023.09.14 Pepabo Tech Conference #21 夏のSREまつり

Slide 2

Slide 2 text

2 こんにちは GMOペパボ 技術部プラットフォームグループ 2022年 新卒⼊社 染⽮ 健⼈ Someya Kento ● ペパボでいろんなサービスのプラットフォームを 壊したり直したりしています ● 社内ではpochy(そめやポチ)と呼ばせています ● 好きなアザラシはワモンアザラシです ● 各種サービスでのID : @kesompochy

Slide 3

Slide 3 text

3 MySQL5.7の EOLに 怯えているみなさん こんにちは

Slide 4

Slide 4 text

4 https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Concepts.VersionMgmt.html

Slide 5

Slide 5 text

5 https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Concepts.VersionMgmt.html

Slide 6

Slide 6 text

6 https://aws.amazon.com/jp/about-aws/whats-new/2023/09/amazon-aurora-rds-extended-support-mysql-postgresql-databases/ > Amazon Relational Database Service (RDS) は、MySQL 5.7、PostgreSQL 11、およびそれ以降のメジャーバージョンを 実行している Amazon Aurora および Amazon RDS データ ベースインスタンスの Amazon RDS 延長サポートを、コミュニ ティのサポート終了後も継続いたします。

Slide 7

Slide 7 text

7 https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/extended-support.html > With Amazon RDS Extended Support, you can continue running your database on a major engine version past the RDS end of standard support date for an additional cost.

Slide 8

Slide 8 text

8 https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/extended-support.html > With Amazon RDS Extended Support, you can continue running your database on a major engine version past the RDS end of standard support date for an additional cost.

Slide 9

Slide 9 text

お⾦かかるから 早くアップグレード しなきゃね 9

Slide 10

Slide 10 text

10 今⽇話すこと 1. MySQLのサポート終了について 2. 対象サービス「minne」のDBについて 3. よくあるDBアップグレード戦略 4. RDS B/Gデプロイの説明 5. RDS B/Gデプロイを試してみて分かったこと、分からなかったこと

Slide 11

Slide 11 text

11 今⽇話さないこと 1. MySQL5.7と8.0の差異 2. サービスダウンを伴うメンテナンスのオペレーション⼿法

Slide 12

Slide 12 text

minneについて 12

Slide 13

Slide 13 text

今回DBバージョンが上がったサービス 13 - ハンドメイドマーケットサービス - readもwriteも常時そこそこある - 新機能の開発が盛ん - スキーマ変更も頻繁にある - INSTANT DDL (MySQL 8.0.12 ~)が使えると嬉しい - DBはRDS for MySQL - Primary - Replica minneについて \オフラインイベントやるよ/

Slide 14

Slide 14 text

よくあるDBアップグレード戦略 14

Slide 15

Slide 15 text

よくあるDBアップグレード戦略 15 - ⽂字通り「その場で」DBエンジンをアップグレードする - pros - ⼿順が単純 - アップグレードに伴うリソースの追加使⽤はない - cons - ダウンタイムが⻑く発⽣する インプレースアップグレード

Slide 16

Slide 16 text

よくあるDBアップグレード戦略 16 - Replicaインスタンスを先にアップグレードしておき、そのReplicaインスタンスを Primaryに「昇格」する - pros - ダウンタイムが短めで済む - cons - ⼿順が複雑 - DBの接続情報が変更される Replicaのプロモーション

Slide 17

Slide 17 text

Amazon RDS B/Gデプロイについて 17

Slide 18

Slide 18 text

RDS B/Gデプロイ 18 - DBでBGデプロイができる - 本番環境と同期するステージング環境が作られる - ステージング環境でのreadの検証ができる - ダウンタイム少なく切り替えができる - 公式ドキュメントによると通常1分以内 - 切り替え時に接続先情報を変更する必要がない - GUIポチポチで済むので楽ちん - 2022年12⽉に提供が開始された機能 RDSのB/Gデプロイについて

Slide 19

Slide 19 text

19 https://docs.aws.amazon.com/ja_jp/AmazonR DS/latest/UserGuide/blue-green-deployments- overview.html

Slide 20

Slide 20 text

コンソールから実施するとどんな感じ になるのか⾒てみましょう 20

Slide 21

Slide 21 text

21 「ブルー/グリーンデプロイの作成 - 新規」が選べる

Slide 22

Slide 22 text

22 BGデプロイ識別子、Greenインスタンスのエンジンバージョン、パラメータグループを選ぶ

Slide 23

Slide 23 text

23 生えた

Slide 24

Slide 24 text

24 アップグレードが走る

Slide 25

Slide 25 text

25 両方「利用可能」になったがまだプロビジョニング中

Slide 26

Slide 26 text

26 Greenが「変更中」になった。アップグレード以外の変更だろうか。

Slide 27

Slide 27 text

27 BGデプロイ識別子の状態が「利用可能」になったら切り替えができる

Slide 28

Slide 28 text

28 切り替え直前の確認画面。 タイムアウトの時間を設定でき る。

Slide 29

Slide 29 text

29 切り替わった後の様子。両インスタンスは切り離された。

Slide 30

Slide 30 text

30 旧Blue環境のインスタンスには ”old”のsuffixがつく

Slide 31

Slide 31 text

31 旧Green環境のインスタンス。何事もなかったかのような佇まいである。

Slide 32

Slide 32 text

お⼿軽べん り!!!!!!! 32

Slide 33

Slide 33 text

実際にやってみて初めて気づいた挙動 の紹介 33

Slide 34

Slide 34 text

「切り替え可能」になら ないときがある 34

Slide 35

Slide 35 text

35

Slide 36

Slide 36 text

実際にやってみて初めて気づいた挙動の紹介 36 - BGデプロイ識別⼦のステータスが「無効な設定」となる - その状態での切り替えはできない - それぞれのDBに接続はできる - 同じスナップショットから作ったインスタンスで、この現象が起きる場合と起きない場 合があった - 同じスナップショットから作ったインスタンスでのインプレースでのアップグレードはできた - インスタンスサイズは原因ではなさそう - パラメータグループは原因ではなさそう - 原因不明...... 「切り替え可能」にならないときがある

Slide 37

Slide 37 text

MySQLの設定値に引き継 がれないものがある 37

Slide 38

Slide 38 text

実際にやってみて初めて気づいた挙動の紹介 38 - Replicaインスタンスのbinlog retention hoursを⼿動で変更していた MySQLの設定値に引き継がれないものがある mysql> call mysql.rds_set_configuration('binlog retention hours', 72); Query OK, 0 rows affected (0.00 sec) mysql> call mysql.rds_show_configuration; +------------------------+-------+-----------------------------------------------------------------------------------------------------------+ | name | value | description | +------------------------+-------+-----------------------------------------------------------------------------------------------------------+ | binlog retention hours | 72 | binlog retention hours specifies the duration in hours before binary logs are automatically deleted. | | source delay | 0 | source delay specifies replication delay in seconds between current instance and its master. | | target delay | 0 | target delay specifies replication delay in seconds between current instance and its future read-replica. | +------------------------+-------+-----------------------------------------------------------------------------------------------------------+ 3 rows in set (0.01 sec) Query OK, 0 rows affected (0.01 sec)

Slide 39

Slide 39 text

実際にやってみて初めて気づいた挙動の紹介 39 - Green環境のReplicaインスタンスではNULLになっていた...... MySQLの設定値に引き継がれないものがある mysql> call mysql.rds_show_configuration; +------------------------+-------+-----------------------------------------------------------------------------------------------------------+ | name | value | description | +------------------------+-------+-----------------------------------------------------------------------------------------------------------+ | binlog retention hours | NULL | binlog retention hours specifies the duration in hours before binary logs are automatically deleted. | | source delay | 0 | source delay specifies replication delay in seconds between current instance and its master. | | target delay | 0 | target delay specifies replication delay in seconds between current instance and its future read-replica. | +------------------------+-------+-----------------------------------------------------------------------------------------------------------+ 3 rows in set (0.00 sec) Query OK, 0 rows affected (0.00 sec)

Slide 40

Slide 40 text

実際にやってみて初めて気づいた挙動の紹介 - パラメータグループで管理していた設定はそのままだった - ⼿動で設定したGRANTSは引き継がれていた MySQLの設定値に引き継がれないものがある 40

Slide 41

Slide 41 text

Green環境の複数イン スタンスに最初から個 別の設定はできない 41

Slide 42

Slide 42 text

実際にやってみて初めて気づいた挙動の紹介 42 - BGデプロイの作成時に選べる設定は⼀つだけ - 例えばGreen環境のPrimaryとReplicaに別のパラメータグループを設定させてくれ ない - Green環境が整ったら個別に設定しなおせばOK Green環境の複数インスタンスに最初から個別の設定はできない

Slide 43

Slide 43 text

Green環境のインスタン スはBlue環境のインスタ ンスとは別物 43

Slide 44

Slide 44 text

実際にやってみて初めて気づいた挙動の紹介 44 - それはそう - 「接続情報変わらないから、DBを利⽤する側で考慮することはないでしょ〜」 - そんなことなかった Green環境のインスタンスは切り替わってもBlue環境のインスタンスとは別物

Slide 45

Slide 45 text

実際にやってみて初めて気づいた挙動の紹介 - Debezium ServerによるCDC(Change Data Capture)を実施している - binlogを読んで変更内容をBigQueryへ送る - インスタンスが変わると読むbinlogも別になる - 切り替え後もCDCを続けるならDebezium Server側での初期化処理が必要 「BlueとGreenとでインスタンスは別物」で引っかかった事例 45 Debezium ServerによるChange Data Captureの事例紹介

Slide 46

Slide 46 text

まとめ 46

Slide 47

Slide 47 text

まとめ - ダウンタイムが少ない - コンソール上の操作で完結する - 接続情報に変更がない - ChatGPTに聞いても教えてくれない RDS BGデプロイ、便利。だけどインターネット上に知⾒が少ないので苦労するね。 47

Slide 48

Slide 48 text

We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring!We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring!We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring!We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring!We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring!We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring!We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring!We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring!We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring!We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring!We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! We're hiring! 48 おわり