簡體   English   中英

用於Redis奴隸的HAproxy

[英]HAproxy for redis slaves

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

發布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

...現在工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM