0

Par exemple, j'ai deux serveurs dans le même réseau, avec un code/logiciel identique. Si le serveur principal tombe en panne, je veux que le second devienne primaire.Tolérance aux pannes du site Web/serveur Web - les meilleures pratiques

J'ai entendu parler des approches suivantes:

Quels sont les avantages et les inconvénients des approches ci-dessus? Et quelles sont les meilleures pratiques pour y parvenir?

Répondre

1

Je ne suis pas trop familier avec CARP mais je peux essayer d'aider les deux autres options:

Round-Robin DNS vous donne l'équilibrage de charge, mais si un serveur échoue, il sera toujours recevoir des demandes (qui échouera aussi)
ie: le DNS www.example.com indique à la fois xxx1 et xxx2
si xxx2 meurt, le DNS sera toujours résolu en xxx2 et les clients essaieront toujours de le demander, ce qui amène votre taux d'échec à la moitié de vos demandes pendant le temps d'arrêt (pas bon)
Même si vous changez le DNS pour pointer vers xxx1 seulement pendant le temps d'arrêt; La propagation de DNS prendra longtemps et vous perdrez toujours des demandes.

À mon avis honnête placer un équilibreur de charge (serveur proxy) devant votre pile est la seule façon d'aller
Je suis vraiment aime HAProxy mais son nullement la seule solution (trouver ce qui fonctionne pour vous)

serveurs proxy vous donne beaucoup plus de contrôle sur votre pile d'applications sous forme de haute disponibilité (HA)
vous pouvez équilibrer la charge entre 2 à N serveurs back-end et perdre un certain nombre d'entre eux et être encore fonctionnement.
Vous pouvez planifier des temps d'arrêt à tout moment de la journée pour effectuer des opérations de maintenance ou des déploiements et ne pas influencer vos clients.
Les contrôles d'intégrité intégrés interrogent les serveurs principaux et les retirent de la charge si nécessaire, puis les replacent lorsqu'ils sont restaurés.
La contre-charge de l'équilibrage de charge HA est généralement le nombre de règles à configurer pour que les sessions restent correctes ou routées dans des cas particuliers. oui ça peut devenir complexe mais il y a un LOT de soutien dans la communauté et c'est facile à apprendre. Une autre alternative à l'équilibrage de charge HA est que le serveur proxy lui-même devient un point de défaillance unique, mais cela peut être facilement surmonté avec heartbeatd et un second serveur proxy.

Espérons que cela répond à certaines de vos questions

+0

Merci beaucoup pour cette réponse détaillée! J'ai deux autres questions, si cela ne vous dérange pas :) Par «deuxième serveur proxy», voulez-vous dire deuxième serveur physique, ou simplement un logiciel au sein d'un seul serveur. S'il y a un serveur physique, en cas d'échec, il faut changer DNS jusqu'à ce que le problème soit résolu, n'est-ce pas? Et une autre question concerne vos propres préférences: exécutez-vous HAProxy en mode 'http' ou' tcp'? – Curious

+1

Être vraiment disponible Vous devez limiter les risques, donc oui un autre serveur physique ou une machine virtuelle (de préférence) au cas où votre serveur proxy principal échouerait. HAProxy est généralement juste un seul fichier de configuration que vous pouvez rsync dans le script de redémarrage afin que vous sachiez que le serveur secondaire a la dernière config. Comme pour la commutation DNS; il n'est pas nécessaire dans un empilage HA vos points DNS à une adresse IP partagée entre les 2 serveurs (voir https://www.howtoforge.com/setting-up-a-high-availability-load-balancer-with-haproxy-heartbeat -on-debian-lenny) –

+1

Je lance HAProxy en mode http pour les applications web et en mode tcp pour mes mails sortants du serveur mail (SMTP) (j'envoie environ 2 millions de mails par jour pour les campagnes) tcp a du sens pour tout trafic non http, donc il revient à utiliser cas. C'est à propos d'utiliser le bon outil pour le travail et la construction d'une pile qui fonctionne pour vous. donc si vous voulez simplement charger les requêtes http, alors oui le mode http est le chemin à parcourir. –

1

Une bonne façon pour faire vos applications à tolérance de panne serait d'utiliser nginx comme équilibreur de charge. Vous pouvez faire une config comme

upstream some_name { 
    server server_ip; 
    server server_ip2; 
}; 
server { 
    listen 80; 
    location/{ 
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-For 
      $proxy_add_x_forwarded_for; 
      proxy_set_header Host $http_host; 
      proxy_set_header X-NginX-Proxy true; 
      proxy_pass http://some_name 
    } 
} 

, plus ce nginx objet en amont prend d'autres drapeaux comme max_fails = 10 fail_timeout = 20 ans et est assez intelligent pour savoir si un serveur tombe en panne, il passe à l'autre serveur qui est en ligne et ainsi beaucoup plus que ça. Veuillez vérifier cette official nginx website pour plus d'informations à ce sujet.