我正在处理来自ioredis和Elasticache的ClusterAllFailedError: Failed to refresh slots cache.
问题。这是我的集群配置
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
。还有人处理过这个问题吗?
谢谢。
发布于 2020-03-14 14:50:14
下面这些对我来说很有用。
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
(通常是私有子网)和Security Group
。当您从任何计算程序(Lambda、EC2等)运行上述代码时,您需要确保
ElastiCache
(将计算放在一个子网中,该子网可以在同一个VPC
中与ElastiCache
的子网通信。如果计算和Elasticache
位于不同的VPC上,请确保它们之间启用VPC窥视。)Security Group
,NACL
允许从计算Subnet
连接到ElastiCache
端口(6379
是默认的)IAM Role
(EC2实例配置文件、Lambda角色等)具有对ElastiCache
的适当访问权。如果在EC2实例上运行,请确保代码使用在EC2实例配置文件中分配的角色的临时凭据。发布于 2020-07-24 14:57:23
这适用于我,但使用的是小黑客,因为我在类型记录中使用它,在将null传递给期待NodeJS.ErrnoException
的回调函数的第一个参数时遇到了问题,并且不允许使用任何类型(由于eslint no-explicit-any
规则)。
我在dnsLookup上面使用了@ts-expect-error指令
// @ts-expect-error this will ignore error
dnsLookup: (address, callback) => callback(null, address),
发布于 2022-08-10 04:20:02
在这里尝试任何解决方案之前,一旦验证您正在创建启用集群模式的集群,这件事对我是有效的!
这是一个附加的截图。
https://stackoverflow.com/questions/57350961
复制相似问题