皆様こんにちは、ネットワーク事業部の生方と申します。
弊社ではAWSの環境構築から稼働後の保守まで継続して対応させていただくケースが多いのですが、AWSはAmazon側のシステムアップデートなどによるメンテナンスが不定期に必要となります。
先日、とあるお客様のAWS環境でRDSのアップグレードを実施しましたので、その際の手順や注意点などについてご紹介したいと思います。
目次
アップグレードの概要
2023年中から、AWSよりAmazon RDS for PostgreSQL 11系の標準サポートが終了するというアナウンスがされていました。
(AWSからのアナウンス)
PostgreSQL コミュニティは、11.22 リリース後にPostgreSQL11を非推奨にする予定であり、最終的なコミュニティリリース以降はセキュリティパッチが提供されません。
Amazon RDSは、2024年2月29日にPostgreSQL メジャーバージョン11の標準サポートを終了します。
2024年2月にRDSの標準サポートが終了する前に、メジャーバージョン11を実行しているPostgreSQL データベース (DB) をメジャーバージョン14以降にアップグレードすることをお勧めします。
弊社でサポートしているユーザ様の環境ではAmazon RDS for PostgreSQL 11.18が稼働していたため、ユーザ様及びシステム開発会社様と対応について協議いたしました。
その結果、現在稼働しているシステムとの兼ね合いもありPostgreSQL 14系が採用され、その時点での14系最新バージョンである14.10へアップグレードすることとなりました。
構成と状況
ユーザ様の環境ではバージョンアップ対象となるRDSが複数あり、通常のインスタンスとプライマリ/リードレプリカ構成のインスタンスがありました。
リードレプリカとは、更新対象となるデータベース(プライマリサーバ)とは別に複製された読み取り専用のデータベースです。プライマリサーバへの負荷分散のために利用し、データの読み込み速度などの向上が見込めます。
ただしプライマリサーバとは非同期のため、タイミングによっては最新のデータが取得できない場合もあります。
今回の場合、プライマリ/リードレプリカどちらもPostgreSQL 11.18で稼働しており、いずれもアップグレードが必要となりました。
今回は、特に手順が複雑だったプライマリ/リードレプリカのアップグレードについてご紹介いたします。
検証段階で判明したこと
事前の検証作業やAWSのサポートへ問い合わせるなどして、以下のような注意点が判明しました。
PostgreSQL 11.18→14.10へは1回でアップグレードできない
検証のため、対象となるRDSを複製して実際にアップグレードを試みましたが、AWSマネジメントコンソールへログインしてDBエンジンバージョンの一覧を確認したところ、対象として選択できるリストに14.10が存在しませんでした。
そこでAWSサポートへ問い合わせしたところ、各バージョンからからアップグレードできるターゲットが決まっていることが分かりました。
Getting a list of available versions in your AWS Region
検証段階では11.18からアップグレードできる上限は14.6だったため、11.18 → 14.6 → 14.10 と2回に分けることで目的のバージョンまでアップグレード可能であると確認できました。
プライマリ/リードレプリカのアップグレード順序
これまでもRDSのマイナーバージョンのアップグレードは実施した経験があり、プライマリ/リードレプリカ構成の場合は『リードレプリカ → プライマリ』の順番で個別にアップグレードする必要があることを把握していました。
しかし調査を進めるなかで、
- メジャーバージョンのアップグレードは『プライマリ → リードレプリカ』の順で行う必要がある(マイナーバージョンとは逆順になる)
- プライマリのメジャーアップグレードを行うと、完了後にリードレプリカが自動でアップグレードされる
という2点が判明しました。
(参考)Amazon RDS の PostgreSQL DB エンジンのアップグレード
リージョン内リードレプリカがある DB インスタンスをアップグレードする場合、Amazon RDS はプライマリ DB インスタンスと共にレプリカもアップグレードします。
この調査結果から、以下の流れでアップグレードを実施することが判明し、想定よりもかなり複雑な流れとなってしまいました。
アップグレード作業の手順と結果
結果から述べると、事前に検証した流れ通りに進めることで無事14.10へアップグレードすることができました。
作業時間も全体で1時間程度に収まりました。
(Step1)
AWSマネジメントコンソールにログインします。
RDSの一覧から対象のプライマリを選択して、DBエンジンバージョンを11.18 → 14.6へ変更します。(約20分で完了)
※ここからStep4完了までDBへのアクセスはできなくなります。
(Step2)
プライマリのアップグレードが完了後、自動的にリードレプリカの11.18 → 14.6へのアップグレードが開始されます。
プライマリ/リードレプリカ共にステータスが「利用可能」になるまで待ちます。(約20分で完了)
(Step3)
メジャーアップグレードされたことを確認できたら、RDSの一覧からリードレプリカを選択して14.6 → 14.10へマイナーアップグレードを行います。
RDS一覧でステータスが「利用可能」になり、エンジンバージョンが14.10になったことを確認します。(約10分で完了)
(Step4)
Step3と同様にプライマリを選択して14.6へアップグレードします。
RDS一覧でステータスが「利用可能」になり、エンジンバージョンが14.10になったことを確認します。(約10分で完了)
プライマリ/リードレプリカ共にアップグレード完了後、システムも問題なく稼働することをユーザ様に確認していただき、全作業完了となりました。
おわりに
ユーザ様やシステム開発会社様にご協力いただいて無事に完了できましたが、アップグレードが複数回必要なことや、メジャー/マイナーアップグレードで順序が異なることなど事前の検証のおかげで把握することができた内容でした。
改めて調査・検証の重要さを痛感する事例だったなと感じます。
今後のAWSの仕様変更等によりこのケースとは異なることが出てくるかもしれませんが、アップグレード作業の一例として参考にしていただければ幸いです。
弊社ではAWSやオンプレサーバなど幅広くサーバ構築や保守について承っておりますので、ぜひお気軽にご相談ください。