排查 ioredis 报错Failed to refresh slots cache

数据库NoSQL数据库技术服务知识库
问题现象

用户在使用 Node.js ioredis 连接到 Redis 分片集群,报错如下:

ClusterAllFailedError: Failed to refresh slots cache.
 at tryNode (/root/node_modules/ioredis/built/cluster/index.js:308:31)
 at /root/node_modules/ioredis/built/cluster/index.js:325:21
问题复现

准备如下 Node.js 脚本,实现基本的连接,set key,get key 逻辑:

const Redis = require('ioredis');

// create client
const redis = new Redis.Cluster([
  { host: 'redis-xxxxxxx.redis.ivolces.com', port: 6379 }
], 
{
    slotsRefreshTimeout:300,
    slotsRefreshInterval:1,
    redisOptions: {
      password: "your password",
    },
  }
);
redis.on('connect', () => {
  console.log('successfully connect to redis cluster');
});
redis.on('error', (err) => {
  console.error('An error occurred while connecting to the cluster.:', err);
});
// set a key
redis.set("mykey", "value"); 
// get a key
redis.get("mykey", (err, result) => {
  if (err) {
    console.error(err);
  } else {
    console.log(result); // Prints "value"
  }
});
根因和解决方案

ioredis 可以兼容火山引擎 Redis,出现 ClusterAllFailedError: Failed to refresh slots cache 报错通常有如下两类场景:

  1. 密码错误:在连接时指定的密码错误,导致无法客户端无法连接到 Redis 分片集群
  2. 网络连通性:需要保证客户端与 Redis Cluster 的网络连通性:
  • 如果使用私网地址,那么客户端所在的 ECS 实例与目标 Redis 实例在同一 VPC 网络。
  • ECS 的 IP 地址或客户端 IP 地址是否已加入 Redis 实例的 IP 白名单中。设置白名单的方法,请参见设置白名单
参考文档
0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

所属团队号:
相关资源
如何利用云原生构建 AIGC 业务基石
AIGC即AI Generated Content,是指利用人工智能技术来生成内容,AIGC也被认为是继UGC、PGC之后的新型内容生产方式,AI绘画、AI写作等都属于AIGC的分支。而 AIGC 业务的部署也面临着异构资源管理、机器学习流程管理等问题,本次分享将和大家分享如何使用云原生技术构建 AIGC 业务。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论