Gestion de Cluster · 8 min read · Jan 30, 2026

Gestion de Cluster Xen Avec Ganeti Sur Debian Lenny

Gestion de Cluster Xen Avec Ganeti Sur Debian Lenny

Version 1.0
Auteur : Falko Timme

Ganeti est un système de gestion de virtualisation de cluster basé sur Xen. Dans ce tutoriel, je vais expliquer comment créer une machine virtuelle Xen (appelée instance) sur un cluster de deux nœuds physiques, et comment gérer et basculer cette instance entre les deux nœuds physiques.

Ce document est fourni sans aucune garantie ! Je ne donne aucune garantie que cela fonctionnera pour vous !

[Mise à jour 21/01/2010] J’ai reçu un message de l’équipe de développement de Ganeti :

[…] Au cours des derniers mois, nous avons constaté le fait malheureux que des personnes essaient de suivre vos instructions à la lettre et finissent par installer des versions anciennes ou très anciennes de Ganeti. Pourriez-vous s’il vous plaît mettre à jour les deux tutoriels avec des notes indiquant qu’ils ne sont pas mis à jour pour des versions plus récentes de Ganeti et demander aux gens de consulter la documentation à jour sur http://docs.ganeti.org/ganeti/?

Ce tutoriel est basé sur une ancienne version de Ganeti. Veuillez vous référer à la documentation à jour sur http://docs.ganeti.org/ganeti/.

1 Remarque Préliminaire

Dans ce tutoriel, j’utiliserai les nœuds physiques node1.example.com et node2.example.com :

  • node1.example.com : adresse IP 192.168.0.100 ; sera le maître du cluster.
  • node2.example.com : adresse IP 192.168.0.101 ; sera le nœud principal de la machine virtuelle (alias instance).

Tous deux ont un disque dur de 500 Go dont j’utilise 20 Go pour la partition /, 1 Go pour l’échange, et laisse le reste non partitionné afin qu’il puisse être utilisé par Ganeti (le minimum est de 20 Go !). Bien sûr, vous pouvez changer le partitionnement à votre goût, mais rappelez-vous l’espace inutilisé minimum.

Le cluster que je vais créer sera nommé cluster1.example.com, et il aura l’adresse IP 192.168.0.102. L’IP du cluster 192.168.0.102 sera toujours liée au maître du cluster, donc même si vous ne savez pas quel nœud est le maître, vous pouvez utiliser l’IP du cluster (ou le nom d’hôte cluster1.example.com) pour vous connecter au maître via SSH.

La machine virtuelle Xen (appelée instance dans le jargon de Ganeti) sera nommée inst1.example.com avec l’adresse IP 192.168.0.105. inst1.example.com sera répliquée entre les deux nœuds physiques en utilisant DRBD - vous pouvez voir cela comme une sorte de RAID1 réseau.

Comme vous le voyez, node1.example.com sera le maître du cluster, c’est-à-dire la machine à partir de laquelle vous pouvez contrôler et gérer le cluster, et node2.example.com sera le nœud principal de inst1.example.com, c’est-à-dire que inst1.example.com s’exécutera sur node2.example.com (avec tous les changements sur inst1.example.com répliqués sur node1.example.com avec DRBD) jusqu’à ce que vous le basculiez vers node1.example.com (si vous souhaitez mettre hors service node2.example.com pour maintenance, par exemple). C’est une configuration active-passive.

Je pense qu’il est bon de séparer les rôles entre les deux nœuds, afin que vous ne perdiez pas le maître du cluster et le nœud principal en même temps si un nœud tombe en panne.

Il est important que tous les noms d’hôtes mentionnés ici soient résolvables par tous les hôtes, ce qui signifie qu’ils doivent soit exister dans le DNS, soit vous devez mettre tous les noms d’hôtes dans tous les fichiers /etc/hosts sur tous les hôtes (ce que je vais faire ici).

Tous les nœuds du cluster doivent utiliser la même interface réseau (par exemple, eth0). Si un nœud utilise eth0 et l’autre eth1, alors Ganeti ne fonctionnera plus correctement.

Ok, commençons…

2 Préparation Des Nœuds Physiques

node1 :

