node-redis无法通过twemproxy连接到redis实例

问题

通过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服务器,都会发生这个错误,所以我非常肯定它与node-redis和twemproxy是如何交互的。 或者根本不需要互动。

我的问题

究竟发生了什么?

背景信息

我有一个简单的testing设置,如下所示:

 +------------------+ | +----+----+ | | | r1 + r2 + | | +----+----+ | | | | | | +---------+ | | |twemproxy| | | +---------+ | | / | \ | | +----+----+----+ | | | aw | aw | aw | | | +----+----+----+ | +------------------+ aw = api worker r1/r2 = redis instance twemproxy = twemproxy 
  • aw的当前nodejs聚集在同一个主机上
  • r1 / r2是同一个主机上的节点实例
  • 节点版本0.10.x
  • 所有三台机器都运行非常稀疏的stream浪文件。 现在分配给每个静态IP的专用networking。 每台机器都可以通过指定端口上的其他机器访问。

经过一番戳之后,我意识到这是因为node_redis尝试在默认情况下调用连接上的“info”命令。

只需修改连接选项以包含no_ready_check: true将解决此问题并通过twemproxy强制连接。