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
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でリモート接続を有効にしてください。