wiki:documentation:avance:keep

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
wiki:documentation:avance:keep [2020/05/26 16:49]
sakher-b
wiki:documentation:avance:keep [2020/05/26 17:36] (Version actuelle)
sakher-b
Ligne 1: Ligne 1:
 +====== Répartition de charge et haute disponibilité avec keepalived ======
 +
 Nous allons voir comment mettre en place une répartition de charge et de la haute disponibilité entre 2 serveurs à l'aide de Keepalived. 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. Dans cet exemple il s’agit de deux serveurs de partages Samba 4.
Ligne 13: Ligne 15:
  
 2 VMs avec keepalived installé (VRRP/HA servers) 2 VMs avec keepalived installé (VRRP/HA servers)
-  * adresses IP : Une adresse IP dédiée au serveur et une seconde dédié à la répartition de charge (VIP) +  * adresses IP : Une adresse IP dédiée à chaque serveur (2) 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 adresses IP dédiées aux communications entre les deux serveurs keepalived
  
 === 2 – Les serveurs réels === === 2 – Les serveurs réels ===
Ligne 23: Ligne 25:
  
 On peut désactiver l’IP Forwarding On peut désactiver l’IP Forwarding
 +<code bash>
 +# 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
 +
 +</code>
 +
 +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.
 +
 +<code bash>
 +# nano /etc/systemd/network/lo.network
 +[Match]
 +Name = lo
 +
 +[Address]
 +Address = 172.26.127.20/32
 +Scope = host
 +</code>
 +
 +On redémarre le service réseau 
 +
 +<code bash>
 +# systemctl restart systemd-networkd.service 
 +</code>
 +
 +Et pour éviter d’éventuels problèmes sur les caches ARP on modifie le système en conséquence : 
 +
 +<code bash>
 +# 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
 +</code>
 +Et on l’applique les modifications 
 +<code bash>
 +# 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
 +</code>
 +
 +=== 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. (
 +
 +{{:wiki:documentation:avance:reseau-vip_iaas.intra.univ-nantes.fr.png|}}
 +
 +Et une autre dans un réseau privé et qui sera dédié aux communications inter-serveurs, icie ESPE_VPRIVATE.
 +
 +{{:wiki:documentation:avance:reseau_vprivate_iaas.intra.univ-nantes.fr.png|}}
 +
 +== 3.1 – Configuration réseau ==
 +
 +Ici nous allons utiliser systemd-networkd pour configurer le réseau, car nous n’avons pas de contexte opennebula.
 +
 +<code bash>
 +# 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
 +</code>
 +
 +Il faut à présent configurer l’interface qui servira de communication entre les deux serveurs Keepalived.
 +<code bash>
 +# nano /etc/systemd/network/ens3.network
 +
 +[Match]
 +Name=ens4
 +
 +[Network]
 +Address=192.168.66.23
 +</code>
 +
 +On redémarre le service 
 +<code>
 +# systemctl restart systemd-networkd
 +</code>
 +
 +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
 +
 +<code bash>
 +# 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...
 +</code>
 +
 +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)
 +
 +<code bash>
 +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
 +                }
 +        }
 +}
 +</code>
 +
 +Et sur le second serveur keepalived (BACKUP)
 +
 +<code bash>
 +global_defs {
 +        notification_email {
 +        nom-p@univ-nantes.fr
 + }
 +        notification_email_from keepalived2@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 BACKUP
 + interface ens4
 + priority 50
 + advert_int 1
 + track_interface {
 +      ens3
 +    }
 +        unicast_src_ip 192.168.66.24
 +        unicast_peer {
 +                192.168.66.23
 +           }
 + virtual_ipaddress {
 + 172.26.127.20/28 brd 172.26.127.31 dev ens3 scope global
 + }
 +
 + 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
 +                }
 +        }
 +}
 +</code>
 +
 +On active keepalived au démarrage des serveurs :
 +<code bash>
 +# systemctl enable keepalived.service 
 +Created symlink /etc/systemd/system/multi-user.target.wants/keepalived.service -> /usr/lib/systemd/system/keepalived.service.
 +</code>
 +
 +Et on démarre keepalived sur les deux serveurs :
 +<code bash>
 +# systemctl start keepalived.service
 +</code>
 +
 +Si tout se passe bien l’adresse IP 172.66.127.20 doit être visible sur l’interface ens3 du keepalived MASTER.
 +
 +<code bash>
 +# ip addr show dev ens3
 +2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
 +    link/ether 1a:a5:66:04:00:03 brd ff:ff:ff:ff:ff:ff
 +    altname enp0s3
 +    inet 172.26.127.23/28 brd 172.26.127.31 scope global ens3
 +       valid_lft forever preferred_lft forever
 +    inet 172.26.127.20/28 brd 172.26.127.31 scope global secondary ens3
 +       valid_lft forever preferred_lft forever
 +    inet6 fe80::18a5:66ff:fe04:3/64 scope link 
 +       valid_lft forever preferred_lft forever
 +</code>
 +
 +Et pour vérifier la répartition de charge :
 +
 +<code bash>
 +# ipvsadm -Ln
 +IP Virtual Server version 1.2.1 (size=32768)
 +Prot LocalAddress:Port Scheduler Flags
 +  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
 +TCP  172.26.127.20:139 rr
 +  -> 172.26.127.21:139            Route        0          0         
 +  -> 172.26.127.22:139            Route        0          0         
 +TCP  172.26.127.20:445 rr
 +  -> 172.26.127.21:445            Route        0          0         
 +  -> 172.26.127.22:445            Route        0          0         
 +</code>
 +
 +Ici aucune connexion car cette documentation a été réalisée pendant le confinement COVID-19 ;-)
  
 +=== 4 – Ressources documentaires ===
  
 +https://www.keepalived.org/doc/
  
 +https://www.keepalived.org/manpage.html
  • wiki/documentation/avance/keep.1590504591.txt.gz
  • Dernière modification: 2020/05/26 16:49
  • de sakher-b