【新機能】RDS for PostgreSQLでもリージョン間レプリケーションが可能に!
ウィスキー、シガー、パイプをこよなく愛する大栗です。
本日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を選択してリードレプリカの作成
を行います。
[ネットワーク & セキュリティ]の[送信先リージョン]でUS West (Oregon)
を選択して、リードレプリカの作成先をオレゴンリージョンとします。その他は、通常のリードレプリカと同様に設定します。
オレゴンリージョンのRDSのManagement Consoleを見るとRDSが作成中
になっています。しばらく待つと利用可能
になります。
レプリケーションを確認する
まずは東京リージョンで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でもリージョン間レプリケーションが可能になりました。日本の近くにはソウルやシンガポールといったネットワークレイテンシが比較的少ないリージョンがあるためディザスタ・リカバリ先として使える地域が多いので、使用する場面が出てくるのではないでしょうか。