2 votes

Équilibrage de la charge pour les serveurs web (avec synchronisation de l'état)

(J'ai regardé d'autres questions, mais je ne pense pas qu'elles couvrent les mêmes sujets que celle-ci).

Je cherche une solution d'équilibrage de charge pour notre ferme de serveurs web. Nous utilisons actuellement des appareils de la série Cisco CSS11000, mais ceux-ci présentent quelques limitations :

  • Nous déchargeons actuellement le SSL, ce qui, j'en suis conscient, alourdit la charge des LB, au lieu d'être en mesure d'échelonner horizontalement le travail SSL sur plusieurs serveurs web.
  • Les LB CSS ne supportent pas IPv6
  • Les CSS ne fonctionnent pas très bien pour le basculement - nous voulons être en mesure de déplacer le trafic utilisateur de manière gracieuse pour nous permettre de mettre à niveau les serveurs web sans interruption de service.

Objectifs :

  • Désactivons la moitié des serveurs web de manière "gracieuse" (c'est-à-dire que les nouvelles connexions des utilisateurs vont vers un sous-groupe de serveurs web spécifié, et qu'il nous indique quand les connexions existantes sont fermées - points bonus s'il peut les forcer à se fermer gracieusement pour que les utilisateurs ne s'en aperçoivent pas).
  • Nous pouvons redémarrer/reconfigurer les équilibreurs de charge sans interrompre le service.
  • Prise en charge des fonctions HA habituelles (en cas d'explosion ou de panne d'un seul serveur, il n'y a pas de rupture).
  • J'aimerais faire cela sans dépenser des $$$ sur des équilibreurs de charge commerciaux / matériels.
  • J'aimerais le faire sur Linux si possible pour utiliser l'expérience interne.
  • Le reste de l'entreprise aime les produits "Enterprise" parce qu'ils peuvent rejeter la faute sur quelqu'un d'autre en cas de problème. Par conséquent, ce que je recommande de mettre en place doit être aussi fiable qu'une solution commerciale.

Idées :

  • Deux paires de HAProxy. Nous utiliserons le mécanisme de contrôle des sockets de HAProxy ( http://code.google.com/p/haproxy-docs/wiki/UnixSocketCommands ) pour supprimer gracieusement les serveurs web. Chaque paire utiliserait le heartbeat pour maintenir le service, et nous modifierions le DNS pour qu'il pointe vers l'autre paire afin de déplacer les nouvelles connexions d'utilisateurs vers l'autre paire. Il faudrait une certaine forme de surveillance pour nous dire quand une paire particulière a 0 connexion active.

  • Deux machines Linux effectuant l'équilibrage avec iptables et le module -m random. J'utiliserais heartbeat pour maintenir le VIP HA sur l'une des machines, et j'utiliserais conntrackd pour synchroniser l'état de la connexion TCP, afin que nous puissions basculer sans perte de service. Il faudrait un script pour insérer/supprimer les règles iptables en fonction de l'état des backends (à moins que quelqu'un ne connaisse un outil ?).

Quelqu'un a-t-il des commentaires à faire sur ce qui précède ? Ou d'autres idées, meilleures ou complémentaires ?

Merci de votre attention !

1voto

elliot. Points 1

Serveur de trafic Apache semble vraiment prometteur. J'utilise actuellement BigIPs, qui fonctionnerait bien pour ce que vous recherchez, mais je ne pense pas que vous économiserez de l'argent en passant à eux.

0voto

Austin Mohr Points 650

HAProxy est excellent (par expérience), et je ne suis pas sûr que vous soyez au courant des fonctionnalités plus récentes telles que la synchronisation de la table des bâtonnets (si la persistance est activée) à l'aide de la fonction peers directive. Voir le manuel 1.5 pour plus d'informations : http://haproxy.1wt.eu/download/1.5/doc/configuration.txt

HAProxy est également capable de traduire IPv6 -> IPv4, ce qui est très utile si votre réseau interne utilise encore l'adressage IPv4, mais pas votre réseau public.

Il manque une chose à votre liste : LVS/IPVS, qui fait partie du noyau Linux. Il est lui aussi compatible avec IPv6 (mais pas avec la traduction, car il ne s'agit pas d'un proxy). Les performances sont très bonnes et il est souvent utilisé en conjonction avec ldirectord (un démon Perl) pour le contrôle de l'état de santé et la fonctionnalité hors ligne/en ligne du serveur. http://horms.net/projects/ldirectord/ . Vous pouvez recharger gracieusement le fichier de configuration ldirectord ou utiliser directement les commandes ipvsadm pour mettre les serveurs hors ligne, modifier les poids, etc : http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.server_state_sync_demon.html

Vous ne dites pas si la persistance/adhérence est une exigence, mais LVS peut coller à l'IP source, et HAProxy a plusieurs options : cookies, IP source, cookies RDP.

Ni l'un ni l'autre n'effectue la terminaison SSL, qui pourrait être gérée par Stunnel, Pound, et sans aucun doute par d'autres.

-1voto

user906379 Points 41

Compte tenu de vos objectifs, je vous recommande de vous adresser à KEMP Technologies (www.kemptechnologies.com), que j'utilise actuellement pour ma propre application web. Vous pouvez désactiver les serveurs web qui drainent les connexions du serveur, de sorte que les nouvelles connexions vont vers d'autres serveurs et que les connexions existantes restent pendant un certain temps, puis sont progressivement transférées vers d'autres serveurs. Ils offrent une haute disponibilité avec l'option de synchroniser votre connexion et les tables d'affinité/persistance entre les unités afin que la deuxième unité sache à quel serveur le client était connecté lorsqu'il passait par le premier équilibreur de charge. Ils proposent également le délestage SSL, qui peut également être réalisé au niveau matériel si vous avez un volume élevé de trafic SSL.

Leur liste d'ajouts de valeur porteurs de coûts est assez courte, ce qui facilite l'obtention d'un produit qui fait ce que vous voulez du premier coup.

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