node.js - 使用 ioRedis 连接到 ElastiCache 时出现随机 SSL 握手错误
问题描述
我正在尝试使用 ioRedis 从节点脚本连接到在传输过程中加密的 ElastiCache 集群。有时我的脚本有效,有时我得到Error: 140736319218624:error:140940E5:SSL routines:ssl3_read_bytes:ssl handshake failure:../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 集群。我会看到同样的间歇性错误。
错误:140618195700616:错误:140940E5:SSL 例程:ssl3_read_bytes:ssl 握手失败:../deps/openssl/openssl/ssl/s3_pkt.c:1216:
您可以通过在节点环境中设置“DEBUG=ioredis:*”来查看 ioredis 调试输出。一旦我这样做了,我可以看到当错误发生时,它伴随着几条类似于以下的消息:
2018-10-06T18:24:38.287Z ioredis:cluster:connectionPool Disconnect xxx.usw2.cache.amazonaws.com:6379 因为节点没有任何插槽
我尝试了 node-redis 和 redis-clustr 它与 elasticache 配合得很好。
推荐阅读
- nim-lang - 如何使 Nim 编译和运行输出静音?
- reactjs - 如何使用 Material UI 和 React Hook Forms 隐藏/取消隐藏密码
- python - 需要将日期时间转换为 dd/mm/yyyy
- javascript - addEventListener 使用 Javascript 创建待办事项列表的问题
- google-maps - 显示地球另一端的谷歌地图
- r - R geom_bar 与每个条柱的子集的平均值
- c++ - 如果忽略结果,则不会在编译时调用 Consexpr 函数
- python - 有没有办法在不改变 Path 变量的情况下使用 MinGW?
- jquery - 简单的 jQuery 和 AJAX 教程示例
- python - 使用python为1列中的相同值创建多个csv