Redis 哨兵连接从 nodeJS 超时

时间:2021-06-21 17:31:05

标签: node.js redis stackexchange.redis redis-sentinel ioredis

我正在尝试使用 redis sentinelnodeJS 连接 ioredis 实例。尽管尝试了多个可用选项,但仍无法连接 redis 哨兵实例。我们还没有配置哨兵密码。但是,能够使用 .net coreStackExchange.Redis 连接同一个 redis 哨兵实例。请在下面找到nodeJS代码,

import { AppModule } from './app.module';
import IORedis from 'ioredis';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  const ioredis = new IORedis({
    sentinels: [
      { host: 'sentinel-host-1' },
      { host: 'sentinel-host-2' },
      { host: 'sentinel-host-3' },
    ],
    name: 'mastername',
    password: 'password',
    showFriendlyErrorStack: true,
  });
  try {
    ioredis.set('foo', 'bar');
  } catch (exception) {
    console.log(exception);
  }
  await app.listen(3000);
}
bootstrap();

我们得到的错误是,

[ioredis] Unhandled error event: Error: connect ETIMEDOUT
node_modules\ioredis\built\redis\index.js:317:37)
    at Object.onceWrapper (node:events:475:28)
    at Socket.emit (node:events:369:20)
    at Socket._onTimeout (node:net:481:8)
    at listOnTimeout (node:internal/timers:557:17)
    at processTimers (node:internal/timers:500:7)

.net core 使用的连接字符串如下,

Redis_Configuration = "host-1,host-2,host-3,serviceName=mastername,password=password,abortConnect=False,connectTimeout=1000,responseTimeout=1000";

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

回答这个是为了他人的利益。一切都很好,但是这个 nodeJS 包正在将 redis 实例解析为我无法从本地访问的私有 IP。因此,必须将它放在子网组上并使其工作。但是,仅供参考 - .net core 包无法解析为私有 IP,因此我能够从本地访问实例。