问题
通过 redis-cli 直接连接到我的 twemproxy 将正确地将我代理到 redis,而不会出现任何问题/断开连接。但是,当我使用 node-redis 连接到 twemproxy 时,出现以下错误:
[Error: Redis connection gone from end event.]
跟踪如下:
Error: Ready check failed: Redis connection gone from end event.
at RedisClient.on_info_cmd (/home/vagrant/tests/write-tests/node_mo
dules/redis/index.js:368:35)
at Command.callback (/home/vagrant/tests/write-tests/node_modules/r
edis/index.js:418:14)
at RedisClient.flush_and_error (/home/vagrant/tests/write-tests/nod
e_modules/redis/index.js:160:29)
at RedisClient.connection_gone (/home/vagrant/tests/write-tests/nod
e_modules/redis/index.js:474:10)
at Socket.<anonymous> (/home/vagrant/tests/write-tests/node_modules
/redis/index.js:103:14)
at Socket.EventEmitter.emit (events.js:117:20)
at _stream_readable.js:919:16
at process._tickCallback (node.js:419:13)
无论 redis-server 是否正在运行,都会发生此错误,因此我很确定它与 node-redis 和 twemproxy 的交互方式有关。或者不互动,视情况而定。
我的问题
到底发生了什么?
背景资料
我有一个简单的测试设置,如下所示:
+------------------+
| +----+----+ |
| | r1 + r2 + |
| +----+----+ |
| | | |
| +---------+ |
| |twemproxy| |
| +---------+ |
| / | \ |
| +----+----+----+ |
| | aw | aw | aw | |
| +----+----+----+ |
+------------------+
aw = api worker
r1/r2 = redis instance
twemproxy = twemproxy
- aw 当前是 nodejs 集群在同一主机上
- r1/r2 是节点的实例,同样在同一主机上
- 节点版本 0.10.x
- 所有三台机器都运行非常稀疏的流浪文件。暂时分配给每个人的静态 IP,专用网络。每台机器都可以从指定端口上的所有其他机器访问。