Haute disponibilité KVM avec SafeKit : Installez le module kvm.safe pour le basculement
Guide d’installation rapide de la haute disponibilité pour KVM
Ce guide explique comment configurer un cluster mirror pour KVM à l’aide de SafeKit, assurant un basculement automatique et une réplication synchrone sans avoir besoin d’un stockage partagé.
Pour obtenir de l’aide, vous pouvez utiliser SafeKit AI 🤖.
1. Vue d’ensemble
- Architecture : utilise un système à deux nœuds (principal/secondaire).
- Protection des données : implémente la réplication synchrone en temps réel pour une perte de données nulle (RPO = 0).
2. Installation
- Logiciel : Installez le moteur SafeKit sur les deux serveurs.
- Module : Téléchargez le module d’application
kvm.safepréconfiguré.
3. Configuration
- Console Web : configurez les dossiers spécifiques contenant les fichiers KVM.
- Surveillance : Commencez à surveiller et à protéger l’application KVM.
Limitations de la haute disponibilité SafeKit
| Limite / Exigence | Raison et impact | Alternative recommandée |
|---|---|---|
| Taille de la réplication : quelques To | Temps de resynchronisation après une défaillance (étape 3) : • Réseau à 1 Gb/s ≈ 3 heures/To • Réseau 10 Gb/s ≈ 1 heure/To (selon les performances d’écriture du disque) | • Utiliser un stockage partagé externe (plus coûteux, plus complexe). |
| Nombre de fichiers : < 1 000 000 | • Performance du temps de resynchronisation après une panne (étape 3). • Temps nécessaire pour comparer chaque fichier entre les deux nœuds. | • Placez les nombreux fichiers à répliquer dans un disque dur virtuel/une machine virtuelle. • Dans ce cas, seuls les fichiers représentant le disque dur virtuel ou la machine virtuelle seront répliqués et resynchronisés. |
| Capacité de basculement : ≤ 32 machines virtuelles | • Chaque machine virtuelle s’exécute dans un module mirror indépendant. • Maximum de 32 modules mirror fonctionnant sur le même cluster. | • Utiliser un stockage partagé externe et une autre solution de clustering de machines virtuelles (plus coûteuse et plus complexe). |
| Architecture réseau : réseau LAN/VLAN entre sites distants | • Basculement automatique de l’adresse IP virtuelle avec 2 nœuds dans le même sous-réseau. • Bonne bande passante pour la resynchronisation (étape 3). • Faible latence pour la réplication synchrone : généralement < 5 ms RTT ; les valeurs plus élevées doivent être validées par rapport au taux d’écriture de l’application. | • Si les deux nœuds se trouvent dans des sous-réseaux différents (ce qui est courant dans le cloud), utilisez d’autres options de réacheminement : un équilibreur de charge, des CLI de fournisseur de cloud, BGP ou une redirection DNS. • Utilisez des solutions de sauvegarde avec réplication asynchrone pour les réseaux à latence élevée. |
Présentation de la solution SafeKit/KVM
La solution est décrite ici : 💡 Haute disponibilité simple Linux KVM sans stockage partagé
Installation de la solution SafeKit/KVM sous Linux (kvm.safe)
Prérequis
- KVM installé sur 2 nœuds Linux.
- Applications critiques installées dans une ou plusieurs machines virtuelles.
- Maximum de 32 machines virtuelles par hôte KVM.
- Les données répliquées sont limitées à quelques téraoctets. Au-delà, le temps de resynchronisation devient important.
- Interconnexion d’au moins 1 Gb/s entre les nœuds (10 Gb/s recommandé pour une resynchronisation plus rapide).
- Le basculement IP nécessite que les deux nœuds soient sur le même LAN ou LAN étendu (L2) — les réseaux L3 routés ne sont pas pris en charge (sauf avec les équilibreurs de charge 🛠️ cloud).
Installation de paquets sous Linux
- Installez la version gratuite de SafeKit sur 2 nœuds Linux. Remarque : la version d’essai gratuite inclut toutes les fonctionnalités SafeKit. À la fin de la période d’essai, vous pouvez activer des clés de licence permanentes sans désinstaller le package.
- Après le téléchargement du paquet safekit_xx.bin, exécutez-le pour extraire le rpm et le script safekitinstall, puis exécutez le script safekitinstall
- Répondez oui à la configuration automatique du pare-feu
- Définissez le mot de passe de la console Web et de l’utilisateur admin par défaut. Définissez le même mot de passe sur tous les nœuds.
Installation du module sous Linux
- Téléchargez le module kvm.safe.
Le module est gratuit. Il contient les fichiers userconfig.xml et les scripts de redémarrage. - Placez kvm.safe dans /opt/safekit/Application_Modules/generic/.
Télécharger kvm.safe (Linux) >
Configuration pas à pas de la solution SafeKit/KVM
⚠️ La configuration KVM est présentée avec une machine virtuelle nommée VM1 et contenant l’application à redémarrer en cas de défaillance.
⚠️ Vous devrez répéter cette configuration pour toutes les machines virtuelles que vous souhaitez répliquer et redémarrer.
1. Prérequis
L’image de la machine virtuelle VM1 se trouve dans le fichier /var/lib/libvirt/images/vm1.qcow2. Avant de configurer SafeKit, vous devez effectuer la configuration suivante pour placer la machine virtuelle dans un répertoire spécifique à vm1 qui sera répliqué par SafeKit.
Sur le nœud 1 :
Arrêter vm1 :
virsh shutdown vm1Créez un répertoire
vm1/:mkdir -p /var/lib/libvirt/images/vm1/Copiez l’image vm1 vers le nouvel emplacement :
cp -a /var/lib/libvirt/images/vm1.qcow2 /var/lib/libvirt/images/vm1/
L’image vm1 d’origine peut être supprimée dès que les tests avec le nouvel emplacement sont réussis.
Modifiez le fichier de configuration vm1 :
EDITOR=vi virsh edit vm1
Et modifiez la ligne :
<source file='/var/lib/libvirt/images/vm1.qcow2'>
par :
<source file='/var/lib/libvirt/images/vm1/vm1.qcow2'>
Définissez l’option de cache sur « aucune » dans le même fichier, pour l’intégrité des données en cas de panne :
<disk type='file' device='disk'> <driver name='qemu' type='qcow2' **cache='none'** />Fermer le fichier de configuration vm1
Désactiver le démarrage automatique de vm1 :
virsh autostart vm1 --disableCréez un fichier de configuration
vm1.xmlpour vm1 :virsh dumpxml vm1 > vm1.xml
Sur le nœud 2 :
Copiez le fichier de configuration
vm1.xmldu nœud 1. Remarque : chaque fois que la configuration vm1 est modifiée sur le nœud 1, vous devez réappliquer la nouvelle configuration sur le nœud 2.Créez vm1, mais ne la démarrez pas :
virsh define vm1.xmlDésactiver le démarrage automatique vm1 :
virsh autostart vm1 --disableCréez le répertoire pour l’emplacement de l’image :
mkdir -p /var/lib/libvirt/images/vm1/
2. Lancez la console SafeKit
- Lancez la console web dans un navigateur sur un nœud du cluster en vous connectant à
http://localhost:9010. - Saisissez
admincomme nom d’utilisateur et le mot de passe défini lors de l’installation.
Vous pouvez également exécuter la console dans un navigateur sur un poste de travail externe au cluster.
⚠️ La configuration de SafeKit s’effectue sur les deux nœuds à partir d’un seul navigateur.
ℹ️ Pour sécuriser la console web, consultez 🛠️ 11. Sécuriser le service web SafeKit dans le Guide de l’utilisateur.

