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:53]
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 38: Ligne 40:
 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. 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.1590504790.txt.gz
  • Dernière modification: 2020/05/26 16:53
  • de sakher-b