Inventaire de l’infrastructure HA KVM
3 Machines hyperviseurs KVM
– node-kvm01
- vSwitch : vmbr1
- ip : 192.168.1.10/24
- vip : 192.168.1.100
- OS : RockyLinux
- vCPU : 2
- DD : 8Go
- NFS: ServeurNAS:/clusterKVM
- Ram : 2Go
– node-kvm02
- vSwitch : vmbr1
- ip : 192.168.1.11/24
- vip : 192.168.1.100
- OS : RockyLinux
- vCPU : 2
- DD : 8Go
- NFS: ServeurNAS:/clusterKVM
- Ram : 2Go
– node-kvm03
- vSwitch : vmbr1
- ip : 192.168.1.12/24
- vip : 192.168.1.100
- OS : RockyLinux
- vCPU : 2
- DD : 8Go
- NFS: ServeurNAS:/clusterKVM
- Ram : 2Go
Machines virtuelles KVM
Spécification de la machine virtuelle KVM – node-Centos7
- Host : node-Centos7
- vSwitch : vmbr0 de KVM
- IP :10.20.0.2/24
- GW :10.20.0.1
- DNS :192.168.1.1
- OS : Centos7
- vCPU : 1
- DD : 8Go
- Ram : 1Go
Installation des machines KVM
1°) Update (3 KVM)
[root@node-kvm0x ~]# dnf update -y
[root@node-kvm0x ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config [root@node-kvm0x ~]# setenforce 0
2°) Installation des Epel (3 KVM)
[root@node-kvm0x ~]# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
3°) Configure Chrony (NTP) (3 KVM)
[root@node-kvm0x ~]# timedatectl
[root@node-kvm0x ~]# timedatectl list-timezones |grep -i Paris Europe/Paris
[root@node-kvm0x ~]# timedatectl set-timezone "Europe/Paris"
4°) Configurer la résolution des hosts (3 KVM)
[root@node-kvm0x ~]# echo "192.168.1.10 node-kvm01" >> /etc/hosts [root@node-kvm0x ~]# echo "192.168.1.11 node-kvm02" >> /etc/hosts [root@node-kvm0x ~]# echo "192.168.1.12 node-kvm03" >> /etc/hosts
5°) Vérification du réseau KVM (3 KVM)
[root@node-kvm01 ~]# ping -c 3 node-kvm02 [root@node-kvm01 ~]# ping -c 3 node-kvm03
[root@node-kvm02 ~]# ping -c 3 node-kvm01 [root@node-kvm02 ~]# ping -c 3 node-kvm03
[root@node-kvm03 ~]# ping -c 3 node-kvm01 [root@node-kvm03 ~]# ping -c 3 node-kvm02
Installation HighAvailability des 3 nodes KVM
1°) Activation packet HighAvailability (3 KVM)
[root@node-kvm0x ~]# yum repolist all | grep -i HighAvailability [root@node-kvm0x ~]# dnf config-manager --set-enabled ha [root@node-kvm0x ~]# yum repolist all | grep -i HighAvailability ha Rocky Linux 8 - HighAvailability activé
2°) Installation pacemaker (3 KVM)
[root@node-kvm0x ~]# dnf install pcs pacemaker -y
3°) Mise en place Firewall HighAvailability (3 KVM)
[root@node-kvm0x ~]# firewall-cmd --permanent --add-service=high-availability [root@node-kvm0x ~]# firewall-cmd --reload
4°) Création « password » pour l’utilisateur hacluster (Défaut Cluster user)
[root@node-kvm0x ~]# passwd hacluster Nouveau mot de passe : MOT_PASSE_USER_haCluster Retapez le nouveau mot de passe : MOT_PASSE_USER_haCluster passwd : mise à jour réussie de tous les jetons d'authentification.
5°) Démarrer le daemon PCS (3 KVM)
[root@node-kvm0x ~]# systemctl enable pcsd.service --now [root@node-kvm0x ~]# systemctl status pcsd.service
6°) Configurer KVM HighAvailability GUI (sur node-kvm01)
- https://IP_Node_kvm01:2224/login
Création du Cluster « Create New »
« Create cluster »
« Use same password for all nodes » et Authenticate »
« Start the cluster » et « Finish »
Sélectionner le Cluster
Les 3 machines sont bien entrées dans le Cluster
Check l’état du cluster (node-kvm01)
[root@node-kvm01 ~]# pcs status
Activer les services pacemaker et corosync (node-kvm02 et node-kmv03)
[root@node-kvm02 ~]# systemctl enable pacemaker [root@node-kvm03 ~]# systemctl enable corosync
Check le quorum (sur un des nodes)
[root@node-kvm0x ~]# corosync-quorumtool
Ajouter une adresse VIP sur notre Cluster pour le HeartBeat
« Ressources »
« Add »
Remplir les Champs puis « Option Arguments »
Remplir le « cidr_netmask » et « monitor_retries »
Et « Create ressource »
Correction de BUG d’installation (3 KVM)
Si sur l’interface GUI vous rencontrez le message « BLOCKED » et sur le pcs status « Stopped »
Il faudra désactiver stonith
[root@node-kvm0x ~]# pcs property set stonith-enabled=false
[root@node-kvm0x ~]# ip a show ens18
[root@node-kvm0x ~]# pcs status resources
Check Heartbeat INIT
Passage de node-kvm01 « standby »
[root@node-kvm02 ~]# pcs node standby node-kvm01 [root@node-kvm02 ~]# pcs status
La VIP vient d’être transférée sur l’host node-kvm02 suite au standby du node-kvm01
Passage de node-kvm02 « standby » avec node-kvm01 « standby »
[root@node-kvm03 ~]# pcs node standby node-kvm02 [root@node-kvm03 ~]# pcs status
La VIP se transfert sur le node-kvm03.
Retour des node-kvm02 et node-kvm01
[root@node-kvm03 ~]# pcs node unstandby node-kvm02 [root@node-kvm03 ~]# pcs node unstandby node-kvm01 [root@node-kvm03 ~]# pcs status
Installation des services KVM sur les 3 nodes
1°) Installation KVM et Middleware (3 KVM)
[root@node-kvm0x ~]# dnf -y install qemu-kvm libvirt virt-install
Check Chargement du module kvm (3 KVM)
[root@node-kvm0x ~]# lsmod | grep kvm
[root@node-kvm0x ~]# systemctl enable --now libvirtd [root@node-kvm0x ~]# systemctl status libvirtd
2°) Création du bridge vmbr0 – Réseau VM (3 KVM)
Création Bridge « vmbr0 » (3 KVM)
[root@node-kvm0x ~]# vi vmbr0.xml
<network> <name>private</name> <forward mode='nat'/> <bridge name='vmbr0' stp='on' delay='0'/> <ip address='10.20.0.10' netmask='255.255.255.0'> <dhcp> <range start='10.20.0.100' end='10.20.0.254'/> </dhcp> </ip> </network>
Attacher la configuration du bridge vmbr0 (3 KVM)
[root@node-kvm0x ~]# virsh net-define vmbr0.xml Réseau private défini depuis vmbr0.xml
[root@node-kvm0x ~]# virsh net-list --all
Activer le Bridge/Réseau sur KVM (3 KVM)
[root@node-kvm0x ~]# virsh net-start private Réseau private démarré
Activer « Autostart » Bridge/Réseau sur KVM (3 KVM)
[root@node-kvm0x ~]# virsh net-autostart private Réseau private marqué en démarrage automatique
[root@node-kvm0x ~]# virsh net-list --all
[root@node-kvm0x ~]# route -n
[root@node-kvm0x ~]# ip a show vmbr0
Mount Ressource NFS – Centraliser les services libvirt KVM
1°) Installation NFS client paquet (3 KVM)
[root@node-kvm0x ~]# yum install nfs-utils [root@node-kvm0x ~]# showmount --exports ServeurNAS
[root@node-kvm0x ~]# echo "IP_NAS ServeurNAS" >> /etc/hosts [root@node-kvm0x ~]# mkdir /clusterKVM [root@node-kvm0x ~]# echo "ServeurNAS:/volume3/DataStoreKVM /clusterKVM nfs defaults 0 0 " >> /etc/fstab [root@node-kvm0x ~]# mount /clusterKVM
2°) Check montage NFS
[root@node-kvm0x ~]# df -H /clusterKVM
[root@node-kvm01 ~]# mkdir -p /clusterKVM/kvm/{images,iso}
Création Machine virtuelle Centos7 KVM (node-kvm01)
Spécification de la machine virtuelle KVM – node-Centos7
- Host : node-Centos7
- vSwitch : vmbr0 de KVM
- IP :10.20.0.2/24
- GW :10.20.0.1
- DNS :192.168.1.1
- OS : Centos7
- vCPU : 1
- DD : 8Go
- Ram : 1Go
1°) Récupération de l’ISO (node-kvm01)
[root@node-kvm01 ~]# cd /clusterKVM /kvm/iso/ [root@node-kvm01 iso]# dnf -y install wget [root@node-kvm01 iso]# wget http://mirror.softaculous.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso
2°) Check le node Actif dans le Cluster (node-kvm01)
[root@node-kvm01 ~]# pcs status
3°) Lancement de la création de la VM (node-kvm01)
[root@node-kvm01 iso]# virt-install --name node01-kvm-el7 --ram 1024 --disk path=/clusterKVM/kvm/images/node-kvm-el7.img,size=8 --vcpus 1 --os-variant rhel7.1 --network bridge=vmbr0 --graphics none --console pty,target_type=serial --location /clusterKVM/kvm/iso/CentOS-7-x86_64-Minimal-2009.iso --extra-args 'console=ttyS0,115200n8 serial'
Procéder à l’installation de la machine…
La machine est désormais installée sur le node-kvm01 et sur le NFS /clusterKVM/kvm/images/
[root@node-kvm02 ~]# ls -al /clusterKVM/kvm/images/node-kvm-el7.img
Machine virtuelle
[root@node-kvm01 ~]# virsh list --all
Centralisation conf du Cluster KVM (3 KVM)
1°) Stopper la machine
[root@node-kvm01 ~]# virsh shutdown node01-kvm-el7
2°) Déplacement de la structure KVM sur NFS
Node-kvm01
[root@node-kvm01 ~]# cp -r /etc/libvirt /clusterKVM/kvm/libvirt
[root@node-kvm01 ~]# mv /etc/libvirt{,-old}
[root@node-kvm01 ~]# cd /etc
[root@node-kvm01 etc]# ln -s /clusterKVM/kvm/libvirt /etc/libvirt
[root@node-kvm01 ~]# ls -al /etc/libvirt
Node-kvm02
[root@node-kvm02 ~]# mv /etc/libvirt{,-old}
[root@node-kvm02 ~]# cd /etc
[root@node-kvm02 etc]# ln -s /clusterKVM/kvm/libvirt /etc/libvirt
[root@node-kvm02 etc]# ls -al /etc/libvirt
Node-kvm03
[root@node-kvm03 ~]# mv /etc/libvirt{,-old}
[root@node-kvm03 ~]# cd /etc
[root@node-kvm03 etc]# ln -s /clusterKVM/kvm/libvirt /etc/libvirt
[root@node-kvm03 etc]# ls -al /etc/libvirt
Check de la centralisation
La conf est désormais centralisé sur le NFS sur /clusterKVM/kvm/libvirt
3°) Check démarrage de la machine sur le node-kvm02
[root@node-kvm02 etc]# virsh start node01-kvm-el7
Domain node01-kvm-el7 started
[root@node-kvm02 etc]# virsh list --all
[root@node-kvm02 etc]# ping -c 3 10.20.0.2
[root@node-kvm02 etc]# ssh -l root 10.20.0.2
La machine est bien actif sur le node-kvm02
Création script KVM HA Fault Server
1°) Structure (node-kvm01)
[root@node-kvm01 home]# cd /etc/libvirt
[root@node-kvm01 libvirt]# mkdir script
[root@node-kvm01 libvirt]# cd script/
2°) Script KVM HA (node-kvm01)
#!/bin/bash
PATH_APP=/clusterKVM/kvm/libvirt/script
LOG_FILE=${PATH_APP}/${HOSTNAME}_check.log
APP_PCS=/sbin/pcs
APP_VIRSH=/usr/bin/virsh
while true
do
####################################################
# Check Nom machine Client et Nom Machine VIP #
####################################################
echo "-----------------------------" >> ${LOG_FILE}
echo " hostname :${HOSTNAME} " >> ${LOG_FILE}
HOST_VIP=`${APP_PCS} status |grep Started |awk -F"Started" '{print $2}'`
echo " Host portant le VIP : ${HOST_VIP} " >> ${LOG_FILE}
echo "" >> ${LOG_FILE}
###################################################
### Check si le client est le client VIP #
###################################################
if [ ${HOSTNAME} == ${HOST_VIP} ]
then
echo "cette machine KVM ${HOSTNAME} est porteur du VIP" >> ${LOG_FILE}
echo "" >> ${LOG_FILE}
#############################################
## Redémarre toutes les machines éteintes #
#############################################
for i in `${APP_VIRSH} list --inactive |grep -v Id |grep -v '^-' |grep '^ '| grep -v 'Nom' | awk '{print $2}'`
do
echo "démarrage de la machine virtuelle :$i" >> ${LOG_FILE}
${APP_VIRSH} start $i
done
else
echo "cette ${HOSTNAME} ne porte pas le VIP"
fi
echo "-----------------------------" >> ${LOG_FILE}
sleep 1
done
3°) Création du service hakvm (3 KVM)
[root@node-kvm0x ~]# vi /etc/systemd/system/hakvm.service
[Unit]
Description=hakvm
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
ExecStart=/etc/libvirt/script/ha_kvm.sh
[Install]
WantedBy=multi-user.target
[root@node-kvm0x ~]# systemctl daemon-reload
[root@node-kvm0x ~]# systemctl enable hakvm.service
Created symlink /etc/systemd/system/multi-user.target.wants/hakvm.service → /etc/systemd/system/hakvm.service.
[root@node-kvm0x ~]# systemctl start hakvm.service
[root@node-kvm0x ~]# systemctl status hakvm.service
Check script KVM HA Fault Server
1°) Inventaire initial
La machine virtuelle « node01-kvm-el7 » et démarrée sur le node Actif « node-kvm01 »
2°) Down Fault Server node-kvm01
Nous allons down la machine node-kvm01 et donc déplacer le VIP sur un nouveau node actif
[root@node-kvm01 ~]# init 0
La machine virtuelle « node01-kvm-el7 » redémarre sur le node actif « node-kvm02 »
[root@node-kvm02 ~]# systemctl status hakvm.service
3°) Down Fault Server node-kvm02
Pour garder le quorum nous redémarrons le node-kvm01.
Nous allons down la machine node-kvm02 (porteur VIP) et donc déplacer le VIP sur un nouveau node actif
[root@node-kvm02 ~]# init 0
La machine virtuelle « node01-kvm-el7 » redémarre sur le node actif « node-kvm01 »
[root@node-kvm01 ~]# systemctl status hakvm.service
Dans notre choix de HA KVM , les machines virtuelles sont redémarrées uniquement sur l’hyperviseur portant la VIP. il est évident que de redémarrer des machines suite à la perte d’un hyperviseur « maître » n’est pas la résilience ultime. En effet , le temps de redémarrer la machine provoque une interruption de service. On abordera ce sujet via la réplication une prochaine fois.
Views: 14