Ceci est une ancienne révision du document !
Nous allons voir comment mettre en place une répartition de charge et de la haute disponibilité entre 2 serveurs à l'aide de Keepalived. Dans cet exemple il s’agit de deux serveurs de partages Samba 4.
1 – Les ressources nécessaires
Sur OpenNebula, il faut absolument un réseau virtuel sans les capacités de filtrage d’usurpation d’adresse MAC et IP (FILTER_MAC_SPOOFING et FILTER_IP_SPOOFING positionnées à NO)
2 VMs avec Samba installé (reals servers)
- 2 adresses IP dédiées pour les deux serveurs Samba.
A adapter en fonction du nombre de serveurs réels sur lesquels répartir la charge.
2 VMs avec keepalived installé (VRRP/HA servers)
- 2 adresses IP : Une adresse IP dédiée au serveur et une seconde dédié à la répartition de charge (VIP)
- 1 adresse IP dédiée aux communications entre les deux serveurs keepalived
2 – Les serveurs réels
Vous installez ensuite une distribution Linux sans le contexte (one-context), car l’interaction avec la configuration réseau de la machine virtuelle est trop importante, ou alors il faudra minimiser le contexte au strict nécessaire.
2.1– Configuration réseau
On peut désactiver l’IP Forwarding
# nano /etc/systemd/network/eth0.network [Match] Name=eth0 [Network] Address=172.26.127.21/28 Gateway=172.26.127.17 DNS=172.26.4.20 IPForward=false
Et surtout ajouter l’adresse IP de la VIP (IP aliasing) sur l’interface de loopback, sinon le serveur réel ne répondra pas aux requêtes transmises par le serveur Keepalived.
# nano /etc/systemd/network/lo.network [Match] Name = lo [Address] Address = 172.26.127.20/32 Scope = host
On redémarre le service réseau
# systemctl restart systemd-networkd.service
Et pour éviter d’éventuels problèmes sur les caches ARP on modifie le système en conséquence :
# nano /etc/sysctl.d/arp.conf net.ipv4.conf.all.arp_ignore=1 net.ipv4.conf.all.arp_announce=2 net.ipv4.conf.default.arp_ignore=1 net.ipv4.conf.default.arp_announce=2 net.ipv4.conf.lo.arp_ignore=1 net.ipv4.conf.lo.arp_announce=2
Et on l’applique les modifications
# sysctl -p /etc/sysctl.d/arp.conf net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2
3– Les serveurs Keepalived (répartition de charge / haute disponibilité)
Tout d’abord il faut affecter une interface dans le réseau préalablement créé, ici ESPE_VIP. (
Et une autre dans un réseau privé et qui sera dédié aux communications inter-serveurs, icie ESPE_VPRIVATE.
3.1 – Configuration réseau
Ici nous allons utiliser systemd-networkd pour configurer le réseau, car nous n’avons pas de contexte opennebula.
# nano /etc/systemd/network/ens3.network [Match] Name=ens3 [Network] Address=172.26.127.23/28 Gateway=172.26.127.17 DNS=172.26.4.20 IPForward=false
Il faut à présent configurer l’interface qui servira de communication entre les deux serveurs Keepalived.
# nano /etc/systemd/network/ens3.network [Match] Name=ens4 [Network] Address=192.168.66.23
On redémarre le service
# systemctl restart systemd-networkd
Voilà l’accès réseau au serveur est opérationnel. Il faudra répeter cette opération autant de fois qu'il y a de serveurs Keepalived.
3.2 – La répartition de charge
Pour la répartition de charge il faut installer keepalived et ipvsadm
# pacman -S --noconfirm keepalived ipvsadm resolving dependencies... looking for conflicting packages... Packages (2) ipvsadm-1.31-1 keepalived-2.0.20-1 Total Installed Size: 0.78 MiB :: Proceed with installation? [Y/n] (2/2) checking keys in keyring [########################################################################################] 100% (2/2) checking package integrity [########################################################################################] 100% (2/2) loading package files [########################################################################################] 100% (2/2) checking for file conflicts [########################################################################################] 100% (2/2) checking available disk space [########################################################################################] 100% :: Processing package changes... (1/2) installing keepalived [########################################################################################] 100% Optional dependencies for keepalived ipset: ipset support (2/2) installing ipvsadm [########################################################################################] 100% :: Running post-transaction hooks... (1/2) Reloading system manager configuration... (2/2) Arming ConditionNeedsUpdate...
Il faut ensuite configurer keepalived pour définir l’adresse IP virtuelle et paramétrer la répartition de charge.
Cette configuration s’effectue dans le fichier /etc/keepalived/keepalived.conf
Sur le premier serveur Keepalived (MASTER)
global_defs { notification_email { nom-p@univ-nantes.fr } notification_email_from keepalived1@inspe.univ-nantes.fr smtp_server 172.20.12.55 router_id ha-smbqualif lvs_flush lvs_flush_onstop } vrrp_instance SMB { virtual_router_id 20 state MASTER interface ens4 priority 150 advert_int 1 track_interface { ens3 } unicast_src_ip 192.168.66.23 unicast_peer { 192.168.66.24 } virtual_ipaddress { 172.26.127.20/28 brd 172.26.127.31 dev ens3 scope global } smtp_alert garp_master_delay 2 garp_master_repeat 2 garp_master_refresh_repeat 1 } virtual_server 172.26.127.20 445 { protocol TCP lb_algo rr lb_kind DR real_server 172.26.127.21 445 { weight 1 TCP_CHECK { connect_timeout 1 connect_port 445 } } real_server 172.26.127.22 445 { weight 1 TCP_CHECK { connect_timeout 1 connect_port 445 } } } virtual_server 172.26.127.20 139 { protocol TCP lb_algo rr lb_kind DR real_server 172.26.127.21 139 { weight 1 TCP_CHECK { connect_timeout 1 connect_port 445 } } real_server 172.26.127.22 139 { weight 1 TCP_CHECK { connect_timeout 1 connect_port 445 } } }