失效转移后,为什么我在 Amazon ElastiCache for Redis(已禁用集群模式)集群中收到 “READONLY 您无法对只读副本进行写入”错误提示?
简短描述
如果主节点已失效转移到您的 Amazon ElastiCache 集群中的副本节点,则副本将扮演主节点的角色来处理传入的请求。但是,在以下情况下,您会收到 READONLY 错误:
- 您在应用程序中使用的是节点端点,而非集群的主端点。
-或者-
- 应用程序节点中的 DNS 缓存将流量路由到旧的主节点。
解决方法
1. 验证集群是否已禁用集群模式。为此,请执行以下操作:
打开 ElastiCache 控制台,然后选择 Redis 集群。验证集群的集群模式是否已关闭。
注意:如果集群模式已开启,请参阅我正在使用 ElastiCache 或 Redis。为什么 Redis 客户端读取请求总是从分片的主节点读取或重定向到该节点?
2. 确认您正在向主端点而非节点端点发送写入命令。要验证写入命令是否会发送到主节点,请执行以下操作之一:
选项 1
使用 redis-cli 连接到 Redis 集群,然后针对更新的密钥运行 get key 命令。然后,验证命令输出,以验证密钥值是否在上一个命令之后更新。
例如,以下命令将 key1 值设置为 hello:
set key1 "hello"
OK
要验证密钥设置是否正确,请运行 get 命令:
get key1
"hello"
选项 2
使用 redis-cli 连接到 Redis 集群,然后运行 MONITOR 命令。这会列出所有进入集群的命令。请记住,运行单个 MONITOR 客户端可能会使吞吐量减少 50% 以上。
3. 为避免 DNS 缓存问题,请遵循应用程序使用的 Redis 客户端库的指南,在应用程序中启用重试逻辑。