web-dev-qa-db-ja.com

HAProxy Loadbalancing TCPトラフィック

HAProxyを使用して、2つのノードのポート6311で実行されているRserve(Rスクリプトを呼び出すためのTCPソケットをリッスンするサービス)の負荷分散)を試みています。

以下は私の設定ファイルです。 HAProxyを実行すると、問題なく統計が表示されます。しかし、バランスの取れたノードに接続すると、エラーが発生します。構成に何か問題がありますか?

Handshake failed: expected 32 bytes header, got -1

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    tcp
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    #option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000


listen haproxy_rserve
        bind *:81
        mode tcp
        option tcplog
        timeout client  10800s
        timeout server  10800s
        balance leastconn
        server rserve1 rserveHostName1:6311
        server rserve2 rserveHostName2:6311

listen stats proxyHostName:8080
    mode http
    stats enable
    stats realm Haproxy\ Statistics 
    stats uri /haproxy_stats
    stats hide-version
    stats auth admin:password

以下のフロントエンド-バックエンドのバランス方法も試してみました。同じ結果。

frontend haproxy_rserve
    bind *:81
    mode tcp
    option tcplog
    timeout client  10800s
    default_backend rserve

backend rserve
    mode tcp
    option tcplog
    balance leastconn
    timeout server  10800s  
    server rserve1 rserveHostName1:6311
    server rserve2 rserveHostName2:6311 
8
Anand

Rのロードバランスをとるソリューションに1週間苦労した後、以下の(完全なフリー/オープンソースソフトウェアスタック)ソリューションが機能しました。

より多くの人がこれを参照している場合、インストールから構成までの詳細なブログを投稿します。

HAProxy TCPロードバランサーを介してRserveに着信するRスクリプトリクエストを、以下の構成でロードバランシングできました。質問セクションの構成にかなり似ていますが、フロントエンドとバックエンドが分離されています。

#Load balancer stats page access at hostname:8080/haproxy_stats
listen stats <load_balancer_hostname>:8080
    mode http
    log global
    stats enable
    stats realm Haproxy\ Statistics 
    stats uri /haproxy_stats
    stats hide-version
    stats auth admin:admin@rserve

frontend rserve_frontend
    bind *:81
    mode tcp
    option tcplog
    timeout client  1m
    default_backend rserve_backend

backend rserve_backend
    mode tcp
    option tcplog
    option log-health-checks
    option redispatch
    log global
    balance roundrobin
    timeout connect 10s
    timeout server 1m   
    server rserve1 <rserve hostname1>:6311 check
    server rserve2 <rserve hostname2>:6311 check
    server rserve2 <rserve hostname3>:6311 check

重要なことは、以下のコマンドを使用してHAproxyのリモート接続を有効にすることです(ほとんどの場合、これに関する明確なドキュメントはありません)

/usr/sbin/setsebool -P haproxy_connect_any 1

また、Rserve構成ファイルの「リモートを有効にする」パラメータを使用して、Rserveでリモート接続を有効にしてください。

17
Anand