HAproxy for redis奴隶

use*_*776 8 load-balancing haproxy redis node.js

我们目前正在使用node_redis客户端访问redis.我需要在redis奴隶面前使用HAProxy,在我的情况下是3个.我安装了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)
Run Code Online (Sandbox Code Playgroud)

Did*_*zia 20

发布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
Run Code Online (Sandbox Code Playgroud)

和以下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);
});
Run Code Online (Sandbox Code Playgroud)

...我们得到了同样的错误:

Error: Redis reply parser error: Error: Protocol error, got "H" as reply type byte
Run Code Online (Sandbox Code Playgroud)

这是预期的,因为Redis协议解析器不理解HTTP.要修复它,只需更改haproxy配置以强制执行通用TCP模式:

    mode http

to be changed into:

    mode tcp
Run Code Online (Sandbox Code Playgroud)

......现在它工作正常.