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.