Bonjour,
Je suis à la recherche, comme l'indique le titre, d'une solution simple pour monter un cluster FailOver
L'idée est relativement simple :
- j'ai trois serveurs : un en production / deux de secours
- le serveur de production écoute plusieurs adresses IP (une par site Internet)
- s'il vient à y avoir un soucis sur le serveur de production, un des serveurs de secours doit :
- ajouter une règle (ip rule add) si elle n'existe pas
- ajouter une route (ip route add) si elle n'existe pas
- monter les adresses IP des sites Internet
- envoyer une requête arping vers le routeur de l'hébergeur pour prendre en compte le changement de machine
J'ai donc créé un script pour me simplifier ces opérations en cas de bascule manuelle.
Je cherche maintenant la solution pour automatiser cette tâche en cas de soucis.
J'ai regardé 'HeartBeat' mais il ne semble plus maintenu et est un peu lourd pour exécuter un simple script.
J'ai regardé le couple Corosync + Pacemaker : il est également trop lourd pour exécuter un simple script et me semble bien mal documenté. J'ai trouvé un blog d'une personne expliquant comment créer une ressource permettant d'exécuter un script mais il ne livre pas l'exemple du dit script. Hors, les codes retours attendus ne sont pas super simples à prendre en main selon l'état dans lequel on se trouve et le comportement est assez bizarre entre le test (ocf-tester) et l'exécution automatique.
Je suis en train de regarder KeepAlived mais j'ai pas l'impression que ce soit la solution la plus adaptée. Il permet bien l'exécution de scripts mais il me semble que c'est une fonction "bonus" donc j'en arriverais à un usage "détourné" du produit.
Est-ce que quelqu'un aurait une solution simple mais efficace pour ce soucis ?
Je n'ai pas besoin de synchronisation DRBD etc : juste lancer un script avec des arguments de manière simple et efficace.
Pour la partie réseau, j'ai deux cartes réseaux :
- une qui a une adresse IP publique propre au serveur
- une qui peut porter un bloc d'IP publiques mais également des IP locales
Les serveurs sont physiquement distants puisque dans plusieurs datacentres. Je compte donc utiliser les IP locales pour la communication du cluster.
Je vous remercie d'avance.
# Keepalived
Posté par Anthony Jaguenaud . Évalué à 2. Dernière modification le 11 mai 2015 à 17:26.
Salut,
J’ai eu une problématique légèrement différente, j’ai utilisé keepalived. C’est sur un réseau privé pour un démonstrateur, donc pas d’IP publiques (donc d’achat de plage…).
Nous avons un certains nombres de serveurs (n que je prendrais == 3). Les trois serveurs répondent aux requêtes pour répartir la charge. Chaque serveur a une IP à lui : ip1, ip2, ip3. Ensuite, chaque serveur à
n - 1
ip virtuelle, soit 2 dans notre cas. (ipv1.1, ipv1.2, ipv2.1, ipv2.2, ipv3.1 et ipv3.2). Ces adresses sont donnée à keepalived en le configurant pour que ipv1.1 soit maître sur le serveur 1, puis secondaire sur le serveur 2 et enfin tertiaire sur le serveur 3. La deuxième adresse du serveur 1 ipv1.2 est maître sur le serveur 1, mais secondaire sur le serveur 3 et tertiaire sur le serveur 2. Ainsi de suite pour les autres adresses virtuelle.Une configuration DNS pour faire tourner l’adresse (serveur.chezmoi) en round robin sur les
n × (n - 1)
(6 ici) IP virtuelles.De cette manière, si le serveur 2 tombe, le serveur1 répondra aux requêtes ipv1.1, ipv1.2, ipv2.1 et le serveur 3 répondra aux requêtes ipv3.1, ipv3.2, ipv2.2.
Cette solution réparti la charge en plus d’assurer la tolérance aux pannes, mais demande beaucoup d’IP.
De ce que je comprends de ton besoin, une seule IP virtuelle devrait suffire. Si le premier tombe, le second répondra.
[^] # Re: Keepalived
Posté par kortex . Évalué à 1.
Bonsoir,
Je te remercie pour ta réponse mais nos deux cas ne m'ont pas l'air comparables et ta solution me parait bien compliquée pour ce que je veux faire :-/
Dans mon cas :
Dans l'idéal, le soft que je cherche dirait :
S'il y a en plus une notion de votant uniquement (un peu comme un ReplicaSet MongoDB) c'est encore mieux car je pourrais déclarer 2 ou 3 arbitres supplémentaires pour répartir le risque.
[^] # Re: Keepalived
Posté par NeoX . Évalué à 3.
ce que tu cherches, c'est exactement le fonctionnement de keepalived.
3 machines sur le reseaux, discutant en reseau privé, meme avec une seule carte reseau.
les IPs publiques sont dans le pool de keepalived,
tu definies des poids pour chaque machine,
tu as donc une machine master, une machine slave1 et une slave2.
et si tu es "gourmand" tu peux meme jouer des ponderations pour ventiler tes services sur les 3 serveurs, chacun avec ses IPs,
mais etant configué en slave sur les autres.
exemple :
ServeurA : Master sur siteA,siteB,siteC, Slave sur SiteD,SiteE,SiteF
ServeurB : Master sur SiteD, Slave sur siteA,SiteB, SiteC, SiteE,SiteF
Serveur C : Slave sur SiteA,SiteB,SiteC,SiteD,SiteE,SiteF
le probleme qui vient ensuite et que resoud corosync, c'est la synchro des données (code html,php, base de données) entre les 3 serveurs.
[^] # Re: Keepalived
Posté par kortex . Évalué à 1.
Bonjour,
Je te remercie pour ta réponse.
Je viens de finir quelques tests avec KeepAlived sur 3 nœuds : effectivement il est bien plus simple que Heartbeat ou le couple ( Corosync + Pacemaker) et semble répondre au besoin très simplement.
Par contre, je bloque quand même sur quelque chose de simple : j'ai un pare-feu iptables sur chaque nœud qui autorise toutes les connexions en sortie mais limite les protocoles autorisés en entrée (exemple : http + https).
Je n'ai rien configuré pour KeepAlived et il fonctionne quand même : pourquoi ?
Peut-être que je me trompe mais cela signifie qu'une personne mal intentionnée pourrait, en ayant trouvé le mot de passe, s'incruster dans mon cluster KeepAlived ?!
[^] # Re: Keepalived
Posté par NeoX . Évalué à 2.
keepalived utilise du broadcast pour se signaler sur le reseau,
ce sont les trames "VRRP" si je ne me trompe pas.
tout comme le ping est une trame ICMP.
DOnc oui, quelqu'un qui ecoute sur ton reseau, pourrait se faire passer pour master en emettant à son tour les trames, mais seulement à condition de trouver le bon mot de passe à envoyer dans le broadcast
[^] # Re: Keepalived
Posté par kortex . Évalué à 1.
C'est vraiment bizarre car j'avais trouvé ceci :
http://www.armetiz.info/keepalived-configuration-firewall/?PageSpeed=noscript
On voit bien une configuration iptables pour autoriser la communication. Moi je n'ai rien autorisé et ça fonctionne. Bizarre non ?
Je veux bien ouvrir le protocole vrrp mais pour telle et telle machine source pas plus ;-)
[^] # Re: Keepalived
Posté par NeoX . Évalué à 2.
oui mais non.
avec le parefeu tu vas juste interdire à une machine de recevoir le flux
ou à ta machine d'emettre le flux.
mais VRRP/keepalived c'est du broadcast,
du moment que ca sort de la machine master, ca arrose les machines du reseau.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.