我正在处理 ClusterAllFailedError: Failed to refresh slots cache.来自 ioredis 和 Elasticache 的问题。这是我的集群配置
const clusterOptions = {
enableReadyCheck: true,
retryDelayOnClusterDown: 300,
retryDelayOnFailover: 1000,
retryDelayOnTryAgain: 3000,
slotsRefreshTimeout: 200000000000000,
clusterRetryStrategy: (times) => Math.min(times * 1000, 10000),
dnsLookup: (address, callback) => callback(null, address),
scaleReads: 'slave',
showFriendlyErrorStack: true,
redisOptions: {
keyPrefix: config.queue.prefix,
autoResubscribe: true,
autoResendUnfulfilledCommands: true
}
}
const redisClientInstance = new Redis.Cluster([{ host: '', port: ''}], clusterOptions);
但是尝试访问 Redis 总是会导致
Failed refresh slots cache .其他人处理过这个问题吗?
谢谢你。
请您参考如下方法:
以下对我有用。
Redis版本 : 5.0.4 在 AWS ElastiCache与 TLS 聚类和 AUTH启用。
ioredis 版本 : 4.16.0
连接代码:
const redis = new Redis.Cluster(
[{ "host": <ELASTI_CACHE_CONFIGURATION_ENDPOINT> }], {
dnsLookup: (address, callback) => callback(null, address),
redisOptions: {
tls: true,
password: <ELASTI_CACHE_REDIS_AUTH>
}
});
当您启动
ElastiCache ,您需要指定一个或多个
Subnet Group (通常是私有(private)子网)和
Security Group .当您从任何计算(Lambda、EC2 等)运行上述代码时,您需要确保以下内容
ElastiCache可以从您的 Compute 访问(将计算放在一个子网中,该子网可以与同一 ElastiCache 中的 VPC 的子网通信。如果计算和 Elasticache 位于不同的 VPC 上,请确保它们之间启用了 VPC 对等互连。) Security Group , NACL允许连接到 ElastiCache来自您的计算的端口(6379 是默认值)Subnet IAM Role (EC2 实例配置文件、Lambda 角色等)具有对 ElastiCache 的适当访问权限.如果您在 EC2 实例上运行,请确保您的代码使用在 EC2 实例配置文件中分配的角色的临时凭证。 



