Redis クライアントの読み取りリクエストが、ElastiCache for Redis のレプリカノードではなくシャードのプライマリノードにリダイレクトされる問題を解決する方法を教えてください。

所要時間1分
0

Redis クライアントの読み取りリクエストが Amazon ElastiCache for Redis のレプリカノードではなくシャードのプライマリノードにリダイレクトされる問題を解決したいと考えています。

簡単な説明

ElastiCache for Redis クラスター内のどのノードでも Redis クライアントからクエリを受信できます。クライアントがレプリカノードに読み取り/書き込みクエリを送信すると、ノードはリクエストが単一キー操作かマルチキー操作かを確認します。シングルキーまたはマルチキー操作は、シャードの同じハッシュスロットに属している必要があります。デフォルトでは、クラスターモードがオンになっているレプリカノードは、すべての読み取りおよび書き込みリクエストをプライマリノードにリダイレクトします。読み取りおよび書き込みリクエストは、キーのハッシュスロットに属するシャードの権限のあるプライマリノードにリダイレクトされます。シャードがハッシュスロットに属していて、readonly コマンドが最初に開始された場合、レプリカノードは読み取り要求のみを完了します。レプリカノードは、クライアントによって最初に readonly コマンドが発行された場合にのみ読み取り要求を処理します。readonly リクエストが最初に送信されない場合、レプリカノードはリクエストをプライマリノードにリダイレクトします。

解決策

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. レプリカノードに接続します。必ず readonly コマンドを実行してください。例: **注:**次の例は、最初に送信されない readonly コマンドで、リクエストがプライマリノードにリダイレクトされることを示しています。

    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 エラーについての詳細は、「MOVED リダイレクト」 (Redis ウェブサイト) を参照してください。

    例:
    **注:**次の例は、最初に送信される readonly コマンドを示しています。これにより、レプリカノードはリクエストを処理でき、リクエストをプライマリノードにリダイレクトしなくても済みます。

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

**注:**クライアントが初めてノードに接続するときは、必ず readonly コマンドを発行してください。このコマンドは、クライアントが同じノードからキーを読み取るまでのみ有効です。クライアントが同じシャードまたは異なるシャード内の別のレプリカノードに接続する場合は、readonly コマンドが発行されていることを確認してください。

AWS公式
AWS公式更新しました 8ヶ月前
コメントはありません

関連するコンテンツ