3. Configurer les adresses des nœuds
- Entrez les adresses IP des nœuds, appuyez sur la
Tab keypour vérifier la connectivité et remplissez les noms des nœuds. Si node1 ou node2 est de couleur rouge, vérifiez la connectivité du navigateur aux deux nœuds et vérifiez le pare-feu sur les deux nœuds pour le dépannage 🛠️. - Cliquez ensuite sur
Save and applypour sauvegarder la configuration. - Vérifiez le message
Success✅ sur les deux nœuds. - Si l’
Failurede configuration ❌ se produit sur un nœud, ouvrez l’accordéon ▼ pour ce nœud et consultez les messages. Notez que vous pouvez utiliser l’IA SafeKit 🤖 pour obtenir de l’aide.
ℹ️ Si vous le souhaitez, vous pouvez ajouter un nouveau LAN and nodes (premier ➕) pour créer un deuxième heartbeat et un réseau de réplication dédié.
ℹ️ Si vous cliquez sur Advanced configuration, le fichier cluster.xml s’affiche. Ce fichier est automatiquement renseigné par la console et déployé sur les nœuds.

4. Sélectionnez un module
- Dans
New module, cliquez sur le modulekvm.safe.
ℹ️ Dans la bannière bleue en haut, le nœud 🛜 node1 représente le nœud de connexion de la console. Ce nœud relaie les requêtes vers le node2 si nécessaire.
ℹ️ La console recherche xxx.safe dans le répertoire Application_Modules/generic/ sur le nœud de connexion (node1) si vous y avez placé un module lors de l’installation.

