[新機能] Amazon RDS for PostgreSQLのリードレプリカを作成する

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

ども、大瀧です。
今朝かた、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]のリンクが無効になります。

postgresql-rr01

設定手順

設定手順は、MySQLのリードレプリカと特に変わりません。
RDSの管理画面からレプリケーション元となるDBインスタンスを選択し、[Instance Actions] - [Create Read Replica]をクリックします。

postgresql-rr02

レプリカインスタンスの構成を選択します。[Yes, Create Read Replica]をクリックすれば、レプリカインスタンスの作成がスタートします。

postgresql-rr03

postgresql-rr04

レプリカインスタンスが作成される間は、レプリケーション元のDBインスタンスが[modifying]という表示になりますが、ドキュメントによるとレプリケーション元のDBインスタンスの動作は、ダウンタイムなしで継続するとのことですが、バックグラウンドでレプリカインスタンス用のスナップショットが取得されるので、性能が定常時よりも落ちることが考えられます。

postgresql-rr05

レプリカインスタンスが[available]になったら、作成完了です。

postgresql-rr08

レプリケーション元のDBインスタンスのプロパティには、レプリカインスタンスの一覧が表示されます。

postgresql-rr06

レプリカインスタンスでは、プロパティにレプリケーション元のDBインスタンス名が確認できます。ちゃんと表示されていますね。

postgresql-rr07

動作確認

では、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での性能確保の強力な機能としてリードレプリカは様々なケースで活用できると思います。ぜひ使いこなしてください!

参考資料