meta données pour cette page
Mise en place d'un cluster PaceMaker
Pacemaker est un gestionnaire de ressource automatisé dans un cluster. Il gère la haute disponibilité de services en détectant et répartissant les charges si besoin. Pour synchroniser les données entre les machines, il utilise son propre système de fichier distribué appelé OCFS2.
ressources :
Pré-requis
Pour que le tout fonctionne correctement sans qu'il y ait de “pollution” sur le réseau. On choisira de déployer deux cartes réseaux sur les machines de manière à pouvoir dédié une interface à la communication entre les machines du cluster.
Pour facilité le déploiement des machines, on utile Vagrant voici son script :
Ainsi nous avons deux machines dont node1 (ip publique : 192.168.1.10, ip privé : 192.168.50.3) et node2 (ip publique : 192.168.1.11, ip privé : 192.168.50.4).
Installation
Admettons que nous utilisons deux serveurs ayant tous les deux les même configurations (2cores, 512Mo de RAM et 9,2Go de disque).
Commençons d'abord par installer les dépendances :
echo "deb http://debian.univ-lorraine.fr/debian/ jessie-backports main contrib non-free" >> /etc/apt/sources.list apt-get update apt-get install -t jessie-backports pacemaker crmsh
On génère ensuite la clé d'authentification sur le nœud maitre :
corosync-keygen
Gathering 1024 bits for key from /dev/random. Press keys on your keyboard to generate entropy. Press keys on your keyboard to generate entropy (bits = 920). Press keys on your keyboard to generate entropy (bits = 1000). Writing corosync key to /etc/corosync/authkey.
On copie la clé sur chacun des noeuds :
scp /etc/corosync/authkey node2:/etc/corosync/
Manuellement sur tous les nodes, on déclare le réseau privé dont les nodes l'utiliserons pour discuter entre-eux :
nano /etc/corosync/corosync.conf
Vérifions que ces lignes soient existantes :
totem { #... interface { ringnumber: 0 bindnetaddr: 192.168.50.0 mcastaddr: 239.255.1.1 mcastport: 5405 } #... }
Puis on démarre le service :
service corosync restart
Pour prouver son bon fonctionnement :
crm_mon --one-shot -V
Stack: corosync [...] 2 nodes and 0 resource configured Online: [ node1 node2 ]
Créer une IP failover
On va maintenant déclarer une IP virtuelle qui va être liée à une ressource que l'on va déclarer. Pour se faire, on se connecte au logiciel client et créons une nouvelle configuration :
crm cib new mon-cluster
On désactive le stonith car on a pas besoin de vérifier l'intégrité des données sur les nœuds :
configure property stonith-enabled=false
On désactive le quorum vu que nous n'avons pas au moins les 3 nodes (mais juste 2) :
configure property no-quorum-policy=ignore
On définit enfin l'IP que l'on veut et qui sera présent sur le réseau local :
configure primitive failover-ip ocf:heartbeat:IPaddr2 params ip=192.168.0.100 op monitor interval=10s
On vérifie que l'on a pas fait d'erreur syntaxique et on sauvegarde le tout :
configure verify cib use live cib commit mon-cluster quit
Ainsi on peut voir qu'il y a un nouvelle ressource de configuré avec son interface virtuelle :
crm_mon --one-shot -V
Stack: corosync [...] 2 nodes and 1 resource configured Online: [ node1 node2 ] failover-ip (ocf::heartbeat:IPaddr2): Started node1
On peut également obtenir une réponse au ping :
ping 192.168.0.100
PING 192.168.0.100 (192.168.0.100) 56(84) bytes of data. 64 bytes from 192.168.0.100: icmp_seq=1 ttl=64 time=1.10 ms ^C --- 192.168.0.100 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 0.740/0.924/1.108/0.184 ms
Créer une redondance Apache
Les commandes sont globalement les même vu que notre cluster est composé que de deux machines :
crm cib new apache-cluster
On déclare ainsi la primitive suivante :
configure primitive httpd ocf:heartbeat:apache params configfile="/etc/apache2/apache2.conf" statusurl="http://192.168.1.100/server-status" op start timeout="60s" op stop timeout="60s" op monitor interval="10s"
Puis on vérifie et on enregistre le tout :
configure verify cib use live cib commit apache-cluster quit
Ainsi on peut voir apparaitre une seconde ressource :
crm_mon --one-shot -V
Stack: corosync [...] 2 nodes and 2 resources configured Online: [ node1 node2 ] failover-ip (ocf::heartbeat:IPaddr2): Started node1 httpd (ocf::heartbeat:apache): Started node2
Modifier le comportement du cluster
Lors de la création de la précédente ressource, il faut indiquer à Corosync de démarrer les groupes de ressource que l'on veut. Par exemple la commande ci-dessous cite les deux ressources construire précédemment :
crm configure group Cluster httpd failover-ip meta target-role="Started"
A ce moment là, sur chacun des noeuds, on peut voir ces directives apparaître :
crm configure show
[...] group Cluster httpd failover-ip \ meta target-role=Started [...]
Sinon pour le stopper :
crm configure group Cluster httpd failover-ip meta target-role="Stopped"
Migrer une ressource
Par exemple on veut déplacer une ressource du node1 vers le node2 :
crm resource migrate failover-ip node2
Ainsi lorsque l'on liste les interface réseaux des machines, on verra que l'interface détenant l'IP 192.168.1.100 se retrouve sur le node2 et non plus sur le node1.