背景
Webサービスを運用していくにあたり、RDBのアップグレードに迫られる場合があります。ありますよね?
弊社のあるプロダクトのバックエンドについても Aurora MySQL 2.11.1(MySQL 5.7系) で稼働しておりましたが、Aurora MySQL v2系は 2024/10/31 を以って標準サポートが終了します。
Aurora MySQL v3 で現時点で利用可能な最新LTSバージョンは 3.04.2 (MySQL 8.0.28) になるため、MySQL 5.7 から MySQL8へのアップグレードが必要になってしまいました。
今回はそんなDBアップグレードを「RDS Blue/Green Deployments」でやってみた、という記事になります。
RDS Blue/Green Deploymentsって?
以下はAWSの公式Docです
ざっくりと言うと、現行DB環境(Blue)に対し、論理レプリケーションされたステージング環境(Green)を作成してくれるものです。
Green環境はBlue環境と異なるバージョンのインスタンスで作成することができるため、今回はGreen環境をAurora MySQL 3.04.2 (MySQL 8.0.28) で作成しています。
どうやったか
今回行ったアップグレード手順をざっくりと記載していきます。
現行DBのバイナリログを出力する
Blue/Green構成を作成するにあたり、Blue環境のバイナリログ (binlog_format) をオンにする必要があります。
BlueのDBクラスターパラメータのbinlog_format
をROW
にしてDBを再起動します。
Blue/Green環境の作成
AWS マネージメントコンソールから、該当のAurora クラスターを選択し、 Blue Green Deployment を作成します。
作成時にGreen環境のバージョンを指定できるため、今回は「Aurora MySQL 3.04.2 (compatible with MySQL 8.0.28) 」を選択しました。
Blue/Green構成の作成には弊社環境で60分程度かかります。作成中もBlue環境は特段停止しないためサービスを止めずに作成可能です。
Green環境でテスト
Green環境が作成されたら、テストを行います。
検証環境をGreen環境のエンドポイントに向け、各種テストを行います。
ここでは主にmysq5.7->8にアップグレードすることによりアプリケーションの振る舞いに影響がないかどうかを確認しました。
Blue/Greenの切り替え
テストが完了したら、Blue/Greenの切り替えを行います。
1~2分程度DBが停止したのち、BlueとGreenが切り替わります。
Blue/Green構成の削除
その後しばらく運用してみて動作に問題がなさそうであれば、Blue/Green環境を削除します。
Blue/Green環境を削除すると、旧Blue環境が個別のDBクラスタとして残るため、こちらも任意のタイミングで削除します。
やってみての所感
上記手順で特に不具合もなくアップデートを完了することができました。
以下の点が特に嬉しかったです。
- レプリケーションを簡単に構築てきる
- Green環境上で思う存分テストできる
- 1~2分程度の停止時間で新DBへの切り替えが完了する(これがすごく嬉しい!)
最後に
弊社CBcloudではバックエンドエンジニアを募集しています!!
Railsでのアプリケーション構築がメインになりますが、本記事のようにAWSをはじめとしたクラウドインフラに触れる機会も多くあり、スキルアップを狙える環境だと思います。ご興味があれば以下からエントリーください!