« KeepaliveD » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 28 : | Ligne 28 : | ||
== Installation == | == Installation == | ||
KeepaliveD est dispo dans les dépôts et peut facilement être installé via yum / apt: | KeepaliveD est dispo dans les dépôts et peut facilement être installé via yum / apt: | ||
<source lang="bash"> | <source lang="bash"> | ||
Ligne 68 : | Ligne 67 : | ||
== Configuration basique == | == Configuration basique == | ||
[[Fichier:VRRP2.png|sans_cadre]] | [[Fichier:VRRP2.png|sans_cadre]] | ||
Ligne 142 : | Ligne 140 : | ||
== Monitoring == | == Monitoring == | ||
Un tcpdump peut réveler tout ce qu'il y a à savoir sur la conf: | Un tcpdump peut réveler tout ce qu'il y a à savoir sur la conf: | ||
<source lang="bash"> | <source lang="bash"> | ||
Ligne 162 : | Ligne 159 : | ||
0 packets dropped by kernel | 0 packets dropped by kernel | ||
</source> | </source> | ||
= Notions Avancées = |
Version du 3 avril 2020 à 09:33
Cette page est issue d'une série d'articles du site "Enable SysAdmin" de Red Hat, résumés et traduits. https://www.redhat.com/sysadmin/ha-cluster-linux https://www.redhat.com/sysadmin/keepalived-basics https://www.redhat.com/sysadmin/advanced-keepalived
Bases
VIP et élections
KeepaliveD est un daemon Linux mettant en place le protocole VRRP (Virtual Router Redundancy Protocol), version 2 (RFC 3768) et 3 (RFC 5798) (nous utiliseront ici la version 2). Le mot d'ordre est ici "Failover" ! VRRP, bien que conçu pour les routeurs, est ici utilisé sur nos serveurs pour mettre en place des VIPs: plusieurs serveurs participent à une élection (chaque serveur est configuré avec un poids) pour savoir qui sera chargé d'utiliser la VIP (et sera donc le master): quand le master tombe, VRRP met en place des mécanismes de détection et on choisit un nouveau master. Le master doit normalement avoir un poids de 255, mais ce n'est pas une obligation. Le master envoie des advertisements à intervalles réguliers, c'est ce qui permet aux autres de savoir quand celui-ci n'est pas disponible; un autre mécanisme appellé "preemption" permet à n'importe quel serveur se pointant avec une priorité plus élevée de devenir master.
Quand un master se met en place, il envoie un ARP annonçant son IP et sa MAC afin que le reste du réseau puisse l'adresser correctement au niveau de la couche 2.
VRRP permet aussi de faire du load balancing !
Un paquet, vu de près
On peut comprendre un certain nombre de choses en regardant un paquet d'advertisement VRRP avec Wireshark.
On voit que les adresses de destination (IP et MAC) sont des adresses multicast. Pour éviter les configurations complexes, le trafic multicast de VRRP deviendra simplement du trafic broadcast sur le segment local. On voit aussi que ce n'est pas de l'UDP ni du TCP; VRRP utilise le protocole IP numéro 112. Connaître ce numéro est important pour configurer les firewalls. Le paquet contient toutes les informations permettant d'élire un master et d'informer les slaves:
- Un Virtual Router ID (VRID), identifiant unique d'une instance VRRP et de ses adresses IP. Il faut éviter de les réutiliser sur un même LAN.
- La priorité est le poids de l'hôte qui envoie le paquet.
- Auth type et Auth String contiennent un password simple pour identifier les autres membres sur le réseau.
- Advertisement Interval indiquent à quelle intervalle les adv sont envoyés par le master (en secondes)
- IP Address : la / les adresses pour lesquelles le master est responsable.
Configuration Simple
Nous allons ici utiliser KeepaliveD pour avoir du failover entre deux serveurs.
Installation
KeepaliveD est dispo dans les dépôts et peut facilement être installé via yum / apt: <source lang="bash"> [root@server1 ~]# yum install -y keepalived
[root@server1 ~]# keepalived --version Keepalived v2.0.10 (11/12,2018)
[root@server1 ~]# systemctl status keepalived keepalived.service - LVS and VRRP High Availability Monitor Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disab Active: inactive (dead) </source>
On peut vouloir le compiler à la main.
<source lang="bash">
- Install prerequisites
yum install -y gcc openssl-devel
- Download the latest version of the code. Be sure to check the downloads page for the most recent version:https://www.keepalived.org/download.html
[root@localhost ~]# wget https://www.keepalived.org/software/keepalived-2.0.20.tar.gz
- Extract the code
[root@localhost ~]# tar -xf keepalived-2.0.20.tar.gz
- Run the configure scripts
[root@localhost ~]# cd keepalived-2.0.20 [root@localhost keepalived-2.0.20]# ./configure
- Build and install keepalived
[root@localhost keepalived-2.0.20]# make [root@localhost keepalived-2.0.20]# make install
- Test your installation
[root@localhost keepalived-2.0.20]# keepalived --version Keepalived v2.0.20 (01/22,2020) </source>
Configuration basique
Le fichier de configuration de keepalived est situé dans /etc/keepalived/keepalived.conf. Puisque que keepalived permet de faire plus que du failover, le fichier de conf peut faire peur en regardant le man; cependant, une topologie telle que celle présentée au-dessus peut être achevée avec un fichier assez simple. La plus simple des confs donne une VIP. Ici Server1 est master.
Configuration de server1: <source lang="bash"> server1# cat /etc/keepalived/keepalived.conf vrrp_instance VI_1 {
state MASTER interface eth0 virtual_router_id 51 priority 255 advert_int 1 authentication { auth_type PASS auth_pass 12345 } virtual_ipaddress { 192.168.122.200/24 }
} </source>
Configuration de server2: <source lang="bash"> server2# cat /etc/keepalived/keepalived.conf vrrp_instance VI_1 {
state BACKUP interface eth0 virtual_router_id 51 priority 254 advert_int 1 authentication { auth_type PASS auth_pass 12345 } virtual_ipaddress { 192.168.122.200/24 }
} </source>
Pour résumer la conf:
- vrrp_instance VI_1 : Nom arbitraire d'une instance de VRRP tournant sur une interface.
- state MASTER : État initial dans lequel je veux que l'instance tourne.
- interface eth0 : Sur quelle interface on fait du VRRP
- virtual_router_id 51 : Le VRID dont on parlait plus tôt.
- priority 255 : Le poids.
- advert_int 1 : Adv envoyés toutes les secondes.
- auth_type PASS : type d'auth
- auth_pass 12345 : password
- virtual_ipaddress : IP virtuelle
Avec tout ça en place, on peut lancer le protocole sur les deux systèmes:
systemctl start keepalived
On peut ensuite observer les ips sur les machines. Server1: <source lang="bash"> server1# ip -brief address show lo UNKNOWN 127.0.0.1/8 ::1/128 eth0 UP 192.168.122.101/24 192.168.122.200/24 fe80::5054:ff:fe82:d66e/64 </source>
<source lang="bash"> server2# ip -br a lo UNKNOWN 127.0.0.1/8 ::1/128 eth0 UP 192.168.122.102/24 fe80::5054:ff:fe04:2c5d/64 </source>
Une fois que c'est en place, on peut essayer de stopper keepalived sur le master pour voir la bascule.
Monitoring
Un tcpdump peut réveler tout ce qu'il y a à savoir sur la conf: <source lang="bash"> server1# tcpdump proto 112 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
16:51:01.353224 IP 192.168.122.102 > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 254, authtype simple, intvl 1s, length 20
16:51:02.353673 IP 192.168.122.102 > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 254, authtype simple, intvl 1s, length 20
16:51:03.353753 IP 192.168.122.102 > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 254, authtype simple, intvl 1s, length 20
^C
3 packets captured 3 packets received by filter 0 packets dropped by kernel </source>