【发布时间】:2022-01-06 00:32:58
【问题描述】:
我已经启动了一个在集群模式下运行的 AWS ElastiCache redis 实例,它目前有 1 个分片和 2 个节点
为了从我的本地机器连接到它,我使用我的 SSH 配置文件打开了一个 SSH 隧道
Host myRedisTunnel
HostName 1.2.3.4
...
LocalForward 6378 5.6.7.8:6379
隧道正常工作,我可以成功连接到我的 VPC
$ ssh myRedisTunnel
Welcome to Ubuntu 18.04.6 LTS (GNU/Linux 5.4.0-1060-aws x86_64)
...
在打开我的隧道并将 -c 作为集群模式的参数传递后,我可以通过 redis-cli 在本地连接到 redis 集群
$ redis-cli -c -h localhost -p 6378
localhost:6378> ping
PONG
但是当我尝试对 nodejs 使用 redis 时,它不会连接,它只是超时,我是否缺少一些配置设置,或者实际上无法通过隧道连接到我的远程 redis?
const { createCluster } = require('redis')
const client = createCluster({
rootNodes: [
{ url: 'redis://localhost:6378' }
]
})
await client.connect()
const res = await client.ping()
console.log({ res })
Error: Connection timeout
at Socket.<anonymous> (node_modules/@node-redis/client/dist/lib/client/socket.js:163:124)
at Object.onceWrapper (node:events:513:28)
at Socket.emit (node:events:394:28)
at Socket._onTimeout (node:net:486:8)
at listOnTimeout (node:internal/timers:557:17)
at processTimers (node:internal/timers:500:7)
我已经为 redis 尝试了几个 nodejs 客户端,并且它们都以相同的方式超时,所以我知道问题必须是我的 nodejs redis 客户端配置中的配置设置错误 - 或者它有一些东西只有一个redis ip地址可以通过隧道访问,除非我为每个人打开隧道,否则集群的所有其余部分都可能无法访问。我不知道如何在开发中模拟我的生产环境以便我可以编写代码。
【问题讨论】:
标签: node.js amazon-web-services redis amazon-elasticache