[アップデート] Auroraのストレージベースのリージョン間レプリケーションAurora Global Databaseが利用可能になりました #reinvent

大栗です。

re:Inventでアップデート祭りでしたが、Auroraのアップデートをご紹介していなかったのでご紹介します。

Amazon Aurora Global Database Announcing Amazon Aurora Global Database Working with Amazon Aurora Global Databases

Amazon Aurora Global Database

Amazon Aurora Global Databaseはストレージレベルのレプリケーション機能を使用して、リージョン間でAuroraのレプリケーションを行う機能です。既存のMySQLのbinlogベースの論理的なクロスリージョンリードレプリカよりレプリケーションが高速になっており、概ね1秒以下、最大でも5秒でレプリケーションが行われます。またデータベースにリージョンを追加してもパフォーマンスに影響ありません。

ディザスタリカバリ(DR)への対応としても有用です。レプリケーションのラグが最大5秒であるため、地域を跨ったDRでRPO(目標復旧時点)が5秒となります。また他のリージョンでの昇格が1分未満で行えるのでRTO(目標復旧時間)が1分ということになります。

アーキテクチャ構成としては、ストレージ層にReplication Fleetという機構が入りAuroraストレージの変更分を転送します。そのためDBインスタンスは直接レプリケーションに関与しません。DBインスタンスが関与しないため冗長性の問題も発生しないし、DBインスタンスの負荷が小さくなることが利点になっています。

リージョン

現在利用可能なリージョンは、以下の通りとなっています。東京と東アジアに来るのが楽しみですね。

  • 米国東部 (バージニア北部)
  • 米国東部 (オハイオ)
  • 米国西部 (オレゴン)
  • EU (アイルランド)

料金

レプリケーションの書き込みI/Oに対して料金が発生します。それ以外にレプリケーション元とレプリケーション先のAuroraクラスタの料金も発生します。

リージョン 料金(100万I/O当たり)
米国東部 (バージニア北部) $0.20
米国東部 (オハイオ) $0.20
米国西部 (オレゴン) $0.20
EU (アイルランド) $0.22

現在の制限

  • MySQL 5.6互換のAuroraのみで使用可能です。
  • db.t2のインスタンスクラスを使用することはできません。db.r3かdb.r4のインスタンスクラスを使用して下さい。
  • セカンダリクラスタはプライマリクラスタと異なるリージョンにあることが必要です。
  • セカンダリと同じリージョンのプライマリクラスタからクロスリージョンリードレプリカを作成できません。
  • 以下の機能はAurora Global Databaseでサポートされていません。

やってみる

実際にAurora Global Databaseを作成してみます。ここではオレゴンからバージニアへレプリケーションさせます。

Global Databaseとレプリケーション元クラスタの作成

まず、オレゴンのRDSのコンソールを開いてDBインスタンスを作成していきます。DBエンジンの選択画面にAurora Global DatabaseのTry it nowのボタンがあるのでクリックします。

すると新しいバージョンのRDSの画面に変わります。ここでAuroraを選択します。

エディションはMySQL 5.6-compatibleでデータベースロケーションでグローバルを選択します。

あとは普通にAuroraの起動設定を行います。インスタンスクラスはt2系が利用できないのでここでは db.r4.largeを選択しました。

レプリケーション元のAuroraクラスタを作成すると、以下のように[グローバル]-[プライマリ]-[書き込み]という階層で表現されます。

レプリケーション先クラスタの作成

対象のGlobal Databaseを選択して[アクション]-[リージョンの追加]をクリックします。

バージニアへレプリケーションさせるため、リージョンでUS East (N. Virginia)を選択します。あとは普通にAuroraの起動設定を行います。

グローバルの下にセカンダリのクラスタが作成されます。

レプリケーションの確認

オレゴンのレプリケーション元Auroraにログインします。

$ mysql -uawsuser -pmypassword -h oregon-cluster-01-db-cluster-1-1.cluster-a1b2c3d4e5f6.us-west-2.rds.amazonaws.com
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.6.10 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]>

データベースとテーブルを作成します。

MySQL [(none)]> create database mydb;
Query OK, 1 row affected (0.04 sec)

MySQL [(none)]> create table mydb.sample_table (
    ->   col1 int,
    ->   col2 varchar(20),
    ->   col3 datetime);
Query OK, 0 rows affected (0.02 sec)

MySQL [(none)]>

データを適当に挿入します。

MySQL [(none)]> insert into mydb.sample_table (col1, col2, col3)
    ->   VALUES (1, 'Developers.IO', now());
Query OK, 1 row affected (0.01 sec)

MySQL [(none)]> select * from mydb.sample_table;
+------+---------------+---------------------+
| col1 | col2          | col3                |
+------+---------------+---------------------+
|    1 | Developers.IO | 2018-12-06 06:53:58 |
+------+---------------+---------------------+
1 row in set (0.00 sec)

MySQL [(none)]>

これをバージニアのAuroraクラスタで確認してみます。

$ mysql -uawsuser -pmypassword -h oregon-cluster-01-db-cluster-1-1.cluster-ro-cfkkwlfg8kg1.us-east-1.rds.amazonaws.com
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.6.10 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]>

データを確認するとオレゴンで挿入したデータが確認できます。

MySQL [(none)]> select * from mydb.sample_table;
+------+---------------+---------------------+
| col1 | col2          | col3                |
+------+---------------+---------------------+
|    1 | Developers.IO | 2018-12-06 06:53:58 |
+------+---------------+---------------------+
1 row in set (0.01 sec)

MySQL [(none)]>

さいごに

Aurora Global Databaseをご紹介しました。既存のCross-Region Read Replicaとの棲み分けが分かりにくい面もあると思いますが、Global Databaseの方が利点が多くあるので、東京や周辺のリージョンでも早く使用できるようになってほしいです。