Amazon RDS for PostgreSQLがプライマリ・レプリカを同時にメジャーアップグレードできるようになりました!

2020.10.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

RDS for PostgreSQLのメジャーアップグレードフローが超シンプルに!

RDS for PostgreSQLのプライマリ・レプリカを同時にメジャーバージョンアップグレードできるようになりました(ただし同一リージョンにあるレプリカに限る)。

Amazon RDS for PostgreSQL は、リードレプリカの同時メジャーバージョンアップグレードをサポート @ 2020/10/15発表

レプリカ単体ではメジャーアップグレードできず、PostgreSQLの制約としてプライマリとレプリカのメジャーバージョンが一致しない場合はレプリケートできません。

A read replica can't undergo a major version upgrade but the read replica's source instance can. If a read replica's source instance undergoes a major version upgrade, all read replicas for that source instance remain with the previous engine version. In this case, the read replicas can no longer replicate changes performed on the source instance.

Internet Archive が2020/06/26に取得した「Upgrading the PostgreSQL DB Engine for Amazon RDS」から

そのため、レプリケーションを組んだRDS for PostgreSQLをメジャーバージョンアップグレードする場合

  • プライマリを直接アップグレード
    1. プライマリを直接メジャーアップグレード
    2. レプリカを作り直し
    3. 古いバージョンのレプリカを削除
  • DBインスタンスをB/Gで切り替え
    1. レプリカをプライマリにpromote
    2. アップグレード
    3. レプリカを追加
    4. アプリケーションの向き先を旧プライマリから新プライマリに切り替え

といった方法が行われてきました。

今回のアップデートにより、前者のプライマリを直接アップデートした時にレプリカも同時にアップグレードされるようになったため、アップグレード手順が超シンプルになりました。

やってみた

Primary インスタンス に対して Modify を行い、新しいメジャーバージョンを指定するだけです。

確認画面では、プライマリとレプリカの

  • ストレージ
  • バージョン

が同じか確認するメッセージが表示されました。’

メジャーアップグレード時のダウンタイム

メジャーアップグレード手順の「4. Handle read replicas」によると、プライマリとレプリカを同時にアップグレードすると、ダウンタイムが伸びるリスクがあると書かれています。

4 Handle read replicas

An upgrade also upgrades the in-Region read replicas along with the primary instance. ... However, replica upgrades might increase downtime on the primary instance. To prevent a replica upgrade, promote the replica to a standalone instance or delete it before starting the upgrade process.

同じページの冒頭に書かれているように、プライマリ(writer/standby)→レプリカの順にアップグレードされ、アップグレードプロセスが完了するまで outage となるためでしょう。

When you upgrade the primary DB instance, all the in-Region read replicas are also automatically upgraded. After the upgrade workflow starts, the replica instances wait for the pg_upgrade to complete successfully on the primary DB instance. Then the primary instance upgrade waits for the replica instance upgrades to complete. You experience an outage until the upgrade is complete.

ダウンタイムが気になる場合は、従来型のアップグレード方法をご検討ください。

具体的な手順は以下の通りです。

ダウンタイムが長くなっても構わない

本記事で紹介した新機能です。

この方式ではプライマリインスタンスのダウンタイムが伸びる可能性があります。

ダウンタイムを短くしたい:レプリカを予め削除方式

レプリカを削除することで、プライマリのアップグレードに伴うダウンタイムを軽減できます。 ただし、ダウンタイムそのものは発生します。

ダウンタイムを最小化したい:DBインスタンスをB/Gで切り替え方式

新旧プライマリを B/G で切り替え、ダウンタイムを最小化します。 レプリカを切り離してプライマリに昇格し、バージョンアップして新しいプライマリを作成します。

短いダウンタイムのトレードオフとして、手順が少し複雑です。

最後に

Amazon RDS for PostgreSQLのメジャーバージョンアップグレード方法がシンプルになり、プライマリとレプリカを同時にアップグレードできるようになりました。

この方式はダウンタイムが伸びるリスクがあります。 ダウンタイムが気になる場合は

  • アップグレード前にレプリカを削除
  • promoteしたレプリカをアップグレードしてB/G切り替え

というように従来型の手順でメジャーアップグレードしてください。

なお、別リージョンにあるレプリカや古いメジャーバージョンのレプリカは同時アップグレードされないなど、いくつかの制約があります。

メジャーバージョンアップグレード手順の詳細は次のユーザーガイドのドキュメントを参照してください。

Amazon RDS の PostgreSQL DB エンジンのアップグレード - Amazon Relational Database Service

それでは。

参考