LightcodeSysadmin Open Source

Mise en place d'un cluster sous linux

Comme cela était expliqué dans l’article sur les clusters de serveur, les clusters sont des groupements de serveurs permettant de faire soit de la redondance soit de répartir une charge de travaille. À travers cet article, vous allez découvrir comment mettre en place ces clusters sous Linux.

Pour information, les démarches qui suivent ont toutes été testées avec Ubuntu Server 10.04. Si vous utilisez une autre distribution, vous allez devoir transformer certaines commandes pour qu’elles correspondent à votre OS.

Heartbeat

Avant de commencer, il faut veiller à définir les serveurs et les IP, en utilisant, par exemple, ce tableau :

Nom IP
Accès au cluster 192.168.1.80
hb1 192.168.1.81
hb2 192.168.1.82

On commence par installer le paquet heartbeat : apt-get install heartbeat.

Puis on édite quelques fichiers, voici un exemple commenté.

Pour /etc/heartbeat/ha.cf, à faire sur les deux serveurs :

# Temps en seconde entre l'envoie de deux paquets
keepalive       2
# Temps en seconde pour considérer que le serveur est inactif
deadtime        10
# Interface réseau utilisée pour envoyer les paquets (ifconfig pour connaître la votre)
bcast           eth0
# Les noms des serveurs (uname -p pour connaître le nom d'un serveur)
node            hb1 hb2
auto_failback   off
respawn         administrateur /usr/lib/heartbeat/ipfail
apiauth         ipfail gid=administrateur uid=administrateur

Ensuite /etc/heartbeat/haresources, à faire sur les deux serveurs en faisant attention à modifier le nom, on met le nom du serveur sur lequel on travaille :

hb1 IPaddr::192.168.1.80/24/eth0

hb1 correspond au serveur sur lesquel on travaille, on ajoute l’IP 192.168.1.80 en tant qu’IP virtuelle sur l’interface eth0. L’IP 192.168.1.80 est l’IP que l’on partage entre les deux serveurs, elle “passe d’un serveur à l’autre”.

Enfin pour /etc/heartbeat/authkeys, à faire sur les deux serveurs :

auth 3
3 md5 hbmdp

Remplacer « hbmdp » par un vrai mot de passe. Ensuite, il faut faire un chmod 600 /etc/heartbeat/authkeys. Pour lancer le service, il suffit de faire un /etc/init.d/heartbeat restart.

Load balancing

Comme je le disais dans l’article théorique, je vais mettre en pratique le « direct routing ». Dans mon cas, je fais ça sur une installation vierge.

Comme pour le heartbeat, je vais dresser un tableau des serveurs :

Nom IP Commentaire
Accès au cluster 192.168.1.100 -
lb 192.168.1.101 load balancer
http1 192.168.1.102 serveur HTTP 1
http2 192.168.1.103 serveur HTTP 2

Sur le serveur, qui répartira la charge, on installera ipvsadm :

# apt-get install ipvsadm

Pour que le service ipvsadm démarre, il faut configurer le paquet ipvsadm : dpkg-reconfigure ipvsadm puis sélectionner “Non”, “Maître” et ensuite donner le nom de votre interface réseau (eth0 par exemple). Ensuite il faut éditer /etc/sysctl.conf pour dé-commenter net.ipv4.ip_forward=1. Et pour finir, tapez : sysctl -p.

On donnera au load balancer l’adresse IP du service :

ifconfig eth0:0 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255

On créé l’adresse IP virtuelle 192.168.1.100 sur l’interface eth0.

On définit les règles du load balancing, je conseil de mettre ça dans un fichier bash et de l’exécuter après :

# On efface toutes les règles
ipvsadm -C

# On définit le service
# "-A" parce que c'est le service
ipvsadm -A -t 192.168.1.100:80

# On définit les serveurs web :
# "-a" parce que c'est un serveur, "192.168.1.100:80" c'est l'identifiant du service
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.102:80 -g
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.103:80 -g

192.168.1.100:80 est l’adresse IP du service, il faut toujours préciser le port. Les adresses 192.168.1.102:80 et 192.168.1.103:80 sont les deux serveurs où on répartira la charge.

Sur les serveurs web, il va falloir contrer le cache ARP, pour cela on fait :

iptables -t nat -A PREROUTING -p TCP -d 192.168.1.100 --dport 80 -j REDIRECT --to-port 80

Dans cette ligne, nous retrouvons l’IP du service 192.168.1.100 et les deux ports 80.

Sortir les serveurs en panne d’un cluster

Il faut d’abord installer ldirectord : apt-get install ldirectord.

Puis on édite /etc/ldirectord.cf :

checktimeout=10
checkinterval=2
autoreload=no

virtual=192.168.1.100:80
   real=192.168.1.102:80 gate
   real=192.168.1.103:80 gate

192.168.1.102 et 192.168.1.103 sont les serveurs où est répartit la charge. 192.168.1.100 est l’adresse IP du service.

Conclusion

Comme je l’avais expliqué dans la partie théorique, vous ne pourrez pas vous servir correctement de ce service sans centraliser ou synchroniser le stockage. Je vous conseille pour cela de faire des recherches du côté de NFS.