Je veux que node1 ait l’adresse IP statique 192.168.0.100, donc mon fichier /etc/network/interfaces ressemble à ceci (veuillez noter que je remplace allow-hotplug eth0 par auto eth0 ; sinon, le redémarrage du réseau ne fonctionne pas, et nous devrions redémarrer tout le système) :

vi /etc/network/interfaces

| # L'interface réseau de boucle auto lo iface lo inet loopback # L'interface réseau principale #allow-hotplug eth0 #iface eth0 inet dhcp auto eth0 iface eth0 inet static address 192.168.0.100 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 |

Si vous avez modifié le fichier, redémarrez votre réseau :

/etc/init.d/networking restart

Ensuite, éditez /etc/hosts. Faites-le ressembler à ceci :

vi /etc/hosts

| 127.0.0.1 localhost.localdomain localhost 192.168.0.100 node1.example.com node1 192.168.0.101 node2.example.com node2 192.168.0.102 cluster1.example.com cluster1 192.168.0.105 inst1.example.com inst1 # Les lignes suivantes sont souhaitables pour les hôtes compatibles IPv6 ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts |

Ensuite, nous devons nous assurer que les commandes

hostname

et

hostname -f

affichent le nom d’hôte complet (node1.example.com). Si vous obtenez quelque chose de différent (par exemple juste node1), faites ceci :

echo node1.example.com > /etc/hostname  
/etc/init.d/hostname.sh start

Après cela, les commandes de nom d’hôte devraient afficher le nom d’hôte complet.

Ensuite, mettez à jour le système :

aptitude update
aptitude safe-upgrade

node2 :

Maintenant, faisons la même chose sur node2.example.com (veuillez garder à l’esprit que node2 a une IP différente !) :

vi /etc/network/interfaces

| # L'interface réseau de boucle auto lo iface lo inet loopback # L'interface réseau principale #allow-hotplug eth0 #iface eth0 inet dhcp auto eth0 iface eth0 inet static address 192.168.0.101 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 |

/etc/init.d/networking restart
vi /etc/hosts

| 127.0.0.1 localhost.localdomain localhost 192.168.0.100 node1.example.com node1 192.168.0.101 node2.example.com node2 192.168.0.102 cluster1.example.com cluster1 192.168.0.105 inst1.example.com inst1 # Les lignes suivantes sont souhaitables pour les hôtes compatibles IPv6 ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts |

echo node2.example.com > /etc/hostname  
/etc/init.d/hostname.sh start
aptitude update
aptitude safe-upgrade

3 Configuration De LVM Sur L’Espace HDD Libre

node1/node2 :

Voyons notre disque dur :

fdisk -l
node1:~# fdisk -l  

Disque /dev/sda : 500.1 Go, 500107862016 octets  
255 têtes, 63 secteurs/piste, 60801 cylindres  
Unités = cylindres de 16065 * 512 = 8225280 octets  
Identifiant de disque : 0x00023cd1  
  
   Dispositif  Démarrer        Fin        Blocs   Id  Système  
/dev/sda1   *           1          62      497983+  83  Linux  
/dev/sda2          63        6141    48829567+  8e  Linux LVM  
node1:~#

Nous allons maintenant créer la partition /dev/sda3 (sur les deux nœuds physiques) en utilisant le reste du disque dur et la préparer pour LVM :

fdisk /dev/sda

node1:~# fdisk /dev/sda

Le nombre de cylindres pour ce disque est fixé à 60801.
Il n’y a rien de mal à cela, mais c’est plus grand que 1024,
et cela pourrait, dans certaines configurations, causer des problèmes avec :

  1. des logiciels qui s’exécutent au démarrage (par exemple, anciennes versions de LILO)
  2. le démarrage et les logiciels de partitionnement d’autres OS
    (par exemple, DOS FDISK, OS/2 FDISK)

Commande (m pour l’aide) : <– n
Commande d’action
e étendue
p partition primaire (1-4)
<– p
Numéro de partition (1-4) : <– 3
Premier cylindre (6142-60801, valeur par défaut 6142) : <– ENTRER
Utilisation de la valeur par défaut 6142
Dernier cylindre ou +taille ou +tailleM ou +tailleK (6142-60801, valeur par défaut 60801) : <– ENTRER
Utilisation de la valeur par défaut 60801

