Ci-dessous, les différences entre deux révisions de la page.
wiki:divers:keepalived [2015/08/28 11:54] 127.0.0.1 modification externe |
wiki:divers:keepalived [2020/06/27 18:16] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ======= Keepalived ======= | ||
- | Keepalived est un programme disponible sous Debian qui permet de faire du failover au niveau IP. En fait il va faire que deux serveurs se partagent une même IP et que si l'un tombe, l' | ||
- | |||
- | Attention, il ne s'agit pas d'une solution de load-balancing... Le but est juste de fournir un serveur de remplacement si jamais le master " | ||
- | |||
- | Pour info, le protocole utilisé derrière est **VRRP**, Virtual Router Redundancy Protocol, qui permet de faire la même chose avec des routeurs. | ||
- | |||
- | Nos deux instances de keepalived vont donc s' | ||
- | |||
- | **Note** : Il pourrait s'agir d'une solution pour redonder certains services de MiNET... Un peu moche mais ça marche... | ||
- | |||
- | A bon entendeur... | ||
- | |||
- | ===== Description de l' | ||
- | |||
- | Nous allons déployer un serveur web tout ce qu'il y a de plus basique. Mais en redondé : un serveur web en master et un autre de fail over. OK ça pête pas des masses d' | ||
- | |||
- | ===== Préparation des clients ====== | ||
- | |||
- | J'ai réalisé ceci sous OpenVZ. Mes deux openvz possèdent une interface publique et une interface d' | ||
- | |||
- | Voici la conf réseau du master : ''/ | ||
- | |||
- | < | ||
- | auto lo | ||
- | iface lo inet loopback | ||
- | |||
- | auto eth0 | ||
- | iface eth0 inet static | ||
- | address 192.168.103.166 | ||
- | netmask 255.255.255.0 | ||
- | |||
- | iface eth3 inet manual | ||
- | </ | ||
- | |||
- | Voici la conf réseau du slave : ''/ | ||
- | |||
- | < | ||
- | auto lo | ||
- | iface lo inet loopback | ||
- | |||
- | auto eth0 | ||
- | iface eth0 inet static | ||
- | address 192.168.103.167 | ||
- | netmask 255.255.255.0 | ||
- | |||
- | iface eth3 inet manual | ||
- | </ | ||
- | |||
- | Bon ... | ||
- | |||
- | Maintenant sur chaque serveur web, on autorise le routing sur les deux serveurs webs : ''/ | ||
- | |||
- | < | ||
- | net.ipv4.ip_forward = 1 | ||
- | </ | ||
- | |||
- | Puis on reboot un petit coup. | ||
- | |||
- | ===== OpenVZ seulement ===== | ||
- | |||
- | ( Vous pouvez passer à la suite si vous avez pas une Openvz ) | ||
- | |||
- | Éteignez vos deux conteneurs. | ||
- | |||
- | Pour chacun d' | ||
- | |||
- | vzctl set $VEID --capability " | ||
- | |||
- | Bon maintenant on installe **ipvsadm** sur proxmox : | ||
- | |||
- | apt-get install ipvsadm | ||
- | |||
- | Enfin on ajoute tout un tas de module noyaux. Ils ne sont sûrement pas tous nécessaires... | ||
- | |||
- | <code bash> | ||
- | modprobe ip_vs | ||
- | modprobe ip_vs_dh | ||
- | modprobe ip_vs_ftp | ||
- | modprobe ip_vs_lblc | ||
- | modprobe ip_vs_lblcr | ||
- | modprobe ip_vs_lc | ||
- | modprobe ip_vs_nq | ||
- | modprobe ip_vs_rr | ||
- | modprobe ip_vs_sed | ||
- | modprobe ip_vs_sh | ||
- | modprobe ip_vs_wlc | ||
- | modprobe ip_vs_wrr | ||
- | </ | ||
- | |||
- | Et pour finir la préparation de proxmox, on installe de quoi faire du bridge, si ce n'est pas déjà fait. | ||
- | |||
- | aptitude install bridge-utils | ||
- | |||
- | On redémarre maintenant les deux conteneurs, et on peut passer à la suite. | ||
- | |||
- | ===== Installation de Keepalived ===== | ||
- | |||
- | Installons maintenant keepalived : | ||
- | |||
- | apt-get install keepalived | ||
- | |||
- | Ensuite, on allume bien ses interfaces réseau, sur les deux OpenVZ : | ||
- | |||
- | | ||
- | |||
- | Sinon ça risque pas de marcher ! | ||
- | |||
- | Voici le fichier de conf du master : ''/ | ||
- | |||
- | <code bash> | ||
- | vrrp_script chk_apache { | ||
- | script " | ||
- | interval 2 | ||
- | weight 2 | ||
- | fall 2 | ||
- | rise 2 | ||
- | } | ||
- | |||
- | vrrp_instance VI_1 { | ||
- | interface eth3 | ||
- | state MASTER | ||
- | virtual_router_id 51 | ||
- | priority 101 | ||
- | virtual_ipaddress { | ||
- | 157.159.40.175/ | ||
- | } | ||
- | track_script { | ||
- | chk_apache | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | Pour expliquer, on crée une instance VRRP master, sur eth3. Il s'agit d'un routeur virtuel d'id 51. Il a une priorité de 101. On donne ensuite l' | ||
- | |||
- | Enfin on mentionne comment vérifier que apache tourne bien. On vérifie toutes les deux secondes que le processus est bien présent. Et on attend deux check pour crier au loup. | ||
- | |||
- | Voili voilou, rien de plus ;-) | ||
- | |||
- | Concernant le client : ''/ | ||
- | |||
- | <code bash> | ||
- | vrrp_script chk_apache { | ||
- | script " | ||
- | interval 2 | ||
- | weight 2 | ||
- | fall 2 | ||
- | rise 2 | ||
- | } | ||
- | |||
- | vrrp_instance VI_1 { | ||
- | interface eth3 | ||
- | state BACKUP | ||
- | virtual_router_id 51 | ||
- | priority 100 | ||
- | virtual_ipaddress { | ||
- | 157.159.40.175/ | ||
- | } | ||
- | track_script { | ||
- | chk_apache | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | Bah c'est exactement la même chose, mais un chouïa moins prioritaire... | ||
- | |||
- | Voilà, il ne reste plus qu'à observer le résultat ! | ||
- | |||
- | On démarre donc keepalived sur les deux machines : | ||
- | |||
- | / | ||
- | |||
- | Chez moi ça marche, je peux killer apache où je veux, je continue à avoir le service, tant que je coupe pas les deux en même temps. | ||
- | |||
- | Là ou nous en sommes, nous n' | ||
- | |||
- | route add default gateway 157.159.40.129 | ||
- | |||
- | Personnelement, | ||
- | - allumer l' | ||
- | - lancer keepalived | ||
- | - ajoute une route qui me sert de gateway. | ||
- | |||
- | Une solution plus propre serais d' | ||
- | |||
- | Voilà voilà ;-) | ||
- | |||
- | ==== Un peu plus de sécurité ==== | ||
- | |||
- | Si quelqu' | ||
- | |||
- | Pour celà, il a juste besoin de connaitre : | ||
- | - L'ip en question | ||
- | - Le virtual_router_ip ( en général 51 dans les confs ...) | ||
- | |||
- | Il ne lui reste ensuite plus qu'à installer keepalived sur une de ses machines pour ensuite s' | ||
- | |||
- | Un moyen de se défendre contre ceci serait de mettre un mot de passe : | ||
- | |||
- | < | ||
- | authentication { | ||
- | auth_type PASS | ||
- | auth_pass 1111 | ||
- | } | ||
- | </ | ||
- | |||
- | Je ne peux pas garantir que ça ne passe pas en clair... | ||
- | |||
- | Conclusion, utiliser keepalived dans des VLANs ou il n'y a que des gens de confiance... | ||
- | |||
- | ===== Liens utiles ===== | ||
- | |||
- | Voici les liens sur lesquels je me suis appuyé : | ||
- | * http:// | ||
- | * http:// | ||
- | * De très beaux exemples de confs : https:// | ||
- | |||
- | Dans le même style, des pare-feux redondants : | ||
- | |||
- | * Un protocole similaire, [[http:// | ||
- | |||
- | --- // | ||
- |