Haute Disponibilité avec VRRP
Cas simple avec l'utilisation de keepalive seul (protocole VRRP)
Architecture
2 serveurs: * serverHA1 * serverHA2
Les 2 serveurs peuvent sont reliés entre eux par un reseau ethernet. Pour le test de disponibilité ils peuvent être relié par un cable serie.
Concept
Pour ce cas simple de Haute Disponibilité il s'agit juste de faire basculer une adresse IP virtuelle (VIP) entre un serveur Master et un serveur de Backup.
Pour la surveillance applicative on peut utiliser mon ou monit.
Mise en oeuvre
Pré-requis
Il faut installer le package keepalived:
yum install keepalived
Configuration
Le fichier à configurer est /etc/keepalived/keepalived.conf
Sur le serveur Master (serverha1):
vrrp_instance test_ha {
state MASTER interface eth0 virtual_router_id 52 priority 100 authentication { auth_type PASS auth_pass TESTHA } virtual_ipaddress { 192.168.200.1/32 dev eth0 }
}
Sur le serveur Backup (serverha2):
vrrp_instance test_ha {
state BACKUP interface eth0 virtual_router_id 52 priority 50 authentication { auth_type PASS auth_pass TESTHA } virtual_ipaddress { 192.168.200.1 dev eth0 }
}
Sur les 2 serveurs, pour eviter de polluer le réseau, ajouter dans /etc/sysctl.conf:
# Répondre aux requêtes ARP sur eth1, uniquement si l’adresse demandée est celle configurée sur cette interface, donc ignore les requêtes avec IP destination correspondant à la VIP net.ipv4.conf.eth0.arp_ignore = 1 # Envois des requêtes ARP sur eth1, uniquement avec l’adresse source IP primaire de l’interface eth1, mais jamais avec la VIP comme adresse IP source. net.ipv4.conf.eth0.arp_announce = 2
Haute Disponibilité et repartition de charge
Utilisation de Keepalive et lvs pour de la haute disponibilité avec repartition de charge.
Architecture
2 serveurs: * serverHA1 * serverHA2
Les 2 serveurs peuvent sont reliés entre eux par un reseau ethernet. Pour le test de disponibilité ils peuvent être relié par un cable serie.
Le service à rendre hautement disponible est http.
Concept
Habituellement pour de la haute disponibilité, on peut utiliser un Load Balancer qui redirige les requetes vers une ferme de serveurs. Le probleme étant que le Load Balancer devient un SPOF. Ici le Load Balancer est integré dans la ferme de serveur à l'aide d'une VIP, et ce service sera deplacer sur une autre machine de la ferme en cas de panne.
Un des deux machines sert de noeud actif qui contiendra un repartiteur de charge basé sur ipvs. Cette machine active dispose de la VIP qui sera utilisée par les clients pour joindre le service. Entre les 2 machines heartbeat surveille que la VIP réponde bien.
L'accès au service http passe par une repartition de charger de type round robin pondéré. Il y a donc repartition de charge.
En cas de panne
Un des services http tombe
Si un des services tombe, comme il s'agit de round robin pondéré, ipvs ne pouvant joindre le service il va affecté une valeur faible sur le poid de la route menant au service inaccessible. Ainsi les paquets ne seront plus routés vers le service qui ne repond plus.
Quand le service redemarre, le poid de la route vers se service remonte et est de nouveau utilisé.
Une des machines tombe
Le noeud secondaire tombe
Il s'agit du meme cas que la panne du service.
Le noeud actif tombe
Le noeud actif est celui qui heberge le load balancer à l'instant T. Si heartbeat detecte depuis le noeud secondaire que la VIP n'est plus joignable, il va monter la VIP sur son interface et configurer ipvs pour devenir le load balancer.
Mise en oeuvre
Pré-requis
IPVS fait parti du projet LVS. Pour s'assurer que le kernel supporte ipvs il suffit de verifier la présence des modules suivants: * up_vs_dh.ko * ip_vs_ftp.ko * ip_vs.ko
Ces modules se trouvent normalement dans /lib/modules/`uname -r`/kernel/net/ipv4/ipvs/
L'utilitaire d'administration d'ipvs s'appelle ipvsadm. Il faut l'installer (yum install ipvsadm).