4 votes

Équilibrage de charge sans équilibreur de charge ?

J'ai 4 serveurs d'images alimentés par nginx sur leurs propres sous-domaines, auxquels les utilisateurs accèdent de manière aléatoire. J'ai décidé de les placer tous derrière un équilibreur de charge HAProxy pour améliorer la fiabilité et voir les statistiques de trafic à partir d'un seul endroit. Cela semblait être une évidence.

Malheureusement, le déménagement s'est soldé par un échec complet, car le port 100 mbits de l'équilibreur de charge était complètement saturé par toutes les demandes qui y passaient.

Je me demandais ce que je devais faire à ce sujet - je pourrais obtenir une mise à niveau du port ($$$) ou revenir à 4 serveurs d'images séparés auxquels on accède de manière aléatoire. J'ai pensé à mettre HAProxy sur chaque serveur d'images qui, à son tour, serait dirigé vers un autre serveur d'images si le service nginx de ce serveur avait des problèmes.

Que feriez-vous ? J'aimerais ne pas avoir à dépenser trop d'argent supplémentaire.

0 votes

Serveurs d'images ? Utilisez un CDN.

0 votes

Le coût n'est pas du tout réalisable à des volumes élevés. Nous économisons beaucoup d'argent en utilisant nos propres serveurs dédiés.

0 votes

L'objectif d'un CDN est de traiter des volumes importants de trafic, et il ne serait pas inutile qu'il s'adresse à quelques fournisseurs de CDN et leur demande quels tarifs ils peuvent proposer pour son cas d'utilisation.

4voto

dmh2000 Points 380

Ce qui casse votre nginx (surcharge, défaut matériel) cassera probablement aussi votre haproxy. Il serait probablement préférable d'obtenir une IP supplémentaire (utiliser comme un alias sur l'interface) pour chaque serveur, et d'utiliser cela comme l'IP (directement ou via un nom dns) que vous publiez via vos urls d'image. Construisez un script qui relocalisera l'ip secondaire sur un autre serveur en cas de problèmes sérieux. Le diable dans les détails sera de s'assurer que l'IP est en sécurité. enlevé de l'autre serveur. Dans le cas où le script ne peut plus se connecter au serveur défaillant et désallouer l'alias IP, la meilleure chose à faire est de l'arrêter brutalement via IPMI s'il est disponible.

Comme alternative, vous pourriez installer quelque chose de CGIish sur le quatrième serveur qui redirige simplement vers un choix aléatoire de serveurs disponibles ; contrôler la liste des serveurs vers lesquels il peut rediriger avec un script de surveillance périodique (vous pourriez abuser de nagios check_http pour cela par exemple). En tant qu'extension, ce script pourrait également accepter une liste d'exclusion à partir d'un autre fichier - vraiment pratique si vous devez mettre au repos un des serveurs pour la maintenance.

De plus, la suggestion d'utiliser un CDN n'est pas si malavisée.... si vous avez un trafic de fichiers statiques qui sature une ligne de 100MBit, vous parlez d'un trafic de plusieurs téraoctets à plusieurs dizaines de téraoctets par mois selon les modèles d'utilisation...

2voto

JeffSahol Points 541

Solution 1. Surveillance active du DNS/publicité

Mettez en place un images.domain.com avec un TTL bas (30s-ish) pour advertir vos 4 IP's :
10.1.1.1, 10.1.1.2, 10.1.1.3, 10.1.1.4

Vos serveurs de noms doivent alors interroger activement l'état http de chaque IP (comme vous le feriez avec l'équilibreur de charge) et cesser d'annoncer une IP lorsque son état est "down". Faites un test complet mais évitez les services communs à toutes les boîtes (par exemple un seul backend de base de données). Lorsqu'un nœud échoue à la surveillance, il cesse d'être annoncé dans le DNS.

Les prises, Plus de requêtes DNS à cause d'un TTL bas. Le basculement prend des secondes "DNS TTL" (et certaines personnes aiment aussi désobéir aux TTL). Vos serveurs de noms doivent être relativement proches des services, ou avoir des paramètres par défaut judicieux, par exemple en cas de panne de réseau entre le NS et vos serveurs d'images.

Vous pouvez également créer 4 noms de domaines distincts qui renvoient à une autre adresse IP par la même méthode.

Solution 2. Basculement IP

La prise de contrôle de l'IP de rackandboneman est implémentée sans trop de problèmes dans linux avec keepalived/lvs en utilisant le protocole VRRP. (En supposant que vos boîtes sont proches les unes des autres sur le réseau et sous linux, os est comme bsd y solaris ont des implémentations vrrp/carp)

Avec 4 boîtes, vous pouvez créer une topologie en cercle pour le basculement d'IP virale, ce qui signifie que vous pouvez perdre 2 boîtes l'une à côté de l'autre mais ne perdre qu'un seul VIP, la boîte à gauche des [] a la plus haute priorité pour le VIP.

         vip 1        vip 2        vip3         vip4
nodes [ 1 <-> 2 ]  [ 2 <-> 3 ]  [ 3 <-> 4 ]  [ 4 <-> 1 ]

ou 3 nœuds par VIP, par ordre de priorité, configuration plus complexe mais meilleure disponibilité.

nodes [1 - 2 - 3]  [2 - 3 - 4]  [3 - 4 - 1 ] [ 4 - 1 - 2]

Avec keepalived, je configurerais le moniteur script pour frapper le service http local que votre équilibreur de charge frapperait pour juger de la santé du serveur. Assurez-vous également que le trafic VRRP utilise la même interface que le trafic réel si vous avez plusieurs nics.

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