Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

node-redis can't connect to redis instance over twemproxy

The Problem

Connecting directly through redis-cli to my twemproxy will correctly proxy me over to redis without any issues/disconnects. However, when I use node-redis to connect to twemproxy I get the following error:

[Error: Redis connection gone from end event.]

Trace is as follows:

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)

This error occurs whether or not the redis-server is even running, so I am pretty sure it has to do with how node-redis and twemproxy are interacting. Or not interacting, as the case may be.

My Question

Just what the heck is happening?

Background Information

I've got a simple test setup that is as follows:

+------------------+
|   +----+----+    |
|   | r1 + r2 +    |
|   +----+----+    |
|     |     |      |
|   +---------+    |
|   |twemproxy|    |
|   +---------+    |
|    /   |   \     |  
| +----+----+----+ |
| | aw | aw | aw | |
| +----+----+----+ |
+------------------+

aw = api worker
r1/r2 = redis instance
twemproxy = twemproxy
  • the aw's are currently nodejs clustered on the same host
  • r1/r2 are instances of node, again on the same host
  • node version 0.10.x
  • all three machines are running with very sparse vagrant file. Static IPs assigned to each one for now, private network. Each machine is reachable from every other machine on the specified ports.
like image 788
Angelo R. Avatar asked Dec 25 '22 09:12

Angelo R.


1 Answers

After a bit of poking, I realize it is because node_redis attempts to call the "info" command on connection on default.

Simply modifying the connection options to include no_ready_check: true will solve this issue and force the connection through twemproxy.

like image 134
Angelo R. Avatar answered Dec 28 '22 11:12

Angelo R.