はじめに
こんにちは、技術 1 課の山中です。 春が訪れたので、入社以来変えていなかった Slack のプロフィール画像を新しいものに変えました。 春の格好をしてでかけたら、寒い。そんな毎日です。
Amazon ElastiCache for Redis がこの度クロスリージョンレプリケーションに対応したとのことですので、試していこうとおもいます!
Amazon ElastiCache for Redis がグローバルデータストアを発表
グローバルデータストアとは
グローバルデータストアは、 Amazon ElastiCache for Redis の新機能です。 グローバルデータストアは、以下の次のもので構成されます。
- プライマリ (アクティブ) クラスタ
読み取りおよび書き込みを担当するクラスタです。 書き込まれたデータは、グローバルデータストア内の全てのクラスタに複製されます。
- セカンダリ (パッシブ) クラスタ
読み取りのみを担当するクラスタです。 プライマリクラスタに書き込まれた更新が反映されます。 また、セカンダリクラスタはプライマリとは別のリージョンに作成する必要があります。
Image from Replication Across AWS Regions Using Global Datastore
グローバルデータストアの利点
グローバルデータストアを利用する利点は大きく 2 つあります。
- 地理的に有利なパフォーマンス
アプリケーションをグローバルに展開するような場合に、地理的に適したリージョンにセカンダリクラスタをセットアップすることで、レイテンシを減らしアプリケーションの応答性を高めることができます。
- 災害対策
プライマリクラスタが存在するリージョンで障害が発生した場合に、別リージョンにあるセカンダリクラスタをプライマリに昇格させることができます。 ただし、自動フェイルオーバには対応していないので、昇格させる際には手動での対応が必要となります。
制限事項
現在 (2020/3/25)、グローバルデータストアは Amazon ElastiCache for Redis の 5.0.6 のみで利用可能です。 また、対応するインスタンスファミリーは M5 もしくは R5 です。
ためしてみる
ためしに使ってみましょう! 今回は、東京リージョンにプライマリ、バージニア北部リージョンにセカンダリを作ってみます。
Amazon ElastiCache のコンソールを開くと、 グローバルデータストア の項目ができています。
作成 ボタンをクリックしてみましょう。
グローバルデータストアの作成画面では、新規にクラスタを作成することもできますし、既存のクラスタをプライマリとしてセットアップすることもできます。 今回は東京リージョンに新規プライマリクラスタを作成します。
次の画面で、セカンダリクラスタの指定を行えます。
作成が開始し、 10 分ほど待つと、プライマリクラスタ (東京リージョン)、セカンダリクラスタ (バージニア北部リージョン) およびグローバルデータストアが available になりました。
グローバルデータストアの名前をクリックすると、レプリカへの同期にどれくらいのラグが発生しているのか見えるようです。
早速アクセスしてみましょう!! まず、読み取り専用のセカンダリクラスタにデータを書き込んでみます。
$ redis-cli -h global-ds-1-useast1-001.xxxxxx.0001.use1.cache.amazonaws.com
global-ds-1-useast1-001.xxxxxx.0001.use1.cache.amazonaws.com:6379> ping
PONG
global-ds-1-useast1-001.xxxxxx.0001.use1.cache.amazonaws.com:6379> set paris france
(error) READONLY You can't write against a read only replica.
書き込もうとすると案の定、エラーがでて書き込めませんでした。 同様にプライマリクラスタにデータを書き込んでみます。
$ redis-cli -h global-ds-1-apnortheast1-001.xxxxxx.0001.apne1.cache.amazonaws.com
global-ds-1-apnortheast1-001.xxxxxx.0001.apne1.cache.amazonaws.com:6379> ping
PONG
global-ds-1-apnortheast1-001.xxxxxx.0001.apne1.cache.amazonaws.com:6379> set paris france
OK
global-ds-1-apnortheast1-001.xxxxxx.0001.apne1.cache.amazonaws.com:6379> set berlin germany
OK
global-ds-1-apnortheast1-001.xxxxxx.0001.apne1.cache.amazonaws.com:6379> set london uk
OK
global-ds-1-apnortheast1-001.xxxxxx.0001.apne1.cache.amazonaws.com:6379> keys *
1) "berlin"
2) "paris"
3) "london"
こちらは書き込むことができました!!! これがセカンダリクラスタに同期されていれば完璧ですが、いかがでしょうか。
$ redis-cli -h global-ds-1-useast1-001.xxxxxx.0001.use1.cache.amazonaws.com
global-ds-1-useast1-001.xxxxxx.0001.use1.cache.amazonaws.com:6379> keys *
1) "london"
2) "berlin"
3) "paris"
きちんとデータが同期されていました!!!簡単、速い!
おわりに
いかがだったでしょうか。 こんなに簡単にクロスリージョンレプリケーションができるなんて、素晴らしいですね。 また、本ブログの内容は2020/3/25(水) の YouTube Live でも話しますので、是非ご覧ください!! https://youtu.be/b1kQYQSE8hg