Selon les tags présents sur cette page, celle-ci n'a pas été vérifiée pour une des versions LTS supportées d'Ubuntu.
Apportez votre aide…

Ceci est une ancienne révision du document !



Cluster de deux machines ip virtuelle + supervision d'un service

Ce tutoriel est une sous partie de la documentation pacemaker. Il décrit les différentes étapes de configuration du cluster par l'intermédiaire du crm. Je vous conseille néanmoins de configurer les ressources avec l'interface java de Linbit.

Le but de cette configuration est de créé un cluster de serveur web (ou de reverse proxy) de deux machines. Une adresse virtuelle est partagée entre les deux machines, lorsque l'une d'entre elle est hors ligne l'autre machine peut prendre le relai automatiquement.

Détail des étapes de la configuration:

  1. Adresse ip virtuelle partagée entre les deux membres du cluster ici 192.168.1.100
  2. Lancement, arrêt et supervision d'un service par l'intermédiaire d'un script d'initialisation compatible LSB (ici nginx)
  3. Clonage du service, nginx devra être démarré sur les deux machines
  4. Ordonnancement des ressources le service, nginx devra être démarré pour que l'adresse ip virtuelle soit attribuée à un membre du cluster
Nom de poste Adresse ip
pc 1 machine1 192.168.1.101
pc 2 machine2 192.168.1.102
  • Bien connaître le principe de fonctionnement de pacemaker.
  • Comprendre le principe de norme LSB pour les scripts d'initialisation.
Les scripts d'initialisation sont ceux disponible dans le répertoire /etc/init.d/. Pacemaker va les utiliser pour démarrer, arrêter et superviser l'état du service. C'est pourquoi ces scripts doivent respecter les normes lsb. Pacemaker a par exemple besoin que les scripts possèdent un argument status.
  • Avoir effectuer le tutoriel officiel en anglais est une bonne chose. lien
  • Ne pas avoir peur de lire la documentation officielle de pacemaker qui se trouve ici.

Entrer dans le mode de configuration du cluster

sudo crm configure

Paramétrage des options générales

Premierement nous allons désactivé deux fonctionnalités inutile pour notre cluster

  • mode stonith "shot the other node in the head" permet lorsqu'une machine n'est plus joignable d'être sur que cette machine soit hors ligne
  • quorum indique le nombre minimal de membres pour prendre une décision. Ce paramètre est utile pour les cluster de plus de deux machines

désactivation du mode stonith

property stonith-enabled=false

désctivation du paramètre quorum

property no-quorum-policy=ignore 

Supervision d'un service grace à son script situé dans le dossier /etc/init.d. Pacemaker s'assurera qu'il est bien lancé toutes les 5 secondes.

Paramétrage du service nginx

Avant toute chose pensez à désactiver le démarrage automatique du démon avec la commande ci dessous

sudo update-rc.d -f nginx remove

Syntaxe de base

primitive <nom de la ressource (ce que vous voulez)> lsb::<nom du démon> op monitor interval=5s

Dans notre cas

primitive reverse-proxy lsb::nginx op monitor interval=5s

Clonage de la ressource pour que le démon nginx soit démarré sur les deux machines

Syntaxe de base

clone <nom de la ressource> <nom de la ressource à cloner>

Dans notre cas

clone clone_reverse_proxy reverse-proxy 

Paramétrage de l'ip virtuelle

Création d'une ip virtuelle partagée entre les deux membres du cluster

primitive <nom de la ressource> ocf:heartbeat:IPaddr2 params ip="<adresse ip virtuelle>" broadcast="<adresse de broadcast>" cidr_netmask="<masque en écriture décimal>" nic="<nom de l'interface virtuelle>" meta target-role="started" migration-threshold="2" resource-stickiness="100"

op monitor interval="<interval de temps de supervision>"

explications:

Options explications
target-role started ou stopped l'état dans lequel pacemaker doit maintenir la ressource
migration-threshold nombre de fois maximal d'échec de la ressource, après le nombre de tentatives la machine est déclarée inéligible pour recevoir la ressource
resource-stickiness Ce paramètre est utile lorsque l'on définit une rêgle "location" indiquant la machine élue par défaut pour héberger la ressource. Nous ferons une configuration de ce type plus tard. Ce paramètre empêche la ressource de retourner sur la machine élue par défaut après que celle ci est défaillit et soit revenue en ligne. La ressource devra être migré manuellement. La valeur numérique attribuée à ce paramètre doit être supérieure à celle attribuée dans la rêgle "location".

