我正在处理 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 ElastiCacheTLS 聚类和 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 实例配置文件中分配的角色的临时凭证。

  • 评论关闭
    IT序号网

    微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!