4 votes

L'équilibreur de charge renvoie-t-il la réponse au client, ou le travailleur ?

Dans Apache, mod_proxy_balancer prend en charge l'équilibrage des charges de la manière la plus simple qui soit.

Veuillez vous référer à Équilibrage facile de la charge HTTP avec Apache . Lorsque la demande est traitée par les travailleurs (nœuds d'équilibrage de charge), arrive-t-elle à un serveur d'équilibrage de charge et va-t-elle ensuite au client, ou va-t-elle directement des travailleurs ?


Méthode 1 : Client Web -> Équilibreur de charge -> Travailleur -> Équilibreur de charge -> Client Web

OU

Méthode 2 : Client Web -> Équilibreur de charge -> Travailleur -> Client Web

Que se passe-t-il dans l'équilibreur de charge Apache ?

8voto

Jack Points 29

Même au retour, les données doivent passer par le serveur proxy, car c'est le serveur qui détient la connexion TCP du client et qui est censé envoyer la réponse par son intermédiaire.

Des solutions sans serveur proxy fonctionnant sur le chemin de retour existent, mais elles sont beaucoup plus difficiles à mettre en œuvre correctement (des astuces sales de TCPIP/iptables sont généralement impliquées).

EDIT : bonne solution sans serveur proxy :

Une "solution propre" qui renverrait comme par magie les TCP SYN et déchargerait tout le reste de l'équilibreur de charge est probablement un rêve, et je n'ai pas connaissance d'une telle chose.

Au lieu de cela, il existe deux approches couramment utilisées :

- Équilibrage de la charge DNS : avoir plus de serveurs sur plusieurs adresses IP accessibles au public, spécifier plus d'entrées A pour votre site web, éventuellement faire en sorte que votre serveur DNS mélange les réponses pour ajouter du hasard. Fonctionne parfaitement sur de nombreuses installations commerciales. Pour : simple, Contre : "cassable", et vous avez besoin d'un espace IP public.

- Équilibrage de la charge par le pare-feu uniquement : Il y a très probablement un seul routeur qui gère tout votre trafic de toute façon, donc ajouter quelques règles de pare-feu sur lui ne nuit généralement pas aux performances réelles. La chose que vous recherchez (sous linux) est l'utilisation de la cible DNAT d'iptables, et une sorte de correspondance "aléatoire" ou "hashing". J'utilise personnellement quelque chose comme ça sur plusieurs installations :

iptables -t nat -A PREROUTING -d 11.22.33.44 -p tcp --dport 80 -m random --average 50 -j DNAT --to 192.168.0.2
iptables -t nat -A PREROUTING -d 11.22.33.44 -p tcp --dport 80 -j DNAT --to 192.168.0.3

Remplacez 11.22.33.44 par votre adresse IP publique et 192.168.x.x par vos serveurs. N'oubliez pas de modifier les valeurs --moyennes.

Avantages : de l'extérieur, toute la solution ressemble à un seul serveur, l'équilibrage des charges est incassable par le DoSing d'un seul serveur, etc. Contre : vous voulez avoir le routeur et tous les serveurs à un seul endroit.

0 votes

C'est logique, car le client établit une connexion tcp/ip avec le proxy et non avec le worker. Je pense que, lorsque nous aurons plus de clients et plus de travailleurs, cela entraînera une charge sur le proxy et finalement le rendra lent. Y a-t-il un moyen de faire suivre la demande du client au travailleur et à partir de là, le travailleur s'en occupe. Veuillez partager plus d'informations sur la façon de le faire.

0 votes

Édité à la réponse :]

0 votes

Merci pour votre information. Nous utilisons maintenant l'équilibreur de charge Apache.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X