HAproxy для рабов redis

в настоящее время мы используем клиент node_redis для доступа к redis. Мне нужно использовать HAProxy перед рабами redis, которые в моем случае 3 nos. Я установил HAProxy и настроил его для балансировки нагрузки рабов redis. Но когда я попытался создать соединение из клиента node_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 ответов


публикация конфигурации 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

и следующий узел.сценарий 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. Чтобы исправить это, просто измените конфигурацию haproxy, чтобы обеспечить общий режим TCP:

    mode http

to be changed into:

    mode tcp

... и теперь он работает нормально.