我想排除在 Amazon ElastiCache for Redis 自设计集群中进行失效转移后收到的 READONLY 错误。
简短描述
如果主节点失效转移到您的 ElastiCache 自设计集群中的副本节点,则副本节点将成为主节点。这样即可处理传入的请求。当您在应用程序中使用节点端点而不是集群的主端点时,就会发生 READONLY 错误。此外,当应用程序中的 DNS 缓存将流量路由到旧的主节点时,也会发生此错误。
解决方法
要解决您已禁用集群模式的 ElastiCache for Redis 自设计集群中的 READONLY 错误,请完成以下步骤:
检查集群模式是否已禁用
打开 ElastiCache 控制台,然后选择 Redis 集群。检查集群的集群模式是否已禁用。有关更多信息,请参阅如何在 ElastiCache for Redis 中处置重定向到分片主节点而不是副本节点的 Redis 客户端读取请求?
检查端点
确保使用主端点而不是节点端点。要检查写入命令针对的是否是主节点,请使用以下方法之一:
使用 redis-cli
-
使用主端点的 redis-cli 连接到集群。
-
设置密钥,然后读取密钥。
示例:
set key1 "hello"
OK
-
确认密钥设置正确。
示例:
get key1
"hello"
检查 DNS 设置
为防止 DNS 缓存出现问题,请在您的应用程序中启用重试逻辑。确保遵循所用 Redis 客户端库的指南。
检查传入的命令
要检查传入的命令,请使用 MONITOR 命令。有关更多信息,请参阅 Redis 网站上的 MONITOR。要启用 MONITOR,请使用 redis-cli 连接到集群。MONITOR 命令会列出集群节点的所有传入命令。
**注意:**MONITOR 命令是很耗资源,可能会严重降低节点性能。建议在故障排除时,除非万不得已,否则不要使用此命令。