スケーラビリティと高可用性を実現する Redis クラスターの設定

Amazon ElastiCache for Redis クラスターモードの設定、構成、セキュリティ、プロビジョニング

このチュートリアルでは、ElastiCache for Redis を使用して Redis クラスターを作成および設定する方法を学習します。クラスターモードを有効にすると、Redis クラスターのスケーラビリティと高可用性が向上します。Redis は小規模なデータで開始し、アプリケーションの拡大に合わせて、簡単にスケーリングできます。また、さまざまなアベイラビリティーゾーンにレプリカを配置して、読み込みキャパシティーを増やすこともできます。このチュートリアルでは、Redis クラスターのデプロイのベストプラクティスについても取り上げます。

Redis クライアントのエコシステムは非常に充実しており、クラスターモード機能にも対応しています。これにより、クライアントはローカルキャッシュ内のハッシュスロットの場所を追跡できるため、シャーディングされたデータの操作性や信頼性が高くなり、システム全体のパフォーマンスが向上します。

このチュートリアルで作成した ElastiCache ノードは、無料利用枠の対象です。

Amazon ElastiCache ダッシュボードにサインイン »

要件

この機能を直接体験するには、チュートリアルの途中で Redis クラスターに接続する必要があります。つまり、Redis クライアントがインストールされている EC2 インスタンスにアクセスする必要があります。Redis クライアントがインストールされた EC2 インスタンスをすでにお持ちの場合は、ステップ 1 にスキップできます。それ以外の場合は、Amazon EC2 インスタンスに接続し、以下の手順に従って Redis クライアントをインストールします。

C コンパイラがない場合は、以下を実行してインストールします。

$ sudo yum install gcc

Redis クライアントをダウンロードしてコンパイルします。

$ curl -O http://download.redis.io/redis-stable.tar.gz
$ tar xvzf redis-stable.tar.gz
$ cd redis-stable
$ make distclean  # Ubuntu systems only
$ make

これで、チュートリアルを開始する準備が整いました。

このチュートリアルについて
時間 10 ~ 20 分                                           
料金 無料利用枠の対象
ユースケース スケーリング、高可用性、リアルタイムアプリケーション
製品 AWS ElastiCache for Redis、AWS 無料利用枠
対象者 開発者
レベル 初心者
最終更新日 2019 年 6 月 5 日

ステップ 1: ElastiCache ダッシュボードを開く

[ElastiCache ダッシュボード] を開きます。

1.1 — 右上から、Redis クラスターを起動するリージョンを選択します。

1.2 — [今すぐ始める] をクリックします。

ステップ 2: Redis クラスターを作成する

2.1 — クラスターエンジンとして [Redis] を選択します。

2.2 — [クラスターモードが有効] のチェックボックスをオンにします。

ステップ 3: Redis 設定を構成する

3.1 — Redis クラスターの名前 (例: [elc-tutorial]) を選択します。

3.2 — ノードタイプを cache.t2.micro に変更します。このチュートリアルではこのノードタイプでも問題ありませんが、本番クラスターではノードのサイズがワークロードに依存するため、m5 または r5 インスタンスファミリーから始める必要があります。

3.3 — [シャード数]で、3 を選択します。これにより、データが 3 つの異なるマスターノードに分割されます。

3.4 — [シャードあたりのレプリカ] で 2 を選択します。これにより、各マスターノードに 2 つのレプリカが作成されます。障害が発生した場合、自動フェイルオーバーがトリガーされ、レプリカのいずれかがマスターノードのロールを引き継ぎます。

3.5 — サブネットグループを選択します。サブネットグループの詳細については、ドキュメントを参照してください。

ステップ 4: Redis の詳細設定を行う

4.1 — [自動フェイルオーバーを備えたマルチ AZ] のチェックボックスをオンにします。

マスターノードはそれぞれ異なるアベイラビリティーゾーンに作成され、そのレプリカもそれぞれ異なるアベイラビリティーゾーンに割り当てられます。信頼性を向上させるためには、この方法をお勧めします。

その他のフィールドはデフォルト値のままにします。

ステップ 5: セキュリティ設定を行う

この例では暗号化を使用しませんが、データの保管時と送信中の両方で暗号化を引き続き設定できます。

5.1 — Redis クラスターのセキュリティグループを選択します。

重要事項: 選択するセキュリティグループがポート 6379 で着信 TCP 接続を許可していることを確認してください。許可されていない場合は、Redis ノードに接続できません。

ステップ 6: データをクラスターにインポートする

この例では、シード RDB ファイルをロードしないため、この構成手順はスキップできます。このオプションが利用可能であることを覚えておいてください。

ステップ 7: バックアップを構成する

毎日バックアップを行うことはほとんどのユースケースにとって重要です。また、問題が発生した場合に十分な時間を以って対処できるため、保持期間中にバックアップを有効にすることをお勧めします。このチュートリアルでは、バックアップは使用しません。

7.1 — [自動バックアップを有効にする] のチェックボックスをオフにします。

ステップ 8: メンテナンス設定

8.1 — ニーズに合うメンテナンスウィンドウを指定します。

ここでは、アプリケーションのワークロードが低い日時を考えることができます。現在のニーズとしては、単に [指定なし] とします。

ステップ 9: 確認して作成する

フォームのすべてのフィールドを簡単に確認したら、[作成] を押します。

9.1 — [作成] をクリックします。

Redis クラスターが初期化され、[利用可能] 状態になったら、ステップ 10 に進みます。

Amazon CLI を使用する場合は、以下のコマンドで一度に Redis クラスターを作成できます。

Amazon CLI を使用する場合は、以下のコマンドで一度に Redis クラスターを作成できます。

