node-redis не может подключиться к экземпляру redis через twemproxy

Эта проблема

Подключение напрямую через 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. Или не взаимодействовать, в зависимости от обстоятельств.

Мой вопрос

Что, черт возьми, происходит?

Исходная информация

У меня есть простая настройка теста, которая выглядит следующим образом:

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

aw = api worker
r1/r2 = redis instance
twemproxy = twemproxy
  • aw в настоящее время являются nodejs, кластеризованными на одном хосте
  • r1/r2 являются экземплярами узла, снова на том же хосте
  • версия узла 0.10.x
  • все три машины работают с очень редким бродячим файлом. Статические IP-адреса, назначенные каждому на данный момент, частной сети. Каждая машина доступна с любой другой машины по указанным портам.

1 ответ

Решение

После небольшого количества попыток я понимаю, что это объясняется тем, что node_redis пытается вызвать команду "info" при подключении по умолчанию.

Просто изменив параметры подключения, чтобы включить no_ready_check: true решит эту проблему и форсирует соединение через twemproxy.

Другие вопросы по тегам