2012-05-10 34 views
7

Korzystamy z klienta node_redis, aby uzyskać dostęp do redycji w chwili obecnej. Muszę użyć HAProxy przed niewolnikami redis, które w moim przypadku to 3 noski. Zainstalowałem HAProxy i skonfigurowałem go tak, aby ładował zbalansowane urządzenia podrzędne. Ale kiedy próbował stworzyć połączenie z node_redis klienta do HAProxy I nie był w stanie stworzyć połączenie i został otrzymuję błądHAproxy dla niewolników 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

Link do listy adresowej pod tym dokładnym pytaniem - https://groups.google.com/d/msg/redis-db/2yELzDSz1y4/hIeFhh7-WIUJ –

Odpowiedz

19

księgowanie HAProxy konfigurację pomogłaby ...

Najbardziej prawdopodobne wyjaśnienie jest haproxy nie jest skonfigurowany do przetwarzania ogólnego ruchu TCP, ale ruch HTTP.

Przykład:

o następującej konfiguracji:

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 

oraz następujące node.js scenariusz:

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

... mamy dokładnie taki sam błąd:

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

Oczekuje się, ponieważ parser protokołu Redis nie rozumie protokołu HTTP. Aby go naprawić, wystarczy zmienić HAProxy konfiguracji wymusić tryb TCP rodzajowe:

mode http 

to be changed into: 

    mode tcp 

... a teraz to działa dobrze.