En utilisant HAProxy, j'essaie d'équilibrer la charge (TCP) Rserve (un service d'écoute dans TCP pour appeler les scripts R) fonctionnant au port 6311 sur 2 nœuds.
Ci-dessous est mon fichier de configuration. Lorsque j'exécute HAProxy, son démarrage sans aucun problème. Mais lorsque je me connecte aux nœuds équilibrés, je tombe en dessous de l'erreur. Quelque chose ne va pas avec la config?
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
Essayé avec une méthode d'équilibrage frontend-backend également. Même résultat.
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
Après avoir lutté pendant une semaine pour une solution pour équilibrer la charge R, la solution ci-dessous (pile logicielle complète gratuite/open source) a fonctionné.
Si plus de personnes font référence à cela, je publierai un blog détaillé sur l'installation de la configuration.
A pu équilibrer la charge des requêtes de script R envoyées à Rserve via HAProxy TCP équilibreur de charge avec la configuration ci-dessous. Assez similaire à la configuration dans la section des questions, mais avec frontend et backend séparés.
#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
L'essentiel est d'activer les connexions à distance pour HAproxy avec la commande ci-dessous (PAS de document clair à ce sujet dans la plupart des cas)
/usr/sbin/setsebool -P haproxy_connect_any 1
Assurez-vous également d'activer les connexions à distance dans Rserve avec le paramètre "enable remote" dans le fichier de configuration de Rserve.