如何处置重定向到分片主节点而不是 ElastiCache for Redis 中的副本节点的 Redis 客户端读取请求?

1 分钟阅读
0

我想处置重定向到分片主节点而不是 Amazon ElastiCache for Redis 中的副本节点的 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>
    

    **注意:**当 Redis 集群客户端无法处理对主节点的重定向请求时,就会出现前面示例中显示的 MOVED 错误。有关 MOVED 错误的更多信息,请参阅 Redis 网站上的 MOVED 重定向

    示例:
    **注意:**以下示例所示为先发送的 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 官方已更新 1 年前