我想处置重定向到分片主节点而不是 Amazon ElastiCache for Redis 中的副本节点的 Redis 客户端读取请求。
简短描述
ElastiCache for Redis 集群中的任何节点都可以接收来自 Redis 客户端的查询。当客户端向副本节点发送读写查询时,该节点会检查该请求是单键还是多键操作。单键或多键操作必须属于分片的同一个哈希槽。默认情况下,启用集群模式的副本节点将所有读写请求重定向到主节点。读写请求重定向到属于键的哈希槽的分片的权威主节点。如果分片属于哈希槽并且先发出 readonly 命令,则副本节点仅完成读取请求。仅当客户端先发出 readonly 命令时,副本节点才会处理读取请求。如果未先发送 readonly 请求,则副本节点会将请求重定向到主节点。
解决方法
要确保副本节点读取您的 Redis 客户端读取请求,请完成以下步骤:
-
登录到您的集群,然后设置一个键。示例:
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>
-
连接到副本节点。确保发出 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 命令。