5. Configurer le module
- Choisissez le démarrage
Automaticdu module au démarrage sans délai. - Normalement, vous disposez d’un seul réseau
Heartbeatsur lequel la réplication est effectuée. Cependant, vous pouvez définir un réseau privé si nécessaire (en ajoutant un LAN à l’étape 3). - Indiquez dans
VM_PATHle chemin d’accès racine du répertoire répliqué (/var/lib/libvirt/images). - Saisissez
VM_NAME, le nom de la machine virtuelle (vm1).
Nous supposons que les fichiers de la VM1 se trouvent dans /var/lib/libvirt/images/vm1/ (voir les prérequis). Ce répertoire sera répliqué en temps réel par SafeKit.
ℹ️ Vous n’avez pas besoin de configurer une adresse IP virtuelle. VM1 sera redémarrée sur l’ KVM secondaire avec son adresse IP physique, et cette adresse IP sera redirigée.

6. Vérificateur personnalisé pour détecter les dysfonctionnements de la machine virtuelle
Le vérificateur personnalisé vérifie si la MV est en cours d’exécution (avec la commande ’virsh domstate’). Si la MV n’est pas en cours d’exécution, le vérificateur personnalisé redémarre automatiquement la MV sur le même nœud KVM ou sur l’autre.
- Cliquez sur
Checkers / Custom(voir l’image). Resource nameidentifie la machine virtuelle avec un nom de ressource dans SafeKit :custom.VM_NAME_check.- Avec
restartenAction, la machine virtuelle est redémarrée sur le même nœud KVM. Après 3 redémarrages infructueux en 24 heures, le module SafeKit kvm s’arrête sur le nœud principal et il y a un basculement de la machine virtuelle sur le nœud secondaire. - Si vous définissez
stopstartdansAction, un basculement direct s’effectue sur l’autre nœud KVM dès que la machine virtuelle n’est plus en cours d’exécution.
ℹ️ Pour la maintenance, si vous souhaitez arrêter la machine virtuelle, le vérificateur personnalisé la redémarrera automatiquement. Pour éviter cela, vous pouvez suspendre temporairement le vérificateur 🖼️. Ou vous pouvez le supprimer en supprimant la ligne de configuration dans la console.

7. Modifier les scripts (facultatif)
- Ne modifiez pas les scripts.
8. Chiffrement des communications (facultatif)
- Conservez le chiffrement des communications entre les nœuds.

9. Enregistrer et appliquer
Save and applyla configuration et les scripts sur les deux nœuds.

10. Vérifier la réussite de la configuration
- Vérifiez le message
Success✅ sur les deux nœuds et cliquez surMonitor modules. - Si l’
Failurede configuration ❌ se produit sur un nœud, ouvrez l’accordéon ▼ pour ce nœud et consultez les messages. Notez que vous pouvez utiliser l’IA SafeKit 🤖 pour obtenir de l’aide.

11. Démarrer le nœud avec des données à jour
- Si le nœud 1 possède le répertoire répliqué à jour pour
vm1/, sélectionnez-le et ⋯Force start▶As primary.
Lorsque le nœud 2 sera démarré, toutes les données seront copiées du nœud 1 vers le nœud 2.
⚠️ Si vous faites le mauvais choix, vous risquez de synchroniser des données obsolètes sur les deux nœuds.
⚠️ Il est également supposé que VM1 est arrêtée sur le nœud 1 afin que SafeKit installe les mécanismes de réplication, puis démarre VM1 dans le script start_prim.
⚠️ Utilisez Start pour les démarrages suivants : SafeKit conserve le serveur le plus à jour. Démarrer As primary est un démarrage spécial la première fois ou lors d’opérations exceptionnelles.

