Équilibrage de charge (HAProxy ou autre) - Sessions collantes
je travaille à étendre mon application à plusieurs serveurs, et une exigence est qu'un client communique toujours avec le même serveur (trop de données en direct est utilisé pour permettre de rebondir entre les serveurs efficacement).
ma configuration actuelle est un petit cluster de serveurs (utilisant Linode). J'ai un noeud frontal qui exécute HAProxy en utilisant "balance source" de sorte qu'une IP soit toujours dirigée vers le même noeud.
je remarque que "balance source" est pas une distribution très homogène. Avec ma configuration de test actuelle (2 serveurs d'arrière-plan), un serveur a souvent 3-4x autant de connexions en utilisant une taille d'échantillon de 80-100 sources IPs.
Est-il un moyen de parvenir à une répartition plus équilibrée? De toute évidence, les sessions collantes interdisent un équilibre" parfait", mais une répartition 40/60 serait préférable à une répartition 25/75.
2 réponses
HAProxy prend en charge la modification ou l'insertion d'un cookie pour assurer la persistance de la session avec le paramètre cookie
.
dans les sections d'arrière-plan ou d'écoute, ajouter ce qui suit:
cookie COOKIENAME prefix
cet exemple modifiera un cookie existant en ajoutant le nom du serveur à un cookie appelé COOKIENAME
. Votre client verra quelque chose comme server1~someotherdata
mais votre application ne verra que la partie someotherdata
. De sorte que vous pouvez utiliser ce sur les cookies existants. En outre, cette méthode vous permet de ne renforcer la persistance de la session que lorsque ce cookie existe, ce qui signifie que vous pouvez toujours équilibrer les gens autour des parties statiques de votre site et ne renforcer la viscosité lorsque nécessaire, mais en ajoutant ce nom de cookie à la session.
nommez aussi vos serveurs, ainsi vos lignes de serveur ressemblent à ce qui suit:
server server1 1.2.3.4 cookie server1
plus de détails dans le HAProxy config guide , il semble aussi que vous pouvez utiliser le paramètre de configuration appsession
.
une fois que vous avez fait cela, vous pouvez choisir votre propre méthode d'équilibre dans la liste, j'ai tendance à utiliser roundrobin
mais leastconn
pourrait vous donner un meilleur équilibre une fois que les sessions collantes sont prises en compte.
pour en savoir plus sur la documentation:
cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ]
[ postonly ] [ preserve ] [ domain <domain> ]*
[ maxidle <idle> ] [ maxlife <life> ]
Enable cookie-based persistence in a backend.
May be used in sections : defaults | frontend | listen | backend
yes | no | yes | yes
vous pouvez ajuster L'algorithme d'équilibrage dans HA-Proxy Il ya certains disponibles cependant. Comme par exemple roundrobin ou leastconn.
mais vous devez ajuster en général votre équilibre en fonction du domaine des utilisateurs pour lesquels le contenu est servi. La plupart du temps, vous devez faire des tests empiriques et réitérer votre décision en fonction de vos résultats.