2012-05-10 7 views
7

Wir verwenden den Knoten "node_redis", um derzeit auf das Redis zu zugreifen. Ich muss HAProxy vor redis Sklaven verwenden, was in meinem Fall 3 nos ist. Ich habe den HAProxy installiert und konfiguriert, um die Redis-Slaves auszugleichen. Aber als ich versuchte Verbindung vom node_redis Client zu erstellen, um die HAProxy ich nicht in der Lage war, die Verbindung zu erstellen und war immer ein FehlerHAproxy für Redis-Slaves

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 zu Mailingliste zu dieser genauen Frage - https://groups.google.com/d/msg/redis-db/2yELzDSz1y4/hIeFhh7-WIUJ –

Antwort

19

Buchen der haproxy Konfiguration geholfen hätte ...

Die meisten wahrscheinlich Erklärung ist haproxy ist nicht konfiguriert, generischen TCP-Verkehr, sondern HTTP-Verkehr zu verarbeiten.

Beispiel:

Mit folgenden Konfiguration:

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 

und die folgenden node.js Skript:

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

... wir genau die gleiche Fehlermeldung erhalten:

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

Es wird erwartet, weil der Redis-Protokollparser HTTP nicht versteht. es zu beheben, ändern Sie einfach die haproxy Konfiguration einen generischen TCP-Modus zu erzwingen:

mode http 

to be changed into: 

    mode tcp 

... und jetzt funktioniert es gut.