2017-10-12 8 views
0

Je me bats pour trouver la configuration correcte pour mon haproxy:bâton haproxy à un groupe de serveurs back-end

Je application web Ruby on Rails qui est servi par deux hôtes physiques, chacun ayant 3 travailleurs. Les deux hôtes ont chacun une base de données, et les deux bases de données sont synchronisées en temps réel.

J'essaie de faire en sorte que les sessions restent sur le même hôte, de sorte que les demandes sont toujours équilibrées sur les 3 opérateurs de chaque hôte.

L'objectif est d'éviter que deux demandes consécutives provenant du même client soient envoyées à des hôtes différents.

Ma config ressemble à ceci:

frontend web_front 
    bind *:4100 
    default_backend web_back 


backend web_back 
    cookie SERVERID insert indirect nocache 
    balance roundrobin 

    server host_1_web_1 129.168.0.1:3000 maxconn 1 check cookie SRV_1 
    server host_1_web_2 129.168.0.1:3001 maxconn 1 check cookie SRV_1 
    server host_1_web_3 129.168.0.1:3002 maxconn 1 check cookie SRV_1 

    server host_2_web_1 129.168.0.2:3000 maxconn 1 check cookie SRV_2 
    server host_2_web_2 129.168.0.2:3001 maxconn 1 check cookie SRV_2 
    server host_2_web_3 129.168.0.2:3002 maxconn 1 check cookie SRV_2 

Comme vous pouvez le voir, j'ai mis le cookie de chaque hôte à la même valeur, saut que les demandes seraient charger encore bien équilibrée accross travailleurs, mais maintenant seulement le premier travailleur de chaque hôte semble recevoir des demandes.

Y a-t-il un moyen de contourner cela? Peut-être en utilisant des tables collantes?

Répondre

1

Si je comprends bien les exigences que vous, vous voulez deux niveaux d'équilibrage de charge différentes:
1. équilibrage de charge du serveur en utilisant la persistance de session
2. équilibrage de charge des travailleurs sans persistance de session.

Une solution consisterait à avoir un service du côté serveur à l'écoute des connexions HAProxy et à faire l'équilibre des charges entre les travailleurs.
Mais vous pouvez toujours le faire avec HAProxy en utilisant un back-end factice:

frontend web_front 
    bind *:4100 
    default_backend web_back 

backend web_back 
    cookie SERVERID insert indirect nocache 
    balance roundrobin 
    server server1 127.0.0.1:3001 cookie SRV_1 
    server server2 127.0.0.1:3002 cookie SRV_2 

listen lt_srv1 
    bind 127.0.0.1:3001 
    server host_1_web_1 129.168.0.1:3000 check 
    server host_1_web_2 129.168.0.1:3001 check 
    server host_1_web_3 129.168.0.1:3002 check 

listen lt_srv2 
    bind 127.0.0.1:3002 
    server host_2_web_1 129.168.0.2:3000 check 
    server host_2_web_2 129.168.0.2:3001 check 
    server host_2_web_3 129.168.0.2:3002 check 
+0

Oui, mais en définissant une valeur différente, chaque client collera au même serveur. Je voudrais que l'équilibrage de charge ait lieu entre les trois serveurs d'un hôte. – ste26054

+0

Ok, je reçois ce que vous voulez maintenant, j'édite ma réponse. – MoEmEn

+0

Merci, ça a fonctionné parfaitement! – ste26054