Redis sentinel 连接从 nodeJS 超时

Redis sentinel connection is timing out from nodeJS

我正在尝试使用 ioredisnodeJS 连接 redis sentinel 实例。尽管尝试了多个可用选项,但我无法连接 redis sentinel 实例。我们还没有配置哨兵密码。但是,能够使用 StackExchange.Redis.net core 连接相同的 redis sentinel 实例。请在下面找到 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";

"The arguments passed to the constructor are different from the ones you use to connect to a single node"

尝试将 password 替换为 sentinelPassword

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