2012-05-10 33 views
7

Şu anda redislere erişmek için node_redis istemcisini kullanıyoruz. Benim durumumda 3 nos olan redis köle önünde HAProxy kullanmam gerekiyor. HAProxy'yi kurdum ve redis slave'leri dengelemek için onu yapılandırdım. Ama bağlantı oluşturmak mümkün değildi HAProxy için node_redis müşteriden bağ kurmaya çalışan veRedis slave'leri için HAproxy

... çoğu hata

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

Bu tam sorudaki posta listesine bağlantı - https://groups.google.com/d/msg/redis-db/2yELzDSz1y4/hIeFhh7-WIUJ –

cevap

19

yardım ederdi HAProxy yapılandırmayı Gönderme başlamıştı zaman olası açıklama haproxy, genel TCP trafiğini ancak HTTP trafiğini işlemek için yapılandırılmamış.

Örnek:

aşağıdaki yapılandırma ile

:

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 

ve aşağıdaki node.js komut dosyası:

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

... biz aynı hatanın tam olsun:

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

Redis iletişim kuralı HTTP'yi anlamadığı için bekleniyor.

mode http 

to be changed into: 

    mode tcp 

... ve şimdi gayet iyi çalışıyor: düzeltmek için, sadece genel bir TCP modu uygulamak için HAProxy yapılandırmayı değiştirmek.