[アップデート] 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の方が利点が多くあるので、東京や周辺のリージョンでも早く使用できるようになってほしいです。