afr*_*111 10 redis node-redis ioredis
我正在构建一个连接到 redis 的 Nodejs 应用程序。我将此与我的本地 redis 实例一起使用。现在,我正在使用ioredisNodejs 应用程序连接到 AWS 中 k8s 中的 Redis 集群。这是我所拥有的。
const Redis = require("ioredis");
this.redis = new Redis({
port: 6379, // Redis port
host: rhost, // Redis host
password: password
});
this.redis.on('connect', () => {
console.log('connected to redis')
})
Run Code Online (Sandbox Code Playgroud)
connected to redis当消息在日志中打印出来时,我似乎成功连接到集群。但是,每次我尝试使用我的 redis 对象时,都会收到 MOVED 错误:
UnhandledPromiseRejectionWarning: ReplyError: MOVED 5011 <ip address>:6379
at parseError (/node_modules/ioredis/node_modules/redis-parser/lib/parser.js:179:12)
at parseType (/node_modules/ioredis/node_modules/redis-parser/lib/parser.js:302:14)
Run Code Online (Sandbox Code Playgroud)
该连接适用于我的本地。然而,在 AWS 中却并非如此。我尝试使用Redis.Cluster对象而不是进行交换Redis,但是在部署应用程序后,应用程序挂起并且连接事件永远不会触发。和事件似乎无限循环close。reconnecting
据我了解,这是集群中节点之间重定向的问题。可能是主/从配置的问题。该错误是 AWS 中的配置问题吗?我需要使用Redis.Cluster对象而不是普通Redis实例吗?修复 MOVED 错误的最佳方法是什么?
Tim*_*Tim 16
该MOVED错误是由于直接使用Redis客户端和ElastiCache(Redis集群模式)的配置端点导致的。new Redis.Cluster([{ host: <cfg-endpoint>])这可以通过使用知道多个分片来解决。
否则,请禁用 Redis 集群模式并使用 ElastiCache 集群的主 (主) dns 名称。即使没有 Redis 集群模式,仍然有故障转移策略(AWS 将在主节点发生故障时替换它),并且您可以将节点部署到多个可用区。
此外,当您启用加密时,您将需要连接到启用了 TLS 的 AWS ElastiCache(tls: {}ioredis 的选项)。
https://aws.amazon.com/blogs/database/work-with-cluster-mode-on-amazon-elasticache-for-redis/
| 归档时间: |
|
| 查看次数: |
29632 次 |
| 最近记录: |