首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ioredis - ClusterAllFailedError:未能刷新时隙缓存

ioredis - ClusterAllFailedError:未能刷新时隙缓存
EN

Stack Overflow用户
提问于 2019-08-04 23:50:32
回答 3查看 15.2K关注 0票数 11

我正在处理来自ioredis和Elasticache的ClusterAllFailedError: Failed to refresh slots cache.问题。这是我的集群配置

代码语言:javascript
运行
复制
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。还有人处理过这个问题吗?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-03-14 14:50:14

下面这些对我来说很有用。

Redis版本:5.0.4在AWS ElastiCache集群上启用TLSAUTH

ioredis版本:4.16.0

连接代码:

代码语言:javascript
运行
复制
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 (通常是私有子网)和Security Group。当您从任何计算程序(Lambda、EC2等)运行上述代码时,您需要确保

  • 可以从计算中找到ElastiCache (将计算放在一个子网中,该子网可以在同一个VPC中与ElastiCache的子网通信。如果计算和Elasticache位于不同的VPC上,请确保它们之间启用VPC窥视。)
  • 确保Security GroupNACL允许从计算Subnet连接到ElastiCache端口(6379是默认的)
  • 最后,确保计算可以假定IAM Role(EC2实例配置文件、Lambda角色等)具有对ElastiCache的适当访问权。如果在EC2实例上运行,请确保代码使用在EC2实例配置文件中分配的角色的临时凭据。
票数 8
EN

Stack Overflow用户

发布于 2020-07-24 14:57:23

这适用于我,但使用的是小黑客,因为我在类型记录中使用它,在将null传递给期待NodeJS.ErrnoException的回调函数的第一个参数时遇到了问题,并且不允许使用任何类型(由于eslint no-explicit-any规则)。

我在dnsLookup上面使用了@ts-expect-error指令

代码语言:javascript
运行
复制
    // @ts-expect-error this will ignore error
    dnsLookup: (address, callback) => callback(null, address),
票数 0
EN

Stack Overflow用户

发布于 2022-08-10 04:20:02

在这里尝试任何解决方案之前,一旦验证您正在创建启用集群模式的集群,这件事对我是有效的!

这是一个附加的截图。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57350961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档