Unter Verwendung von HAProxy versuche ich, Rserve (einen Dienst, der auf TCP Socket zum Aufrufen von R-Skripten) lauscht) auf Port 6311 in 2 Knoten (TCP) auszugleichen.
Unten ist meine Konfigurationsdatei. Wenn ich HAProxy starte, läuft es ohne Probleme. Aber wenn ich mich mit den Balanced Nodes verbinde, wird der Fehler unterschritten. Stimmt etwas mit der Konfiguration nicht?
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
Versucht mit unter Frontend-Backend-Art des Balancierens. Gleiches Ergebnis.
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
Nachdem wir uns eine Woche lang um eine Lösung für Load Balance R gekämpft hatten, funktionierte die folgende Lösung (Full Free/Open Source Software Stack).
Wenn mehr Leute darauf verweisen, werde ich einen detaillierten Blog über die Installation und Konfiguration veröffentlichen.
Konnte R-Skriptanforderungen, die über HAProxy TCP Load Balancer) an Rserve gesendet wurden, mit der folgenden Konfiguration ausgleichen. Sie ähnelt der Konfiguration im fraglichen Abschnitt, ist jedoch von Frontend und Backend getrennt.
#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:[email protected]
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
Wichtig ist, Remote-Verbindungen für HAproxy mit dem folgenden Befehl zu aktivieren (NO clear doc in den meisten Fällen
/usr/sbin/setsebool -P haproxy_connect_any 1
Stellen Sie außerdem sicher, dass Remoteverbindungen in Rserve mit dem Parameter "enable remote" in der Rserve-Konfigurationsdatei aktiviert sind.