【新機能】RDS for PostgreSQLでもリージョン間レプリケーションが可能に!

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

ウィスキー、シガー、パイプをこよなく愛する大栗です。

本日PostgreSQL for RDSでリージョン間レプリケーション(cross-region read replica)が可能になりましたので検証してみたいと思います。

リージョン間レプリケーション

元々RDSでは幾つかのDBエンジンにおいて、同一ネットワーク内でMaster-Slaveの様なレプリケーション構成を取ることが可能です。さらに別の地域へレプリケーションも可能なDBエンジンがありました。
今まではPostgreSQLは同一ネットワーク内のみ可能でしたが、今回のアップデートでリージョンを越えるレプリケーションが可能になりました。

  • Aurora
  • MySQL
  • MariaDB
  • PostgreSQL(New !)

リージョン間レプリケーションが可能になる事でディザスタ・リカバリ用途や、アクセスのレイテンシ低下などが期待できます。

リージョン間レプリケーションを試してみる

検証する環境

以下のように太平洋を跨ぐ構成にしてみました。

  • マスタ:東京リージョン
  • レプリカ:オレゴンリージョン

マスタの起動

まず東京リージョンでRDSを起動します。ここではバージョンを9.5.2にします。
PostgreSQLのリージョン間レプリケーションはバージョン9.4.7と9.5.2のみが対応している(2016年6月16日現在)ので注意です。

Cross-Region Replication Considerations

RDS_·_AWS_Console

詳細設定は通常と同様に設定します。

RDS_·_AWS_Console

しばらく待つと起動します。

RDS_·_AWS_Console

レプリカの起動

次にオレゴンリージョンでレプリカを作成します。

東京リージョンで起動したRDSを選択してリードレプリカの作成を行います。

RDS_·_AWS_Console_と__1_KDDI_ChatWork_-_AWSチーム

[ネットワーク & セキュリティ]の[送信先リージョン]でUS West (Oregon)を選択して、リードレプリカの作成先をオレゴンリージョンとします。その他は、通常のリードレプリカと同様に設定します。

RDS_·_AWS_Console

オレゴンリージョンのRDSのManagement Consoleを見るとRDSが作成中になっています。しばらく待つと利用可能になります。

RDS_·_AWS_Console

レプリケーションを確認する

まずは東京リージョンでPostgreSQLにログインしてみます。普通にログインできます。テーブルはありません。

]$ psql -h mypostgres.abcdefghijkl.ap-northeast-1.rds.amazonaws.com -U awsuser -d mydb
ユーザ awsuser のパスワード: 
psql (9.4.6, サーバー 9.5.2)
注意: psql メジャーバージョン 9.4, サーバーバージョン 9.5.
         psql の機能の中で、動作しないものがあるかもしれません。
SSL接続(プロトコル: TLSv1.2, 暗号化方式: ECDHE-RSA-AES256-GCM-SHA384, ビット長: 256, 圧縮: オフ)
"help" でヘルプを表示します.

mydb=> SELECT relname AS table_name
mydb-> FROM pg_stat_user_tables;
 table_name 
------------
(0 行)

同様にオレゴンリージョンのPostgreSQLにもログインします。こちらにもテーブルはありません。

$ psql -h mypost-us-west-2.abcdefghijkl.us-west-2.rds.amazonaws.com -U awsuser -d mydb
ユーザ awsuser のパスワード: 
psql (9.4.6, サーバー 9.5.2)
注意: psql メジャーバージョン 9.4, サーバーバージョン 9.5.
         psql の機能の中で、動作しないものがあるかもしれません。
SSL接続(プロトコル: TLSv1.2, 暗号化方式: ECDHE-RSA-AES256-GCM-SHA384, ビット長: 256, 圧縮: オフ)
"help" でヘルプを表示します.

mydb=> SELECT relname AS table_name
mydb-> FROM pg_stat_user_tables;
 table_name 
------------
(0 行)

東京リージョンでテーブルを作成する

東京リージョンでテーブルを作成します。

mydb=> create table test (
mydb(>   key  int primary key,
mydb(>   data int
mydb(> );
CREATE TABLE
mydb=> SELECT relname AS table_name
mydb-> FROM pg_stat_user_tables;
 table_name 
------------
 test
(1 行)

オレゴンリージョンでもテーブルを確認できます。問題なくレプリケーションされています。

mydb=> SELECT relname AS table_name
mydb-> FROM pg_stat_user_tables;
 table_name 
------------
 test
(1 行)

オレゴンリージョンでテーブルを作成してみる

今度はオレゴンリージョンでテーブルを作成してみます。するとエラーが発生して、テーブルを作成できません。リードオンリーとなっています。

mydb=> create table test2 (
mydb(>   key  int primary key,
mydb(>   data int
mydb(> );
ERROR:  cannot execute CREATE TABLE in a read-only transaction

まとめ

先日Auroraでリージョン間レプリケーションが可能になったことに引き続き、PostgreSQLでもリージョン間レプリケーションが可能になりました。日本の近くにはソウルやシンガポールといったネットワークレイテンシが比較的少ないリージョンがあるためディザスタ・リカバリ先として使える地域が多いので、使用する場面が出てくるのではないでしょうか。