みなさん、こんにちは。サニービュー事業部の小寺です。
Amazon RDS for PostgreSQL は、PostgreSQL 14でカスケードされた読み取りレプリカをサポートするようになりました。
ストリーミングレプリケーションについて
PostgreSQLの標準機能であるストリーミングレプリケーションは、プライマリーサーバーで更新された情報を、リアルタイムでスタンバイサーバーに転送することで、プライマリーとスタンバイのデータベースを同じ状態に保つことができます。
PostgreSQLは、クラッシュリカバリーやロールバックに備え、プライマリーサーバーの更新情報をトランザクションログ(以降、WAL)として保存します。ストリーミングレプリケーションは、リアルタイムにこのWALをスタンバイサーバーへ転送し、スタンバイサーバーでそのWALを適用します。
ストリーミングレプリケーションは、「1対N」の構成で利用することができます。
プライマリーから全スタンバイサーバーにWALを転送するのがマルチスタンバイ、スタンバイからまた別のスタンバイにWALを転送するのが、この後に出てくるカスケードレプリケーションです。
カスケードリードレプリケーションについて
カスケードレプリケーションについて、耳にされたことはあるでしょうか。カスケードレプリケーションは多段レプリケーションとも呼ばれています。
PostgreSQLでカスケードレプリケーションについては、以下のイメージです。
master ==> slave1 ==> slave2
slave1はslave2にとってのmasterでもあり、稼働系→待機系→待機系と切り替えをすることができます。
スタンバイサーバから他のスタンバイにレプリケーション接続し、WALを送信することができます。 マスターサーバへ直接の接続を減らしたり、サイト相互の帯域オーバヘッドを最小化するために使用することができます。
カスケードスタンバイはマスターから受け取ったWALだけでなく、アーカイブからリストアしたWALも送信します。
このため、レプリケーション接続が上流サーバで切断しても、ストリーミングレプリケーションは下流サーバへ新しいWAL レコードがある限り継続します。
アップデートでのうれしいこと
本アップデートによりPostgreSQL14.1以降では、カスケードレプリケーションを利用することができます。
PostgreSQLでは元々あった機能なので、RDSにも対応がされるようになりました。
Amazon RDSのインスタンスが持てるレプリカは最大5までです。しかし、3段まで多段レプリケーションが構成できるので、レプリカを最大で 5 x 31 = 155インスタンス作ることができるようになりました。
そのため、参照系のインスタンスが約30倍の速度で、パフォーマンスが大幅に改善されています。
また、シングルAZまたはマルチ AZ カスケードリードレプリカ DB インスタンスを同じリージョンに作成することも、別のリードレプリカインスタンスから任意のクロスリージョンに作成することもできるため、より堅牢な構成を取ることができるようになっています。
ストリーミングレプリケーションのバージョン間の違いについて
Amazon RDS for PostgreSQLでは、元々のPostgreSQLのストリーミングレプリケーションの機能も利用しています。
PosgreSQL14.1以上とPostgreSQL13での違いとしては、PostgreSQL14.1以上では、マスターのデータベースのWALデータが削除されるのを防ぐために、レプリケーションのスロットが使われます。 PostgreSQL13では、WALを保存するためにS3を使っていますが、追加でスロットが利用できるようになりました。
後は、本アップデートに関連するパラメータです。
max_wal_senders:待機系データベースの数
wal_keep_segments:アーカイブログの最小保持数
max_slot_wal_keep_size:-1 (デフォルト)なら、レプリケーションスロットは無制限のWALファイルを残します
まとめ
DR目的でセカンダリリージョンにスタンバイとして利用したり、読み取りパフォーマンスの向上のメリットがあるので、
本アップデートであるPostgreSQL14.1以上のカスケードレプリケーションは有効です。
AWSをご利用いただくには、直接契約するより断然お得。
AWS利用料が5%割引、さらに日本円の請求書による支払いが可能です!