使用ioredis连接AWS MemoryDB集群遇ClusterAllFailedError问题
解决ioredis连接AWS MemoryDB集群的ClusterAllFailedError问题
你遇到的ClusterAllFailedError: Failed to refresh slots cache超时问题,核心原因是AWS MemoryDB的集群连接规则与普通Redis集群存在差异,结合你的代码,按以下步骤修复:
关键修复点
- 强制启用TLS连接:AWS MemoryDB要求所有集群连接必须使用TLS加密,ioredis默认不开启该选项,需显式配置。
- 调整超时参数:默认超时时间过短,易因网络延迟导致slot缓存刷新失败,需延长连接和缓存刷新的超时阈值。
- 验证网络权限:确认运行代码的环境(EC2/本地机器等)的安全组/防火墙允许访问MemoryDB集群的6379端口,同时MemoryDB的安全组已放行对应来源IP。
修改后的完整代码
const Redis = require('ioredis'); const connection = new Redis.Cluster( [{ host: "clustercfg.jb-bot-dev-memorydb.czxa87.memorydb.ap-south-1.amazonaws.com", port: 6379}], { redisOptions: { password: "memorydb@12345678", // 启用TLS,MemoryDB强制要求 tls: {}, // 延长连接超时时间至10秒 connectTimeout: 10000 }, // 延长slot缓存刷新超时时间至10秒 refreshSlotsCacheTimeout: 10000 } ); connection.on("ready", () => { console.log("Redis Client Ready"); }); connection.on("connect", () => { console.log("Redis Client Connected"); }); connection.on("error", (error) => { console.log("Redis Client Connection Error", error); });
额外说明
- 若在本地环境连接,需确保机器能通过VPN或AWS Direct Connect访问MemoryDB集群(MemoryDB默认仅允许VPC内访问,无法直接从公网连接)。
- AWS云环境内的节点会自动信任MemoryDB的证书,无需额外配置证书路径;若本地环境出现证书错误,可在
tls配置中添加AWS官方CA证书路径。
内容的提问来源于stack exchange,提问作者Tushar Parmar
相关产品推荐
相关产品推荐

