MODOP – QEMU HA – Partie 4 – Installation HA Web Machine Sheepdog

Mise en place du réseau Bridge pour LAN VM (6 machines)

Suppression IPv6 et Forward ipv4(6 machines)

[root@node0x-sheepdog home]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
[root@node0x-sheepdog home]# echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
[root@node0x-sheepdog home]# echo "net.ipv6.conf.all.autoconf = 0" >> /etc/sysctl.conf
[root@node0x-sheepdog home]# echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
[root@node0x-sheepdog home]# echo "net.ipv6.conf.default.autoconf = 0" >> /etc/sysctl.conf
[root@node0x-sheepdog home]# sysctl -p

Inventaire des besoins (6 machines)

[root@node0x-sheepdog home]# ip a


Carte Réseau eth1 présente pour le réseau des VM

[root@node0x-sheepdog ~]# modinfo bridge


Module « Bridge » chargé

Installation du paquet nécessaire (6 machines)

[root@node0x-sheepdog ~]# yum -y install bridge-utils

Création du Bridge vmbr0 (6 machines)

[root@node0x-sheepdog ~]# vi /etc/sysconfig/network-scripts/ifcfg-vmbr0

DEVICE="vmbr0"
BOOTPROTO="static"
IPADDR="192.168.1.21x"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.1"
DNS1=192.168.1.1
ONBOOT="yes"
TYPE="Bridge"
NM_CONTROLLED="no"

Connecter eth1 sur vmbr0 (6 machines)

[root@node0x-sheepdog ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
NM_CONTROLLED=no
BRIDGE=vmbr0

Démarrrer le bridge et eth1 (6 machines)

[root@node0x-sheepdog ~]# ifup vmbr0
[root@node0x-sheepdog ~]# ifup eth1

Configuration le Bridge avec Qemu (6 machines)

[root@node0x-sheepdog ~]# echo "allow vmbr0" >> /usr/local/etc/qemu/bridge.conf
[root@node0x-sheepdog ~]# chown root:root /usr/local/etc/qemu/bridge.conf
[root@node0x-sheepdog ~]# chmod 0640 /usr/local/etc/qemu/bridge.conf

Mise en place de la machine web sur sheepdog et Qemu

Création de web01 via Clone client07 (node04)

[root@node0x-sheepdog ~]# dog vdi snapshot client01

[root@node0x-sheepdog ~]# dog vdi clone -s1 -r -v client01 web01
[root@node0x-sheepdog ~]# dog vdi list

Installation KeepAlive (6 machines)

MAP des IP LAN VM et KeepAlive

  • node04-sheepdog
    • vmbr0 : 192.168.1.210
  • node05-sheepdog
    • vmbr0 : 192.168.1.211
  • node06-sheepdog
    • vmbr0 : 192.168.1.212
  • node07-sheepdog
    • vmbr0 : 192.168.1.213
  • node08-sheepdog
    • vmbr0 : 192.168.1.214
  • node09-sheepdog
    • vmbr0 : 192.168.1.215

VIP KeepAlive : 172.17.186.40

Installation des paquets nécessaires (6 machines)

[root@node04-sheepdog vm]# yum install -y keepalived
[root@node04-sheepdog vm]# yum -y install ipvsadm

Chargement du module ip_vs (6 machines)

[root@node04-sheepdog vm ~]# modprobe ip_vs
[root@node04-sheepdog vm ~]# echo ip_vs >> /etc/module

Configuration KeepAlive (6 machines)

[root@node04-sheepdog vm]# cp /etc/keepalived/keepalived.conf{,-old}
[root@node04-sheepdog vm]# sh -c '> /etc/keepalived/keepalived.conf'

Node04 (Master)

[root@node04-sheepdog vm]# vi /etc/keepalived/keepalived.conf

! /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
 notification_email {
 chris@en-images.info
 }

 notification_email_from chris@en-images.info
 smtp_server localhost
 smtp_connect_timeout 30
 }

vrrp_instance VI_1 {
 state MASTER
 interface eth0
 virtual_router_id 100
 priority 200
 authentication {
 auth_type PASS
 auth_pass droopy2021
 }

 virtual_ipaddress {
 172.17.186.40/24 dev eth0
 }
}
[root@node04-sheepdog ~]# systemctl enable --now keepalived
[root@node04-sheepdog ~]# systemctl status keepalived