12. Attendez la transition vers ALONE (vert)
- Le nœud 1 doit atteindre l’état ALONE (vert), ce qui signifie que le script
start_prima été exécuté sur le nœud 1.
⚠️ Si ALONE (vert) n’est pas atteint ou si VM1 n’est pas démarré, analysez la raison avec le journal du module 🖼️ du nœud 1.
- Cliquez sur l’icône de journal 🔍 du
node1pour ouvrir le journal du module et recherchez les messages d’erreur, tels qu’un vérificateur détectant une erreur et arrêtant le module. - Cliquez sur
start_primdans le journal : les messages de sortie du script sont affichés à droite et les erreurs peuvent être détectées, comme le démarrage incorrect VM1. - Utilisez l’IA SafeKit 🤖 pour obtenir de l’aide concernant les messages du journal.
⚠️ Si le cluster est dans l’état WAIT (red) not uptodate, STOP (red) not uptodate, arrêtez le nœud WAIT et forcez son démarrage en tant que primaire 🖼️.

13. Démarrer le nœud 2
- ⋯
Startle nœud 2 avec son menu contextuel. - Attendez le SECOND état (vert).
ℹ️
- Le nœud 2 reste dans le SECOND état (orange) pendant la resynchronisation des répertoires répliqués (copie du nœud 1 vers le nœud 2).
- Cette opération peut prendre un certain temps en fonction de la taille des fichiers à resynchroniser dans les répertoires répliqués et de la bande passante du réseau.
- Pour voir la progression de la copie, consultez le journal du module 🖼️ et les ressources de réplication 🖼️ du nœud 2. Utilisez l’IA SafeKit 🤖 pour obtenir de l’aide concernant les messages du journal.

14. Vérifiez que le cluster est opérationnel
- Vérifiez que le cluster est vert/vert, que
VM1s’exécute sur le nœud PRIM et qu’elle ne s’exécute pas sur le nœud SECOND.
Dans cet état, seules les modifications apportées aux fichiers sont répliquées en temps réel.

15. Tests
- Arrêtez le nœud PRIM en faisant défiler son menu contextuel vers le bas et en cliquant sur
Stop. - Vérifiez qu’il y a un basculement sur le SECOND nœud qui devrait devenir ALONE (vert).
- Vérifiez avec les outils KVM que
VM1s’exécute sur le nœud 2.
⚠️ Si ALONE (vert) n’est pas atteint sur node2 ou si VM1 n’est pas démarrée, analysez la raison avec le journal du module 🖼️ du nœud 2.
- Cliquez sur l’icône de journal 🔍 du
node2pour ouvrir le journal du module et recherchez les messages d’erreur, tels qu’un vérificateur détectant une erreur et arrêtant le module. - Cliquez sur
start_primdans le journal : les messages de sortie du script sont affichés à droite et les erreurs peuvent être détectées, comme le démarrage incorrect VM1. - Utilisez l’IA SafeKit 🤖 pour obtenir de l’aide concernant les messages du journal.
⚠️
- Si tout est correct, lancez une synchronisation sur node1, ce qui resynchronisera les répertoires répliqués à partir node2.
- Si les choses tournent mal, arrêtez node2 et forcez le nœud 1 à démarrer en tant que primaire 🖼️, qui redémarrera avec ses données localement saines au moment de l’arrêt.
ℹ️ Notez que vous disposez d’une 🕒 chronologie 🖼️ qui peut être utile pour comprendre ce qui se passe dans le cluster.

16. Si nécessaire, configurez un vérificateur de scission de cerveau
- Consultez la section « Quels sont les différents scénarios en cas d’isolement du réseau dans un cluster ? » pour savoir si vous devez configurer un vérificateur de scission de cerveau.
- Accédez à la configuration du module et cliquez sur
Checkers / Splitbrain(voir l’image) pour modifier les paramètres de splitbrain. Save and applyla nouvelle configuration pour la redéployer sur les deux nœuds (le module doit être arrêté sur les deux nœuds pour l’enregistrer et l’appliquer).
Paramètres :
Resource nameidentifie le témoin avec un nom de ressource :splitbrain.witness. Vous pouvez modifier cette valeur pour identifier le témoin.Witness addressest l’argument d’un ping lorsqu’un nœud passe de PRIM à ALONE ou de SECOND à ALONE. Modifiez cette valeur avec l’adresse IP du témoin (un élément robuste, généralement un routeur).- Remarque : vous pouvez définir plusieurs adresses IP séparées par des espaces. Notez que les adresses IP doivent être accessibles à partir d’un nœud, mais pas de l’autre en cas d’isolement du réseau.

