[新機能] Amazon RDS for PostgreSQLのリードレプリカを作成する
ども、大瀧です。
今朝かた、RDS for PostgreSQLでリードレプリカがサポートされました。早速試してみたので、レポートします。
リードレプリカとは
RDSのリードレプリカは、マスターとなるDBインスタンスとは別に読み取り専用のインスタンスを追加します。マスターへの負荷を分散させるための手法として、従来からRDS for MySQLでサポートされている機能です。今回、RDS for PostgreSQLが対応しました!
ただ、MySQLのリードレプリカとはレプリケーション方式が異なるとドキュメントに記載があるので、MySQLのリードレプリカをご存知の方は注意が必要です。設計/運用面では以下3点を押さえておきましょう。
- リードレプリカからマスターへの昇格はできない
- リードレプリカの多段化はできない
- 同一リージョン内のみ(異AZはOK)
要件
リードレプリカの元となるDBインスタンスは、以下の要件を満たす必要があります。
- 自動バックアップが有効
- PostgreSQLのバージョンが9.3.5(今回のアップデートで追加)
バージョンは、今回のアップデートで追加された新しいバージョンなので、既存のDBインスタンスではバージョンアップが必須になります。要件が満たされていない場合、以下のように[Instance Actions]にある[Create Read Replica]のリンクが無効になります。
設定手順
設定手順は、MySQLのリードレプリカと特に変わりません。
RDSの管理画面からレプリケーション元となるDBインスタンスを選択し、[Instance Actions] - [Create Read Replica]をクリックします。
レプリカインスタンスの構成を選択します。[Yes, Create Read Replica]をクリックすれば、レプリカインスタンスの作成がスタートします。
レプリカインスタンスが作成される間は、レプリケーション元のDBインスタンスが[modifying]という表示になりますが、ドキュメントによるとレプリケーション元のDBインスタンスの動作は、ダウンタイムなしで継続するとのことですが、バックグラウンドでレプリカインスタンス用のスナップショットが取得されるので、性能が定常時よりも落ちることが考えられます。
レプリカインスタンスが[available]になったら、作成完了です。
レプリケーション元のDBインスタンスのプロパティには、レプリカインスタンスの一覧が表示されます。
レプリカインスタンスでは、プロパティにレプリケーション元のDBインスタンス名が確認できます。ちゃんと表示されていますね。
動作確認
では、EC2インスタンスからそれぞれのDBインスタンスにpsqlコマンドで接続してみます。
$ psql -h rrtest2.XXXXXXXX.ap-northeast-1.rds.amazonaws.com -U master rdstest ユーザ master のパスワード: psql (9.3.5) SSL 接続 (暗号化方式: DHE-RSA-AES256-SHA, ビット長: 256) "help" でヘルプを表示します. rdstest=> \l データベース一覧 名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権 -----------+----------+------------------+-------------+-------------------+----------------------- postgres | master | UTF8 | en_US.UTF-8 | en_US.UTF-8 | rdsadmin | rdsadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | rdsadmin=CTc/rdsadmin rdstest | master | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | rdsadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/rdsadmin + | | | | | rdsadmin=CTc/rdsadmin template1 | master | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/master + | | | | | master=CTc/master (5 行) rdstest=> \q
$ psql -h rr1.XXXXXXXX.ap-northeast-1.rds.amazonaws.com -U master rdstest ユーザ master のパスワード: psql (9.3.5) SSL 接続 (暗号化方式: DHE-RSA-AES256-SHA, ビット長: 256) "help" でヘルプを表示します. rdstest=> \l データベース一覧 名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権 -----------+----------+------------------+-------------+-------------------+----------------------- postgres | master | UTF8 | en_US.UTF-8 | en_US.UTF-8 | rdsadmin | rdsadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | rdsadmin=CTc/rdsadmin rdstest | master | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | rdsadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/rdsadmin + | | | | | rdsadmin=CTc/rdsadmin template1 | master | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/master + | | | | | master=CTc/master (5 行) rdstest=> \q
ひとまず、接続できることが確認できました!
まとめ
いくつか条件もありますが、RDS for PostgreSQLでの性能確保の強力な機能としてリードレプリカは様々なケースで活用できると思います。ぜひ使いこなしてください!