[root@node04-sheepdog ~]# ip a

Node05 à Node09 (Backup)

[root@node0x-sheepdog vm]# vi /etc/keepalived/keepalived.conf
  • node05 : priority 199
  • node06 : priority 198
  • node07 : priority 197
  • node08 : priority 196
  • node09 : priority 195
! /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
notification_email {
chris@en-images.info
}
 notification_email_from chris@en-images.info
 smtp_server localhost
 smtp_connect_timeout 30
}

vrrp_instance VI_1 {
 state BACKUP
 interface eth0
 virtual_router_id 100
 priority 19X

authentication {
 auth_type PASS
 auth_pass droopy2021
}

virtual_ipaddress {
172.17.186.40/24 dev eth0
}
}
[root@node0x-sheepdog ~]# systemctl enable --now keepalived
[root@node0x-sheepdog ~]# systemctl status keepalived

Configuration spécification réseaux (6 machines)

[root@node0x-sheepdog vm]# echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf
[root@node0x-sheepdog vm]# sysctl -p

Règles firewall (6 machines)

[root@node0x-sheepdog vm]# firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent --zone=public
[root@node0x-sheepdog ~]# firewall-cmd --add-service=vnc-server --permanent --zone=public
[root@node0x-sheepdog vm]# firewall-cmd --reload

Script HA web01 sur Machine Portant la VIP (node04)

Si la VIP n’est pas présente, on considère que la machine est dysfonctionnelle.

Script BASH

[root@node0x-sheepdog vm]# vi web.sh

#!/bin/bash
VIP=172.17.186.40
LOG=/var/log/webVM.log

while true
do
sleep 1
CHECK_VIP=`ip a show eth0 |grep ${VIP}|wc -c`
APP_VM=`ps -aux|grep web01 |grep -v grep |head -1 | awk '{print $2}'|wc -c`

if [[ ${CHECK_VIP} == 0 ]]
then
 if [[ ${APP_VM} != 0 ]]
 then
 echo "PID présent et perte de la VIP - On kill le PID de la machine" >> $LOG
 KILL_VM=`ps -aux|grep web01 |grep -v grep |head -1 | awk '{print $2}'`
 kill -9 ${KILL_VM}
 fi

else

 if [[ ${APP_VM} == 0 ]]
 then
 echo "On démarre la machine car VIP existe pas de PID Machine" >> $LOG
 qemu-system-x86_64 \
 -name web01 \
 -enable-kvm \
 -drive file=sheepdog:web01,if=virtio \
 -net nic -net bridge,br=vmbr0 \
 -m 1024 \
 -smp 2 -k fr \
 -vga std \
 -vnc :1 \
 -usbdevice tablet \
 -boot order=c \
 -daemonize
 fi

fi

done

Déployer le script sur les autres nodes (node04)

[root@node0x-sheepdog vm]# scp /home/vm/web.sh root@172.17.186.24:/home/vm/web.sh
[root@node0x-sheepdog vm]# scp /home/vm/web.sh root@172.17.186.25:/home/vm/web.sh
[root@node0x-sheepdog vm]# scp /home/vm/web.sh root@172.17.186.26:/home/vm/web.sh
[root@node0x-sheepdog vm]# scp /home/vm/web.sh root@172.17.186.27:/home/vm/web.sh
[root@node0x-sheepdog vm]# scp /home/vm/web.sh root@172.17.186.28:/home/vm/web.sh

Démarrer le service de la machine web(6 machines)

[root@node0x-sheepdog vm]# /home/vm/web.sh &

Bascule HA – VM web01

Machine Maitre Node04 (KeepAlive ON)

[root@node04-sheepdog vm]# ip a show eth0 |grep inet

[root@node04-sheepdog vm]# ps -aux |grep "sheepdog:web01" |grep -v grep

[root@node04-sheepdog vm]# ping -c 4 192.168.1.202

Installation http sur la VM web hébergée sur Qemu

[root@node04-sheepdog ~]# ssh -l root 192.168.1.202

Installation package

