2012-05-10 17 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構成を変更します。

関連する問題