17. Réplication des instantanés
Le répertoire qui contient les fichiers XML de l’instantané est :
/var/lib/libvirt/qemu/snapshot/%VM_NAME%
où VM_NAME est le nom de la machine virtuelle (vm1).
Remarque : Si aucune capture d’écran n’a été créée, créez-en une pour générer le répertoire (sinon la configuration SafeKit échouera).
Pour le reproduire :
Dans la configuration du module, cliquez sur
Advanced Configuration(voir l’image) pour modifier leuserconfig.xml.Insérez les lignes ci-dessous dans la section
<rfs>du fichier userconfig.xml :<replicated dir="/var/lib/libvirt/qemu/snapshot/%VM_NAME%" mode="read_only"> </replicated>Save and applyla nouvelle configuration pour redéployer le fichier userconfig.xml modifié sur les deux nœuds (le module doit être arrêté sur les deux nœuds pour enregistrer et appliquer).Créez des instantanés sur le nœud PRIM, soit via virt-manager, soit via une ligne de commande :
virsh snapshot-create-as vm1 snapshot-name
Remarque : lorsque vous créez un instantané à l’aide d’une ligne de commande, vous devez actualiser l’affichage des instantanés dans virt-manager.
Les instantanés créés sur le nœud PRIM sont opérationnels sur le nœud 2 après le basculement, mais ne sont pas répertoriés sur le nœud 2.
Pour importer un instantané sur le nœud 2, vous devez exécuter la commande suivante :
virsh snapshot-create --redefine vm1 /var/lib/libvirt/qemu/snapshot/vm1/snapshot-nameLa ligne de commande pour lister tous les instantanés de vm1 est :
virsh snapshot-list vm1

18. Soutien
- Pour obtenir de l’aide, prenez 2
SnapshotsSafeKit (2 fichiers .zip), un pour chaque nœud.
ℹ️ Plus d’informations sur l’assistance ici.

Démonstration d’une solution de haute disponibilité au niveau des machines virtuelles
Vidéo SafeKit : Clustering au niveau des machines virtuelles avec Hyper-V (5:15)
Dans cette vidéo, découvrez comment SafeKit implémente la haute disponibilité pour Hyper-V sans la complexité d’un SAN. Apprenez à configurer la réplication de machines virtuelles sur deux nœuds pour assurer un basculement transparent pour vos charges de travail virtualisées critiques. Bien que cette démonstration utilise Hyper-V sous Windows, la solution fonctionne de manière identique avec KVM sur Linux.
Chapitres
- 🎬 Vue d’ensemble de l’architecture : 2 nœuds Hyper-V et 2 machines virtuelles (0:49)
- 🎬 Configuration du cluster et des modules hyperv.safe (1:59)
- 🎬 Test en direct : réplication, migration et basculement automatique de la VM en cas de panne (2:26)
Mise en œuvre étape par étape
- 🛠️ Lisez le guide pour configurer un cluster mirror Hyper-V sous Windows.
- 🛠️ Lisez le guide pour configurer un cluster mirror KVM sous Linux.
🔍 Explorez SafeKit
Trouvez des informations sur les fonctionnalités, les architectures, les vidéos, la documentation et l’essai gratuit de SafeKit.
| Ressource | Description | Lien |
|---|---|---|
| Caractéristiques principales | Découvrez pourquoi SafeKit est une solution de haute disponibilité simple et économique. | Découvrez les fonctionnalités clés |
| Cas d’utilisation | Découvrez comment SafeKit assure la disponibilité des applications et des infrastructures critiques. | Explorez les cas d’utilisation |
| Modèle de déploiement | SafeKit assure une haute disponibilité sans SAN ni stockage partagé. | Explorez le modèle de déploiement |
| Stratégies de haute disponibilité | Comparez la haute disponibilité des machines virtuelles avec la haute disponibilité des applications. | Comparez les deux stratégies |
| Spécifications techniques | Consultez les exigences et les limitations techniques des clusters SafeKit. | Lisez les spécifications techniques |
| Vidéos | Regardez des démonstrations de la configuration de SafeKit et du basculement automatique. | Regardez les vidéos techniques |
| Architecture | Découvrez comment le cluster mirror réplique les fichiers en temps réel et gère le basculement. | Découvrez l’architecture Mirror |
| Architecture | Découvrez comment le cluster farm équilibre le trafic réseau et gère le basculement. | Découvrez l’architecture Farm |
| Comparaison de produits | Comparez SafeKit aux clusters de haute disponibilité. | Comparer les solutions |
| Ressources techniques | Trouvez la documentation technique, téléchargez SafeKit et accédez à la version d’essai gratuite. | Accéder à la documentation et à l’essai gratuit |
| Modules d’application | Utilisez les modules SafeKit préconfigurés pour configurer la haute disponibilité de vos applications. | Explorez les modules de l’application |