node.js - 使用 ioRedis 连接到 ElastiCache 时出现随机 SSL 握手错误

标签 node.js ssl redis amazon-elasticache ioredis

我正在尝试使用 ioRedis 连接到从 Node 脚本传输时加密的 ElastiCache 集群。有时我的脚本有效,有时我得到错误:140736319218624:错误:140940E5:SSL例程:ssl3_read_bytes:ssl握手失败:../deps/openssl/openssl/ssl/s3_pkt.c:1216:

这是我的所有代码:

var Redis = require('ioredis');
var nodes = [{
host: 'clustercfg.name.xxxxxx.region.cache.amazonaws.com',
port: '6379',
}];
var cluster = new Redis.Cluster(nodes,{
redisOptions: {
    tls: {}
}});

cluster.set('aws', 'test');
cluster.get('aws', function (err, res) {
    console.log(res);
    if (err) {
        console.error(err)
    }
    cluster.disconnect()
});

最佳答案

我相信 ssl 握手错误是 ioredis 中竞争条件错误的副作用。

过去几天我一直在为同样的问题苦恼(ioredis 版本 4.0.0)。我只是无法将 ioredis 可靠地连接到我们的 elasticache 集群。我会看到同样的间歇性错误。

Error: 140618195700616:error:140940E5:SSL routines:ssl3_read_bytes:ssl handshake failure:../deps/openssl/openssl/ssl/s3_pkt.c:1216:

您可以通过在 Node 环境中设置“DEBUG=ioredis:*”来查看ioredis调试输出。一旦我这样做了,我可以看到当错误发生时,它伴随着几条类似于以下内容的消息:

2018-10-06T18:24:38.287Z ioredis:cluster:connectionPool Disconnect xxx.usw2.cache.amazonaws.com:6379 because the node does not hold any slot

我尝试了node-redis和redis-cluster,它与elasticache配合得很好。

关于node.js - 使用 ioRedis 连接到 ElastiCache 时出现随机 SSL 握手错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52432786/

相关文章:

Redis - 正在加载数据集是 Memory Sport :

javascript - Node JS .shift() 'ing 一个由 const 初始化的数组

javascript - 更新跨项目导出的对象

javascript - 解压zip文件并排除NodeJS中的根目录

iOS:SSL 错误 - 页面未在 WKWebView 中加载但在 Safari 中加载

c# - 使用 JKS 和/或 PFX 证书从 C# 客户端调用 Java Web 服务

javascript - Node.js 中的错误和数据回调参数

docker - 无法访问 qbittorrent docker webui

ruby-on-rails - 编码或序列化 ActiveRecord 对象

Redis 在运行慢速命令时不会阻塞