2012-05-10 20 views
7

Estamos utilizando el cliente node_redis para acceder al redis en este momento. Necesito usar HAProxy frente a los esclavos redis, que en mi caso son 3 nos. Instalé el HAProxy y lo configuré para equilibrar la carga de los esclavos redis. Pero cuando traté de crear conexión desde el cliente node_redis a la HAProxy yo no era capaz de crear la conexión y estaba recibiendo un error deHAproxy para esclavos redis

Error: Redis reply parser error: Error: Protocol error, got "H" as reply type byte 
at HiredisReplyParser.execute (/home/user1/doosra/node-exp/node_modules/redis/lib/parser/hiredis.js:32:31) 
at RedisClient.on_data (/home/user1/doosra/node-exp/node_modules/redis/index.js:440:27) 
at Socket.<anonymous> (/home/user1/doosra/node-exp/node_modules/redis/index.js:70:14) 
at Socket.emit (events.js:67:17) 
at TCP.onread (net.js:347:14) 
+1

Enlace a la lista de distribución de esta pregunta exacta - https://groups.google.com/d/msg/redis-db/2yELzDSz1y4/hIeFhh7-WIUJ –

Respuesta

19

Publicación de la configuración haproxy habría ayudado ...

La mayor parte La explicación probable es que haproxy no está configurado para procesar tráfico TCP genérico sino tráfico HTTP.

Ejemplo:

con la siguiente configuración:

global 
    daemon 
    maxconn 256 

defaults 
    mode http 
    timeout connect 5000ms 
    timeout client 50000ms 
    timeout server 50000ms 

frontend redis 
    bind *:1521 
    default_backend servers 

backend servers 
    server R1 127.0.0.1:6379 maxconn 1000 

y el siguiente script Node.js:

var redis = require('redis') 
var redis_client = redis.createClient(1521, 'localhost'); 
redis_client.get('key', function(e,o) { 
    console.log("return "+e+o); 
}); 

... obtenemos el mismo error exacto:

Error: Redis reply parser error: Error: Protocol error, got "H" as reply type byte 

Se espera, porque el analizador del protocolo Redis no entiende HTTP. Para solucionarlo, simplemente alterar la configuración haproxy para hacer cumplir un modo TCP genérico:

mode http 

to be changed into: 

    mode tcp 

... y ahora funciona bien.

Cuestiones relacionadas