如何解决 Redis(已禁用集群模式)集群失效转移后出现错误“READONLY 您无法对只读副本进行写入”的问题?

上次更新日期:2022 年 6 月 17 日

失效转移后,为什么我在 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 客户端库的指南,在应用程序中启用重试逻辑。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?