Qu'est-ce que keepalive
Keepalived est un service conçu pour la création et le support d'infrastructures sans panne. Ce n'est pas une entité suffisante et a besoin d'un service d'équilibrage pour fournir l'accès au contenu "cible". Dans cet article, je vais montrer comment configurer un bundle "keepalived + haproxy + webserver" sur Ubuntu 20.04 LTS.
Préparation des procédures
Avant l'installation, nous devons préparer notre infrastructure :
- Deux serveurs pour un contenu identique et deux serveurs pour le démon keepalive et l'équilibreur haproxy ;
- Ubuntu 20.04 Accès au système d'exploitation et aux comptes privilégiés sur tous ces serveurs ;
- Deux sous-réseaux, un public et un privé. Les serveurs de contenu pour des raisons de sécurité ne seront pas accessibles via le sous-réseau public, les serveurs d'accès doivent être connectés aux deux réseaux ;
- Une adresse IP publique supplémentaire, acheminée vers le sous-réseau public et non attribuée à un serveur d'accès ;
- Nom de domaine, "pointé" vers cette IP "supplémentaire".
Commençons à préparer :
- Créez quatre serveurs via ServerSpace clizone ent. Tous doivent être situés dans un centre de données ;
- Créez deux sous-réseaux comme décrit ;
- Connectez tous les serveurs aux réseaux créés. Ensuite, réinstallez le système d'exploitation, c'est le moyen le plus rapide d'appliquer les paramètres "à l'intérieur" des systèmes d'exploitation ;
- En conséquence, vous verrez toutes les adresses attribuées dans les détails des sous-réseaux. Rappelez-vous ces adresses IP, il en faut plus. De plus, une adresse IP inutilisée (par exemple 45.14.48.134 dans mon exemple) sera utilisée comme adresse "flottante" pour keepalived ;
- Création firewall règle pour bloquer tout le trafic entrant vers les serveurs "backend" via l'interface publique, en plus du sous-réseau attribué. N'oubliez pas de "mettre en liste blanche" votre propre adresse IP, cela rendra la gestion des serveurs plus confortable. Pour ce faire, le moyen le plus simple est d'accéder aux paramètres de détails de votre serveur, d'ajouter les règles et click à la SAUVEGARDER bouton. N'oubliez pas que les règles avec l'action « autoriser » doivent être placées « en haut », puis les règles de blocage ;
- Répétez cette étape pour le serveur "content2".
- Modifier / Etc / hosts sur chacun des quatre serveurs, ajoutez simplement les lignes suivantes à la fin :
<backend_server_one_IP> content1 content1.your.domain
<backend_server_two_IP> content2 content2.your.domain
<balancer_server_one_IP> haproxy1 haproxy1.your.domain
<balancer_server_two_IP> haproxy2 haproxy2.your.domain
<1st_floating_IP_for_keepalived> your.domain
<2nd_floating_IP_for_keepalived> your.domain
Configuration du "serveur Web, de l'équilibreur et du démon de surveillance"
- Installez votre projet sur les serveurs de contenu. Un contenu identique doit être placé sur les deux backends. Comme cet article n'est qu'un exemple, je vais installer nginx serveur Web avec un changement - les fichiers d'index seront différents pour montrer comment tout fonctionne ;
apt-get update; apt install -y nginx
echo $(hostname) > /var/www/html/index.nginx-debian.html # path may be different, it is website working directory and index file
- Ouvert SSH-sessions sur le premier serveur d'équilibrage et installez le package haproxy.
apt -y install haproxy
- Modifier nano /etc/haproxy/haproxy.cfg fichier de configuration et ajoutez les lignes suivantes ;
#frontend
#---------
frontend my_haproxy
bind *:80
stats uri /haproxy?stats
default_backend my_haproxy
# backend
#---------
backend my_haproxy
balance roundrobin
mode http
server content1 <1st_backend_server_private_IP>:80 check
server content2 <2nd_backend_server_private_IP>:80 check
- Redémarrer les services haproxy
service haproxy restart
- Ouvrez deux windows de n'importe quel terminal sur votre ordinateur local et exécutez ces commandes (une par fenêtre):
while sleep 3; do curl http://<1st_balancer_public_IP>; done
while sleep 3; do curl http://<2nd_balancer_public_IP>; done
Si vous voyez des "réponses" entrelacées dans les deux terminaux windows - les haproxies fonctionnent, passez à l'étape suivante ;
- Installez sur les deux équilibreurs le package logiciel du démon keepalive :
apt install -y keepalived
- Recherchez et mémorisez les noms d'interfaces publiques sur les deux serveurs d'équilibrage ;
ip a | grep <server_public_IP>
- Créer paramfichier eters sur le premier équilibreur et collez le code suivant à l'intérieur :
nano /etc/keepalived/keepalived.conf
vrrp_instance MY_KEEPALIVED1 {
state MASTER
interface ens192
virtual_router_id 1
priority 11
virtual_ipaddress {
45.14.48.134/29 dev ens192 label ens192:1
}
}
Paramdescription des ètres :
instance_vrrp - n'importe quel nom sans spaces,
Etat - rôle de serveur,
interface - le nom de l'interface réseau, vous le connaissiez à l'étape précédente,
virtual_router_id - identifiant d'instance, doit être identique sur tous les équilibreurs,
priorité - en utilisant l'ordre, le maître-serveur devrait avoir une priorité plus élevée,
adresse_ip_virtuelle - une des IP inutilisées du sous-réseau, votre domaine doit être "épinglé" à cette adresse.
- Créer un fichier de configuration pour le seconde serveur d'équilibrage :
vrrp_instance MY_KEEPALIVED1 {
state SLAVE
interface ens192
virtual_router_id 1
priority 10
virtual_ipaddress {
45.14.48.134/29 dev ens192 label ens192:1
}
}
Faites attention au texte de configuration - "priorité" et "état" parameters sont "permutés", tous les autres points restent identiques.
- Activez le chargement automatique et redémarrez les services sur les deux serveurs frontaux ;
systemctl enable haproxy && service haproxy restart; systemctl enable keepalived && service keepalived start
- Vérifiez l'état. L'image comme ci-dessous montre que les services sont en cours d'exécution ;
systemctl status haproxy && service keepalived status
Vérification et simulation de catastrophe
Alors, il est temps de vérifier notre travail.
- Ouvrez à nouveau le terminal sur votre ordinateur et exécutez
while sleep 5; do curl http://<your_domain>; done
Les deux serveurs fonctionnent et répondent à leur tour ;
- Arrêtez le maître-équilibreur ;
systemctl stop haproxy && service keepalived stop
Comme nous le voyons, l'équilibreur de sauvegarde se transforme en maître, aucun contenu ne délivrant d'interruptions ;
- Permet de "supprimer" un nœud de contenu ;
service nginx stop
Comme nous le voyons, un seul paquet a été supprimé, puis notre projet continue de fournir du contenu à partir du deuxième nœud ;
- Lorsque le serveur "échoué" revient, son contenu revient également ;
- Et enfin, si l'équilibreur "tombé" revient, il reprend le rôle de maître.
systemctl start haproxy && service keepalived start
Conclusion
Dans ce tutoriel, j'ai expliqué ce qu'est le démon keepalive et comment créer une infrastructure anti-crash avec nginx, haproxy et paquets keepalived sur Ubuntu 20 LTS.