HAproxy用于Redis从服务器

8

目前我们正在使用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)

1
在这个问题上的邮件列表链接 - https://groups.google.com/d/msg/redis-db/2yELzDSz1y4/hIeFhh7-WIUJ - Sripathi Krishnan
1个回答

21

如果您发布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。要解决这个问题,只需修改haproxy配置以强制使用通用TCP模式:

    mode http

to be changed into:

    mode tcp

...现在它正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接