[root@web ~]# yum -y install httpd php qemu-guest-agent

Règle firewall

[root@web ~]# firewall-cmd --zone=public --permanent --add-service=http && firewall-cmd --reload

Création site

[root@web ~]# mkdir /home/www
[root@web ~]# chown apache.apache -R /home/www
[root@web ~]# chmod -R 755 /home/www
[root@web ~]# vi /home/www/index.php

<center><h1><b> Serveur Web - QEMU - Sheepdog - Zookeeper </b></h1></center>
<?php

// afficher le nom du fichier de script éxécuté
echo $_SERVER['PHP_SELF'];
echo "<br>";

// afficher l'adresse IP du serveur où le script est éxécuté
echo $_SERVER['SERVER_ADDR'];
echo "<br>";

// afficher le nom d'hôte du serveur
echo $_SERVER['SERVER_NAME'];
echo "<br>";

// afficher la méthode de requête ('GET', 'HEAD', 'POST', 'PUT')
echo $_SERVER['REQUEST_METHOD'];
echo "<br>";

// afficher les paramètres de l'URL
echo $_SERVER['QUERY_STRING'];
echo "<br>";

// afficher le nom du répertoire racine du script
echo $_SERVER['DOCUMENT_ROOT'];
echo "<br>";

// afficher le nom d'hôte de la machine cliente
echo $_SERVER['HTTP_HOST'];
echo "<br>";

// afficher les informations sur le navigateur utilisé
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";

// afficher l'adresse IP du client
echo $_SERVER['REMOTE_ADDR'];
echo "<br>";

?>

Configuration Apache

[root@web ~]# vi /etc/httpd/conf.d/web.conf

<VirtualHost *:80>

 ServerName web.house.cpb
 ServerAlias house.cpb
 DocumentRoot /home/www
 DirectoryIndex index.php

<Directory /home/www>
 Options Indexes FollowSymLinks
 AllowOverride None
 Require all granted
</Directory>

</VirtualHost>
[root@web ~]# systemctl enable --now httpd

Url de la machine web : http://192.168.1.202

Check Bascule de la VM de Node04 => Node05

Modifions le fichier d’index index.php

[root@web ~]# sed -i 's/Serveur Web - QEMU - Sheepdog - Zookeeper/Serveur Web - QEMU - Sheepdog - Zookeeper => Node05/'g /home/www/index.php && exit

Simulons Down Machine Node04

[root@node04-sheepdog vm]# systemctl stop keepalived
[root@node04-sheepdog vm]# ps -aux |grep "sheepdog:web01" |grep -v grep
Aucun processus, La machine n’est plus démarrée sur node04

Check sur la machine node05

[root@node05-sheepdog ~]# ps -aux |grep "sheepdog:web01" |grep -v grep


La machine est bien présente et démarrée sur node05

[root@node05-sheepdog ~]# ip a show eth0 |grep inet


La VIP a basculé sur node05, node04 est « down »

Check Url site Web : http://192.168.1.202

La modification réalisée sur le node04 est bien présente sur la machine web01 démarrée sur Node05

Bascule de la VM de Node05 => Node06

Modifions le fichier d’index index.php

[root@node05-sheepdog ~]# ssh -l root 192.168.1.202
[root@web ~]# sed -i 's/Serveur Web - QEMU - Sheepdog - Zookeeper => Node05/Serveur Web - QEMU - Sheepdog - Zookeeper => Node06/g' /home/www/index.php && exit

Simulons Down Machine Node05

[root@node05-sheepdog ~]# systemctl stop keepalived
[root@node05-sheepdog ~]# ps -aux |grep "sheepdog:web01" |grep -v grep
Aucun processus, La machine web01n’est plus démarrée sur node05

Check sur la machine node06

[root@node06-sheepdog ~]# ps -aux |grep "sheepdog:web01" |grep -v grep


La machine est bien présente et démarrée sur node06

[root@node06-sheepdog ~]# ip a show eth0 |grep inet


La VIP a basculé sur node06 , node04 et node05 sont « down »

Check Url site Web : http://192.168.1.202

La modification réalisée sur node05 est bien préservée grâce au stockage distribué « mode block » par sheepdog

Views: 3

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *