ElastiCache for Redis を使用しています。Redis クライアントの読み込みリクエストが常にシャードのマスターノードから読み取られるか、シャードのプライマリノードにリダイレクトされる理由は何ですか?

最終更新日: 2020 年 7 月 9 日

Amazon ElastiCache for Redis を使用しています。Redis クライアントの読み込みリクエストが常にシャードのマスターノードから読み取られるか、シャードのプライマリノードにリダイレクトされる理由は何ですか?

解決方法

Redis クラスターのどのノードも、Redis クライアントからクエリを受信できます。クライアントがレプリカノードに読み取り/書き込みクエリを送信すると、ノードはリクエストを分析して、シャードの同じハッシュスロットに属する単一のキーまたは複数キーのオペレーションであるかどうかを確認します。クラスターモードが有効なクラスターのレプリカノードでのデフォルト動作では、すべてのクライアントの読み取り/書き込みリクエストが、キーのハッシュスロットに属するシャードで権限を持っているマスターノードにリダイレクトされます。レプリカノードは、そのシャードがハッシュスロットに属していて、クライアントによって読み取り専用のコマンドが開始された場合にのみ、読み取りリクエストを処理します。 つまり、リクエストの前にクライアントによって読み取り専用が発行された場合にのみ、レプリカノードがリクエストを処理します。それ以外の場合、リクエストはハッシュスロットが属するシャードのプライマリノードにリダイレクトされます。

1.    クラスターにログインしてキーを設定します。

172.31.21.72:6379> set key8 "This is testing for readonly"
-> Redirected to slot [13004] located at 172.31.21.72:6379
OK
172.31.21.72:6379>

2.    レプリカノードに接続します。

次の例では、読み取り専用コマンドは送信されず、リクエストはプライマリノードにリダイレクトされます。

172.31.30.175:6379> info replication
 # Replication
 role:slave
 master_host:172.31.21.72
 master_port:6379
 master_link_status:up
 172.31.30.175:637> CLUSTER KEYSLOT key8
 (integer) 13004 
 172.31.30.175:637> get key8
 (error) MOVED 13004 172.31.21.72:6379
 172.31.30.175:637> get key8
 -> Redirected to slot [13004] located at 172.31.21.72:6379
 "This is testing for readonly"
 172.31.21.72:6379>

注意: 前述の例で示した MOVED エラーは、Redis クラスタークライアントがクラスター対応ではなく、プライマリノードへのリダイレクトリクエストを処理できない場合に発生します。MOVED エラーの詳細については、Redis.io ウェブサイトの Redis Cluster Specification - Redirection and resharding を参照してください。

次の例では、読み取り専用コマンドが最初に送信されるため、レプリカノードはプライマリノードにリダイレクトする代わりにリクエストを処理します。

172.31.30.175:6379> readonly
OK
172.31.30.175:6379> get key8
"This is testing for readonly"
172.31.30.175:6379>

この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合