Dans notre cas

primitive ip_virtuelle ocf:heartbeat:IPaddr2 params ip="192.168.1.100" broadcast="192.168.1.255" cidr_netmask="24" nic="eth0:0" meta target-role="started" migration-threshold="2" resource-stickiness="100"

op monitor interval="10s"

Lien entre les ressources

Par défaut pacemaker répartie les ressources entre les membres du cluster. Bien qu'ici une des ressource soit clonée il est préférable de crée un lien entre les deux ressources clone_reverse_proxy et ip_virtuelle

Syntaxe de base

colocation link-ressources INFINITY: <nom de la deuxième ressource>  <nom de la première ressource>

Dans notre cas

colocation link-ressources INFINITY: ip_virtuelle clone_reverse_proxy 

Il est aussi nécessaire d'établir un ordre de démarrage entre les ressources. En effet l'ip virtuelle ne doit être activée que si le démon nginx est lancée

Syntaxe de base

order <nom de la ressource> mandatory: <première ressource à lancer>  <deuxième ressource>

Dans notre cas

order demon_before mandatory: clone_reverse_proxy  ip_virtuelle

Il peut aussi être intéressant de choisir une machine préférée pour accueillir la ressource. Ici nous voulons que l'adresse ip virtuelle soit activée par défaut sur la machine1.

Syntaxe de base

location <nom ressource> <nom de la ressource> <score>: <nom du poste>

Dans notre cas

location node-master ip_virtuelle 50: machine1

Vérification et application de la configuration

Vérifier que votre configuration est correcte, normalement l'analyse ne doit pas rapporter d'erreurs

verify

Puis appliquez votre configuration au cluster

commit

Afficher l'état du cluster

Affichage de l'état du cluster, avec les compteurs d'échecs

sudo crm_mon -1f

Vous devriez voir un résultat semblable

Online: [ machine1 machine2 ]
Clone Set: clone_reverse_proxy
   Started: [ machine1 machine2 ]
ip_virtuelle	(ocf::heartbeat:IPaddr2):	Started machine1

Vous pouvez facilement vous rendre compte des migrations de ressources dans le cluster en personnalisant les pages internet des serveurs webs nginx. Le chemin de la page d'accueil est /var/www/nginx-default/index.html .

Meurtre du processus nginx

Effectuer les commandes sur le poste hébergeant l'adresse ip virtuelle.

ps -aux | grep nginx
kill <numéro processus>

Vous devriez voir que le compteur d'échec à été incrémenté

Online: [ machine1 machine2 ]
Clone Set: clone_reverse_proxy
   Started: [ machine1 machine2 ]
ip_virtuelle	(ocf::heartbeat:IPaddr2):	Started machine1
Migration summary:
* Node machine2: 
* Node machine1: 
   reverse-proxy:0: migration-threshold=1000000 fail-count=1

et si vous effectué cette commande

sudo /etc/init.d/nginx status

Elle devrait vous retourner ce retour

  • nginx is running

Le processus à bien été redémarrer après qu'il a été tué, Il n'y a pas eu de migration de l'adresse ip.

Blocage du redémarrage du serveur nginx

Cette fois ci nous allons être un peu plus pervers. Nous allons empêcher le serveur nginx de redémarrer. Normalement l'adresse ip devrait migrer vers l'autre machine.

Éditer le fichier /etc/nginx/nginx.conf et ajouter cette ligne au début du fichier

plop !

tuer à nouveau le processus du démon nginx

Vous devriez obtenir ce résultat

Online: [ machine1 machine2 ]
Clone Set: clone_reverse_proxy
   Started: [ machine2 ]
   Stopped: [ reverse-proxy:0 ]
ip_virtuelle	(ocf::heartbeat:IPaddr2):	Started machine2
Migration summary:
* Node machine2: 
* Node machine1: 
   reverse-proxy:0: migration-threshold=1000000 fail-count=1000000

On peut voir que l'adresse ip virtuelle a été migrée vers la machine 2 et que le compteur d'échec à été fixé à sa valeur maximale.


Contributeurs principaux : Miam Miam.

  • tutoriel/pacemaker_configuration_ip_virtuelle_plus_script_lsb.1278093408.txt.gz
  • Dernière modification: Le 18/04/2011, 14:51
  • (modification externe)