original in en Atif Ghaffar
en to fr Iznogood
Atif est un caméléon. Il change de rôle, passant d'Administrateur Système,
à programmeur, professeur, chef de projet, ou quoi que ce soit d'autre
permettant l'aboutissement d'un travail.
A l'occasion, vous pouvez le trouver en train de programmer ou d'écrire de la
documentation sur son portable assis sur le siège des toilettes.
Atif pense qu'il doit beaucoup à Linux, à la communauté open source et à ses
projets pour lui avoir servi de professeur.
Pour en savoir plus, consultez sa page personnelle
Maintenant, soyons sérieux.
Même si je crois aveuglément en Linux, je ne fais pas confiance aux sociétés qui fabriquent les machines, alimentations, cartes réseaux, cartes mères, etc... et j'ai toujours peur que si l'une d'elles tombe en panne, mon système devienne inutilisable. Le service sera alors indisponible, sans parler du fait que je vais arrêter tous les services de l'entreprise, même ceux qui n'y sont pas liés directement. Par exemple :
La Haute Disponibilité est ce qu'elle dit qu'elle est.
C'est à dire quelque chose qui est Hautement Disponible.
Certains services sont vraiment importants pour maintenir le bon fonctionnement de votre société.
Exemple:
Dans cet exemple, nous allons créer théoriquement un cluster Actif/Passif
faisant tourner un serveur apache, pour l'intranet.
Pour créer ce petit cluster, nous allons utiliser une bonne machine avec
beaucoup de mémoire, plusieurs CPU et une autre avec juste ce qu'il faut de
mémoire et de CPU pour fournir le service.
La première machine sera le noeud maître alors que la seconde sera le noeud de sauvegarde.
Le travail du noeud de sauvegarde est de prendre le relais des services du noeud
maître si ce dernier semble ne pas répondre.
Réfléchissons un peu sur la manière dont les utilisateurs accèdent à l'intranet.
Ils saisissent http://intranet/ sur leur navigateur et le serveur DNS les redirige
vers 10.0.0.100 (IP d'exemple)
Pourquoi ne pas mettre deux serveurs fournissant ce service intranet avec des
adresses IP différentes et de simplement demander au serveur DNS de le rediriger
du premier, s'il tombe en panne, vers le second.
C'est, bien sûr, une des possibilités, mais il y a des informations dans le
cache du DNS sur les clients et peut être que vous préférez alors lancer le
serveur DNS sur un cluster HD.
Une autre possibilité, en cas d'échec du noeud maitre, est de récupérer son
adresse IP pour le noeud esclave afin de permettre les réponses aux requêtes.
Cette méthode est appelée prise de contrôle IP et c'est celle que nous allons
utiliser dans nos exemples. Maintenant tous les navigateurs continueront à
accéder à http://intranet/ qui se traduira par 10.0.0.100, même si le noeud
maitre échoue, sans faire de changements dans le DNS.
Comment le maître/esclave va savoir que l'autre noeud du cluster est en panne?
Ils vont dialoguer l'un avec l'autre par un câble série et un câble Ethernet
croisé (pour la redondance car l'un ou l'autre peut avoir une panne) et contrôler
chacun les pulsations de l'autre (oui, comme vos battements de coeur).
Si vos battements cessent, alors vous êtes probablement mort.
Le programme pour surveiller les pulsations des noeuds de cluster est appelé...
devinez... pulsation (heartbeat).
Heartbeat est disponible sur
http://www.linux-ha.org/download/
Le programme pour la prise de contrôle de l'adresse IP est appelé fake et il
est intégré dans Heartbeat.
Si vous n'avez pas de carte réseau supplémentaire à mettre dans deux machines,
vous pouvez utiliser heartbeat seulement sur un câble série (null modem).
D'un autre coté, les cartes réseau étant bon marché, n'hésitez pas à en ajouter
une pour la redondance.
Comme mentionné précédemment, nous allons utiliser une bonne machine et une
autre un peu moins.
Les deux machines seront équipées de deux cartes réseau chacune et d'au moins
un port série.
Nous aurons besoin d'un câble croisé cat 5 RJ45 (Ethernet) et d'un câble null
modem (câble série croisé)
Nous allons utiliser la première carte réseau sur les deux machines pour leur
adresse IP internet (eth0).
Nous allons utiliser la seconde carte pour faire un réseau privé, entre les deux
machines, pour communiquer par udp avec Heartbeat (eth1).
Nous allons donner aux deux machines leur adresse IP et leur nom.
Par exemple pour eth0 sur les deux noeuds
clustnode1 avec l'adresse IP 10.0.0.1
clustnode2 avec l'adresse IP 10.0.0.2
Maintenant, nous réservons une adresse IP flottante (c'est l'adresse IP du
service que j'ai écrit en gras précédemment)
10.0.0.100 (intranet). Nous n'avons pas besoin de l'assigner à une machine pour
l'instant.
Ensuite, nous configurons les machines pour leur seconde carte réseau et leur
donnons une adresse IP parmi celles qui ne sont pas utilisées.
Par exemple, pour les eth1 des deux noeuds, une adresse IP avec un masque réseau
à 255.255.255.0
adresse IP de clustnode1 : 192.168.1.1
adresse IP de clustnode2 : 192.168.1.2
Enfin nous connectons le câble au port série 1 ou 2 des machines et nous
vérifions qu'elles fonctionnent/communiquent bien l'une avec l'autre.
(Faites en sorte de le connecter au même numéro de port sur les deux machines,
cela sera plus facile de cette manière).
Voir
http://www.linux-ha.org/download/GettingStarted.html
Installer le logiciel est simple. Heartbeat est disponible aux formats rpm
et tar.gz à la fois comme binaire ou comme source.
Si vous avez des problèmes à l'installation, vous ne devriez pas prendre la
responsabilité d'installer un système HD (il ne serait plus HD mais plutôt ND)
Il existe un excellent guide Getting
Started with Linux-HA dont je ne vais pas faire une copie ici.
Configurer Hearbeat
Par exemple, si les fichiers de configuration de Heartbeat sont dans /etc/ha.d
alors
éditez le fichier /etc/ha.d/authkeys avec votre éditeur favori
#/etc/ha.d/authkeys auth 1 1 crc #end /etc/ha.d/authkeys
debugfile /var/log/ha-debug logfile /var/log/ha-log logfacility local0 deadtime 10 serial /dev/ttyS3 #changez ceci par le port approprié et supprimez ce commentaire udp eth1 #supprimez cette ligne si vous n'utilisez pas de seconde carte réseau node clustnode1 node clustnode2
#masternode ip-address service-name clustnode1 10.0.0.100 httpdCeci définit clustnode1 comme étant le noeud maître. Par exemple, lorsque clustnode1 est arrêté, clustnode2 récupère le service mais lorsque clustnode1 est remis en route, il reprend le service. C'est la raison pour laquelle nous utilisons une bonne machine et une un peu moins bonne (clustnode1 est la bonne machine)
/etc/ha.d/httpd startsi elle ne trouve pas le fichier, elle essaiera alors
/etc/rc.d/init.d/httpd start
/etc/ha.d/httpd stops'il ne trouve pas le fichier, il tente alors
/etc/rc.d/init.d/httpd stopLorsque vous avez fini la configuration sur clustnode1, vous pouvez copier les fichiers sur le noeud 2.
Lorsque le service httpd se déplace du noeud 1 vers le noeud 2 il ne voit pas
les mêmes données. Je perds tous les fichiers créés avec les scripts CGI.
Deux réponses:
1. Vous ne devriez jamais écrire dans des fichiers à partir des scripts CGI.
(utilisez plutôt une base de données réseau... MySQL est très bien)
2. Vous pouvez relier les deux noeuds à un système de stockage SCSI externe et
vérifier qu'un seul des deux puisse y accéder au même moment; de même vous devez
régler l'id SCSI de la carte hôte à 6 sur la machine A et la laisser à 7 sur la
machine B ou inversement.
J'ai fait l'essai avec des cartes Adaptec 2940 SCSI et elles permettent de
changer l'id. La plupart des cartes bon marché n'autorise pas la modification.
Certains contrôleurs RAID sont censés être capables de gérer les clusters
mais assurez-vous auprès du vendeur que vous pouvez changer le HOST ID de la
carte sans acheter le kit cluster Microsoft.
Je possèdais deux adaptateurs NetRaid de chez HP et ils ne supportent vraiment
pas Linux. Je les ai cassés pour moins culpabiliser sur l'argent dépensé.
L'étape suivante consiste à acheter des cartes, un hub et un système de stockage
prévus pour la fibre optique de manière à créer un petit SAN (Storage Area
Network). C'est beaucoup plus cher qu'une solution de partage SCSI mais cela
reste un bon investissement.
Vous pouvez lancer GFS (Global File System, voir ci-dessous dans les ressources)
sur le réseau à fibre optique, ce qui vous permet d'avoir un accès transparent
au système de stockage à partir de toutes les machines comme si les données
étaient en local.
Nous utilisons GFS dans un environnement de production sur 8 machines dont 2
d'entre elles ont une configuration HD identique à celle décrite ci-dessus.
Vous pouvez facilement construire un serveur Actif/Actif si vous avez un bon
système de stockage qui permette des accès simultanés. Les exemples sont la
fibre optique et GFS.
Si des systèmes de fichiers réseau comme NFS vous satisfont, vous pouvez
envisager cette solution mais je vous le déconseille.
Dans tous les cas, vous pouvez assigner le service A à clustnode1 et le service
B à clustnode2. Voici, par exemple, mon fichier de ressource hd
clustnode2 172.23.2.13 mysql clustnode1 172.23.2.14 ldap clustnode2 172.23.2.15 cyrusJ'utilise GFS pour le stockage et je n'ai donc pas de problème avec l'accès simultané aux données et je peux lancer autant de services que les machines peuvent en supporter.