Commande (m pour l’aide) : <– t
Numéro de partition (1-4) : <– 3
Code hexadécimal (tapez L pour lister les codes) : <– L

0 Vide 1e FAT1 W95 caché 80 Ancien Minix be démarrage Solaris
1 FAT12 24 DOS NEC 81 Minix / ancien Lin bf Solaris
2 racine XENIX 39 Plan 9 82 échange Linux / So c1 DRDOS/sec (FAT-
3 usr XENIX 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 84 OS/2 caché C: c6 DRDOS/sec (FAT-
5 Étendue 41 PPC PReP Boot 85 étendue Linux c7 Syrinx
6 FAT16 42 SFS 86 ensemble de volume NTFS da Données Non-FS
7 HPFS/NTFS 4d QNX4.x 87 ensemble de volume NTFS db CP/M / CTOS / .
8 AIX 4e QNX4.x 2ème partie 88 texte Linux de Dell Utilitaire
9 AIX amorçable 4f QNX4.x 3ème partie 8e Linux LVM df BootIt
a Gestionnaire de démarrage OS/2 50 OnTrack DM 93 Amoeba e1 accès DOS
b FAT32 W95 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O
c FAT32 W95 (LBA) 52 CP/M 9f BSD/OS e4 SpeedStor
e FAT16 W95 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs
f FAT16 étendu (LBA) 54 OnTrackDM6 a5 FreeBSD ee EFI GPT
10 OPUS 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/
11 FAT12 caché 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b
12 diagnostique Compaq 5c Priam Edisk a8 Darwin UFS f1 SpeedStor
14 FAT16 caché <3 61 SpeedStor a9 NetBSD f4 SpeedStor
16 FAT16 caché 63 GNU HURD ou Sys ab démarrage Darwin f2 DOS secondaire
17 HPFS/NTF caché 64 Novell Netware b7 fs BSDI fd raid Linux auto
18 AST SmartSleep 65 Novell Netware b8 échange BSDI fe LANstep
1b FAT3 W95 caché 70 DiskSecure Mult bb Boot Wizard caché ff BBT
1c FAT3 W95 caché 75 PC/IX
Code hexadécimal (tapez L pour lister les codes) : <– 8e
Type de système de partition 3 changé en 8e (Linux LVM)

Commande (m pour l’aide) : <– w
La table de partition a été modifiée !

Appel de ioctl() pour relire la table de partition.

AVERTISSEMENT : La relecture de la table de partition a échoué avec l’erreur 16 : Dispositif ou ressource occupé.
Le noyau utilise toujours l’ancienne table.
La nouvelle table sera utilisée au prochain redémarrage.
Synchronisation des disques.
node1:~#


Maintenant, jetons un coup d'œil à notre disque dur à nouveau :

fdisk -l

node1:~# fdisk -l

Disque /dev/sda : 500.1 Go, 500107862016 octets
255 têtes, 63 secteurs/piste, 60801 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Identifiant de disque : 0x00023cd1

Dispositif Démarrer Fin Blocs Id Système
/dev/sda1 * 1 62 497983+ 83 Linux
/dev/sda2 63 6141 48829567+ 8e Linux LVM
/dev/sda3 6142 60801 439056450 8e Linux LVM
node1:~#


Ça a l'air bien. Maintenant, nous devons redémarrer les deux nœuds physiques afin que le noyau puisse lire la nouvelle table de partition :

reboot


Après le redémarrage, nous installons LVM (il est probable qu'il soit déjà installé, mais il vaut mieux être sûr) :

aptitude install lvm2


Après le redémarrage, nous préparons /dev/sda3 pour LVM sur les deux nœuds et l'ajoutons au groupe de volumes xenvg :

pvcreate /dev/sda3
vgcreate xenvg /dev/sda3


(Ganeti veut utiliser un groupe de volumes à lui, c'est pourquoi nous créons xenvg ; théoriquement, nous pourrions utiliser un groupe de volumes existant avec suffisamment d'espace non alloué, mais la commande gnt-cluster verify se plaindra à ce sujet.)
Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.