Ce document présente la mise en place d'un cluster consitué de 3 VM sous Centos 5.8.
La configuration d'un cluster ne demande que le paramétrage d'un fichier xml nommé /etc/cluster/cluster.conf et présents sur tous les noeuds du cluster.
Deux services assurent la gestion du cluster :
Il importe de correctement configurer le fencing, qui permet de entrer ou sortir un noeud du cluster, pour cela il faut impérativement supprimer la gestion apci de l'alimentation. Le plus efficace est de ne pas démarrer le service au boot
chkconfig --del acpid
Il faut aussi désactiver SELinux dans le fichier /etc/sysconfig/selinux
SELINUX=disabled
Dans un cluster, les noeuds doivent être à la même heure, le plus simple est d'utiliser ntp
yum install ntp chkconfig ntpd on ntpdate pool.ntp.org /etc/init.d/ntpd start
Configurer le client ntp dans le fichier /etc/ntp.conf en ajoutant la ligne suivante :
server pool.ntp.org
Programmer ceci dans un cron en créant le fichier /etc/cron.d/ntpd qui contiendra la ligne suivante :
00 00 * * * root /usr/sbin/ntpd -q -u ntp:ntp
Il existe de nombreuses méthodes dans CentOS pour cela, la plus intuitive est virt-manager, interface graphique permettant ceci. Toutefois pour cet exemple, nous allons employer virt-install avec un fichier kickstart.
Dans un premier temps, il faut mettre en place un serveur Web pour l'accès aux sources de l'installation. Le principe sera de monter l'image ISO du DVD de Cent0S et de le rendre accessible via un serveur Web.
L'installation du serveur httpd est simple :
yum -y install httpd service httpd start chkconfig httpd on
Le plus simple est soit de récupérer l'ISO depuis un mirroir CentOS soit de la recréer depuis le DVD ayant servit à l'installation. Pour cela mettre le DVD dans le lecteur et créer l'ISO
dd if=/dev/cdrom of=/home/centos58.iso
Monter ensuite l'ISO sur un point de montage
mkdir /u01 mount -o loop -t iso9660 /home/centos58.iso /u01
Pour rendre le montage permanent, ajouter la ligne suivante dans /etc/fstab
/home/centos58.iso /u01 iso9660 loop,ro 0 0
Puis créer un lien symbolique pour l'accès Web
ln -s /u01 /var/www/html/centos
En pointant un navigateur sur http://ip_du_serveur/centos, l'arborescence du DVD doit apparaitre.
Un kickstart permet d'installer automatiquement une CentOS sans devoir répondre aux questions. Dans l'exemple, le cluster devra faire tourner un serveur web accessible via une IP flottante en fonction du noeud actif. Le fichier kickstart installera donc le minimum requis ( core ), plus le serveur httpd ainsi qu'un des deux composants de Conga ( ricci ) dont le fonctionnement sera vu plus tard.
Le serveur porte l'IP 192.168.1.100, c'est sur lui que tourne le serveur Web contenant les sources de l'installation. Ce fichier exemple sert pour la création d'une VM nommée vm01.adi100.concarnux.org en IP 192.168.1.101
install url --url http://192.168.1.100/centos lang fr_FR.UTF-8 keyboard fr-latin9 text network --device eth0 --bootproto static --ip 192.168.1.101 --netmask 255.255.255.0 --gateway 192.168.1.1 --nameserver 80.10.246.2 --hostname vm01.adi100.concarnux.org rootpw azerty firewall --disabled authconfig --enableshadow --enablemd5 selinux --disabled timezone --utc Europe/Paris bootloader --location=mbr --driveorder=xvda reboot clearpart --all --initlabel --drives=xvda part /boot --fstype ext2 --size=100 --asprimary part / --fstype ext3 --size=500 --asprimary part swap --size=1024 --asprimary part /usr --fstype ext3 --size=2000 part /var --fstype ext3 --size=1000 part /tmp --fstype ext3 --size=500 part /home --fstype ext3 --size=1 --grow %packages --excludedocs --nobase @core httpd ricci
Sachant de plus que chaque VM est identique, l'unique différence est au niveau de la ligne network, le plus simple est de créer un script shell qui génèrera le kickstart propre à chaque VM et installera la VM avec virt-install. Le script recevant en paramètre l'IP de la VM et son nom DNS.
Il s'agit d'un script très simple, je laisse à chacun le soin de l'améliorer…
#!/bin/sh IP=$1 NOM_DNS=$2 VM=$(echo $(echo $NOM_DNS | cut -d '.' -f1)) echo "La VM portera le nom : $VM et aura pour nom DNS : $NOM_DNS et pour IP : $IP" rm -f /etc/xen/$VM cat <<EOF > /var/www/html/${VM}-ks.cfg install url --url http://192.168.1.100/centos lang fr_FR.UTF-8 keyboard fr-latin9 text network --device eth0 --bootproto static --ip $IP --netmask 255.255.255.0 --gateway 192.168.1.1 --nameserver 80.10.246.2 --hostname $NOM_DNS rootpw azerty firewall --disabled authconfig --enableshadow --enablemd5 selinux --disabled timezone --utc Europe/Paris bootloader --location=mbr --driveorder=xvda reboot clearpart --all --initlabel --drives=xvda part /boot --fstype ext2 --size=100 --asprimary part / --fstype ext3 --size=500 --asprimary part swap --size=1024 --asprimary part /usr --fstype ext3 --size=2000 part /var --fstype ext3 --size=1000 part /tmp --fstype ext3 --size=500 part /home --fstype ext3 --size=1 --grow %packages --excludedocs --nobase @core httpd ricci EOF virt-install --name $VM -p -r 512 --disk path=/home/disks/${VM}.img,size=8 --location http://192.168.1.100/centos -x "cmdline ks=http://192.168.1.100/${VM}-ks.cfg ip=$IP netmask=255.255.255.0 gateway=192.168.1.1 dns=80.10.246.2 hostname=${NOM_DNS}" --nographics
Créer les 3 VM
sh /root/createVM 192.168.1.101 vm01.adi100.concarnux.fr sh /root/createVM 192.168.1.102 vm02.adi100.concarnux.fr sh /root/createVM 192.168.1.103 vm03.adi103.concarnux.fr
Chaque VM est créee avec 512Mo de RAM et un disque dur de 8Go partitonné.
Il est très important que la résolution de noms soit correctement effectuée. Dans notre exemple, chaque machine du cluster aura un fichier /etc/hosts composé des lignes suivantes :
127.0.0.1 localhost 192.168.1.100 adi100.concarnux.fr 192.168.1.101 vm01.adi100.concarnux.fr 192.168.1.102 vm02.adi100.concarnux.fr 192.168.1.103 vm03.adi100.concarnux.fr
Conga permet la gestion du cluster au travers une interface web. Conga est constitué de deux éléments :
Conga assure en fait la gestion transparente sur chaque noeud du fichier /etc/cluster/cluster.conf.
Sur chaque noeud, installer ricci, ce qui a été fait sur les 3 VM, il faut aussi l'installer sur le Dom0 car c'est depuis celui-ci que sera géré le cluster.
Donc sur le serveur adi100.concarnux.org ( 192.168.1.100 ) installer ricci et luci.
yum install ricci luci
Lancer ricci
service ricci start
Configurer luci pour le mot de passe du user admin
luci_admin init
Lancer ensuite luci
service luci start
Le système annonce l'url de connexion, mode sécurisé, ( https://192.168.1.100:8084 )
Se connecter en admin avec le mot de passe créé précédement.
Il faut pour Conga et la gestion du cluster en général ouvrir certains ports sur le parefeu.
iptables -I INPUT -p udp -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT iptables -I INPUT -p tcp -m state --state NEW -m multiport --dports 11111 -j ACCEPT iptables -I INPUT -p tcp -m state --state NEW -m multiport --dports 16851 -j ACCEPT iptables -I INPUT -p tcp -m state --state NEW -m multiport --dports 14567 -j ACCEPT iptables -I INPUT -p tcp -m state --state NEW -m multiport --dports 8084 -j ACCEPT iptables -I INPUT -p tcp -m state --state NEW -m multiport --dports 21064 -j ACCEPT service iptables save service iptables restart