2012-05-10 3 views
7

우리는 현재 redis에 액세스하기 위해 node_redis 클라이언트를 사용하고 있습니다. 제 경우에는 3 개의 노즈가있는 redis 노예 앞에 HAProxy를 사용해야합니다. 나는 HAProxy를 설치하고 redis 노예의로드 밸런스를 설정했습니다. 하지만 내가 연결을 만들 수 없었던 HAProxy에 node_redis 클라이언트 연결을 만들려고하고redis 노예를위한 HAproxy

... 가장을 오류

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

이 정확한 질문에 대한 메일 링리스트 링크 - https://groups.google.com/d/msg/redis-db/2yELzDSz1y4/hIeFhh7-WIUJ –

답변

19

도움이 것 haproxy 구성을 게시을 받고 때 haproxy는 일반 TCP 트래픽이 아니라 HTTP 트래픽을 처리하도록 구성되어 있습니다.

예 :

다음과 같은 구성으로

:

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 

다음과 같은 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); 
}); 

... 우리가 똑같은 오류가 발생합니다 :

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

Redis 프로토콜 파서가 HTTP를 인식하지 못하기 때문에 예상됩니다.

mode http 

to be changed into: 

    mode tcp 

을 ... 지금은 잘 작동 : 는 문제를 해결하려면, 단지 일반적인 TCP 모드를 적용 할 haproxy 구성을 변경합니다.