排查 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
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论