$ aws elasticache create-replication-group \
--replication-group-id elc-tutorial \
--replication-group-description "Tutorial example" \
--num-node-groups 3 \
--cache-node-type cache.t2.micro \
--cache-parameter-group default.redis5.0.cluster.on \
--engine redis \
--engine-version 5.0.3 \
--cache-subnet-group-name sn-value \
--security-group-ids sg-value \
--node-group-configuration \
"ReplicaCount=2,PrimaryAvailabilityZone='us-east-1a',ReplicaAvailabilityZones='us-east-1b','us-east-1c',Slots=0-5460" \
"ReplicaCount=2,PrimaryAvailabilityZone='us-east-1b',ReplicaAvailabilityZones='us-east-1c','us-east-1a',Slots=5461-10921" \
"ReplicaCount=2,PrimaryAvailabilityZone='us-east-1c',ReplicaAvailabilityZones='us-east-1a','us-east-1b',Slots=10922-16383"

--security-group-ids の引数では、sg-value を、使用するセキュリティグループの ID に置き換える必要があります。

--cache-subnet-group-name の引数では、sn-value をサブネットグループの名前に置き換えます。サブネットグループを作成する必要がある場合は、次のコマンドを使用します。

$ aws elasticache create-cache-subnet-group \
--cache-subnet-group-name elc-tutorial-subnet \
--cache-subnet-group-description "Tutorial Subnet Group" \
--subnet-ids sn-ids

sn-ids の値には、サブネット ID のリストを指定します。

Amazon API を使用する場合は、以下のリクエストで Redis クラスターを作成します。

https://elasticache.us-east-1.amazonaws.com/
?Action=CreateReplicationGroup 
&CacheParameterGroup=default.redis5.0.cluster.on
&Engine=redis
&EngineVersion=5.0.3
&ReplicationGroupDescription=Tutorial%20example
&ReplicationGroupId=elc-tutorial
&NumNodeGroups=3
&PrimaryClusterId=elc-primary
&ReplicasPerNodeGroup=2
&Version=<version>
&SignatureVersion=4
&SignatureMethod=HmacSHA256
&Timestamp=<timestamp>
&X-Amz-Credential=<credential>

前のリクエストで、Version、Timestamp、および X-Amz-Credential の値を指定する必要があります。

ステップ 10: Redis に接続する

Redis クラスターの構成エンドポイントを見つけます。

10.1 — 矢印をクリックして Redis クラスターの詳細を表示します。

10.2 — 構成エンドポイントをコピーします。

例では、エンドポイントが言及されるたびに、構成エンドポイントのホスト名を使用する必要があります。

10.4 — redis-cli ユーティリティを使用して、Redis ノードに接続します。

$ ./src/redis-cli -c -h endpoint

10.5 — PING で接続をテストします。

endpoint:6379> PING
	PONG

ステップ 11: フェイルオーバーをトリガーする

これで、Redis クラスターが正常に稼働できる状態になりました。クラスターモードには、ノードが停止した場合にクラスターの自己修復を行う機能があります。この機能をテストするには、手動フェイルオーバーをトリガーします。これにより、マスターのロールを引き継ぐためにリードレプリカが選択された後、フェイルオーバーが実行されます。その結果、新しいマスターに接続できるようになります。それまでの間、新しいレプリカが自動的に追加されるため、クラスターのマスターが 1 つ、レプリカが 2 つの状態が維持されます。

ステップ 10 のエンドポイントを使用して、ノードのロールを確認します。

11.1 — エンドポイントのロールを確認します。

	endpoint:6379> ROLE
	1) "master"
 	...

マスターに接続します。マスターに接続していない場合は、別のエンドポイントを使用します。最大 3 回試すことができます。

マスターノードが見つかったら、次のようにします。

11.2 — いずれかのノードを選択し、[Action] をクリックして、[Failover primary] を選択します。

ステータスを示すメッセージを確認したら、[Continue] をクリックします。いずれかのレプリカが新しいマスターになり、マスターごとのレプリカの数が復元されます。CLUSTER NODES コマンドを実行すると、ノードの状況を確認できます。

ステップ 12: クラスターを削除する

チュートリアル完了後、Redis クラスターが不要になったときに削除する方法について学習します。

Redis クラスターを削除するには、[ElastiCache ダッシュボード] に移動して、次の手順に沿って進めます。

12.1 — 左側のペインで [Redis] を選択します。

これにより、すべての Redis クラスターのリストが表示されます。

12.2 — このチュートリアル用に作成した Redis クラスターを選択します。

12.3 — [削除] をクリックします。

12.4 — 最終的なバックアップを作成するかどうかを尋ねられます。通常の場合は良い考えですが、このチュートリアルでは必要ありません。[いいえ] を選択し、[削除] をクリックします。

クラスターのステータスが [削除中] に変わります。

お疲れ様でした。

クラスターモードが有効な Redis クラスターが作成されました。ノードはアベイラビリティーゾーン間に分散され、自動フェイルオーバーで構成されました。また、Redis クラスターのデプロイのベストプラクティスについても学習しました。

このチュートリアルは役に立ちましたか?

詳細

Redis クラスターの詳細については、ブログ投稿 Redis クラスター 101 を参照してください。 開始方法の詳細、開発者ガイド、技術ブログについては、リソースページを参照してください。

適切なノードサイズを選択する

Redis ノードのサイズを決めるのは簡単ではないかもしれませんが、ニーズに基づいて適切なノードサイズを選択する上で役立つガイドラインが用意されています。

キャッシング戦略

最後に、パフォーマンスと信頼性を向上させるためのキャッシング戦略とベストプラクティスを参照してください。