La haute disponibilité logicielle via Heartbeat
Configuration et utilisation de Heartbeat |
"The box said: "install on Windows 95, NT 4.0 or better". So I installed it on Linux". (Anonyme) |
Vous allez maintenant découvrir comment configurer Heartbeat pour faire fonctionner une solution avec une seule machine active. La solution active / active ne sera PAS expliquée, pour deux raisons simples :
- Elle nécessiterait au bas mot dix pages d'explications
- Le résultat serait un copier / coller d'un tutoriel extrêmement bien fait que vous trouverez dans la partie références.
Ce qui suit fonctionne sur des machines Linux version Debian stable (sarge)
avec un noyau en version 2.6. Je considèrerai que les manipulations de base
comme la création de fichiers ou le changement des droits sont acquises.
Dans le cas contraire, vous pourrez vous reporter au guide de référence Debian :
http://qref.sourceforge.net/Debian/quick-reference/index.fr.html.
Prévoir un temps de formation conséquent et une bonne cafetière.
Vous devrez avoir un droit d'administration pour effectuer toutes les commandes. Vous devrez dont vous connecter en root sur votre machine, ou utiliser le mécanisme de sudo.
Les logiciels utilisés pour cette partie sont :
- heartbeat, du projet High-Availability Linux Project
- UltraMonkey
Règles de base
Voici les quelques points à respecter pour que tout se passe bien. Sinon, n'oubliez jamais que de mauvaises choses pourront se produire.
- Ne pas configurer l'IP virtuelle sur votre système Linux. C'est Heartbeat qui s'en occupera lorsque le besoin s'en fera sentir.
- Les services qui seront lancés par Heartbeat ne doivent pas être chargés automatiquement au démarrage de Linux. C'est également Heartbeat qui se chargera de cela le moment venu.
- Enfin, Les fichiers de paramètres doivent être identiques sur les deux serveurs pour fonctionner.
Installation du programme
Le paquet Debian pour mettre en place la solution s'appelle 'heartbeat'. Son installation se fait comme suit :apt-get install heartbeat
Configuration du programme
/etc/heartbeat/ha.cf
Ce fichier détermine la liste des machines à utiliser et la manière de dialoguer entre elles. Une liste exhaustive des paramètres pourra être trouvée ici : http://www.linux-ha.org/ha.cf.Voici les éléments intéressants à recopier :
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 10
bcast eth0
node nom_serveur1 nom_serveur2
auto_failback no
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
- logfile (facultatif)
- Fichier où loguer les évènements relatifs à heartbeat (lancement, arrêt, etc.). Si vous utilisez ce paramètre, faites attention à limiter la taille des logs via le mécanisme logrotate de Debian.
- logfacility
- Indique quelle "facility" le syslog devra utiliser pour loguer les évènements. Les valeurs peuvent changer selon les systèmes, mais local0 reste une valeur sûre.
- keepalive
- Intervalle entre 2 battements de coeur. La valeur est en secondes par défaut. Pour la spécifier en millisecondes, on rajoutera 'ms' derrière. (Par exemple, 200ms).
- deadtime
- Temps nécessaire avant de considérer qu'un noeud est mort. Le temps est en secondes par défaut. On rajoutera
'ms' derrière pour l'avoir en millisecondes.
Attention avec cette valeur : si elle est trop courte, le système risque de s'auto-déclarer mort. Si elle est trop grande, l'autre machine mettra un temps conséquent avant de s'en apercevoir et de reprendre la main. - bcast
- Spécifie l'interface réseau utilisée par Heartbeat pour envoyer les battements de coeur (en UDP).
- node
- Liste des machines utilisées pour la haute disponibilité, séparées par des espaces.
- auto_failback
- Comportement à adopter si la machine en panne revient sur le réseau. Si le paramètre est à 'Off', elle se met simplement en attente. Avec 'On', elle redevient la machine active, et celle qui fonctionne à l'heure actuelle repasse en passive.
- respawn
- Permet de lancer un programme au démarrage de heartbeat, qui sera tout le temps actif (Le premier paramètre
est l'id de l'utilisateur qui lancera le programme. Le second, le programme lui-même).
On instancie ici ipfail, qui est à peu près le seul logiciel intéressant à lancer. Il permet d'accélérer la détection d'erreur, en regardant la disponibilité des liens réseaux en plus d'attendre un certain nombre de battements de coeur. Ceci permet au serveur passif de prendre la main dés qu'une connexion réseau est coupée, au lieu d'attendre la non réception de X battements de coeur. - apiauth
- (Utilisé conjointement avec respawn). Indique quels groupes et utilisateurs ont le droit de dialoguer avec
les programmes lancés par respawn. Ces programmes étant normalement utilisés pour des besoins internes, il
semble logique d'interdire les accès extérieurs.
La syntaxe est :nom_programme uid=uid_souhaité gid=gid_souhaité
/etc/heartbeat/haresources
Ce fichier indique les opérations à effectuer au démarrage de la haute disponibilité sur une machine. La syntaxe est la suivante :- NOM_1ER_NODE
- Ce nom doit être le même pour les 2 machines. C'est le nom de la machine qui sera activée par défaut au démarrage de heartbeat.
- action
- Vous pouvez demander un liste d'actions à effectuer au démarrage de heartbeat. Toutes les actions sont
séparées par des espaces. Pour ajouter des paramètres aux actions, utiliser le signe 4-points : "::"
Voici quelques exemples d'actions possibles :- Activer une adresse IP virtuelle
- Utilisation : IPaddr::adresse_ip/masque/interface
node1 IPaddr::192.xxx.xxx.xxx/24/eth0 - Lancer un service
- Utilisation : nom_service
node1 apache2Attention : ce service doit être dans /etc/init.d (ou /etc/heartbeat/ressource.d), et doit reconnaître les arguments 'start' et 'stop'. - Monter un système de fichiers local
- Utilisation : Filesystem::periph_source::point_de_montage::type_partition
node1 Filesystem::/dev/sda1::/data/scsi1::vfat - Monter un système de fichiers distant (par exemple NFS)
- Utilisation : Filesystem::adresse_ip_source:/dossier_src::point_de_montage::type_partition
node1 Filesystem::192.x.x.x:/partage_distant::/data/montage_local::nfs - Monter un système de fichiers distant avec des options de montage
- Utilisation : Filesystem::adresse_ip_source:/dossier_src::point_de_montage::type_partition::options
node1 Filesystem::192.x.x.x:/src::/dest::nfs::rsize=8192,wsize=8192
/etc/heartbeat/authkeys
Ce fichier détermine la clé et le protocole de protection utilisé. Voici un exemple du fichier :3 md5 mot_de_passe
On notera qu'il y a 3 méthodes d'authentification :
- crc (réseaux sécurisés, comme un câble croisé par exemple)
- md5 (bonne alternative de sécurité)
- sha1 (si vous pensez vraiment que quelqu'un va essayer de vous attaquer et d'envoyer de fausses informations à heartbeat. Cette méthode est la plus sûre mais consomme plus de temps processeur)
Quoi qu'il en soit, pensez à protéger ce fichier pour qu'il ne soit plus visible par n'importe qui (si vous ne le faites pas, le programme ne se lancera pas) :
Démarrage du programme
Avant de continuer, assurez-vous que les fichiers de configuration des deux serveurs sont identiques, et que les services sont arrêtés :Vérifier l'activation de l'IP virtuelle
Pour voir si l'adresse IP virtuelle est active, tapez :Résultat avec la machine active :
eth0 Lien encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
...
eth0:0 Lien encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
inet adr:192.168.42.10 Bcast:192.168.42.255 Masque:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interruption:185 Adresse de base:0x1400
lo Lien encap:Boucle locale
...
Vérifier le lancement des services
Pour voir quels services sont lancés sur la machine, tapez :3391 ? SLs 0:53 heartbeat: heartbeat: master control process 3393 ? SL 0:00 heartbeat: heartbeat: FIFO reader 3394 ? SL 0:12 heartbeat: heartbeat: write: bcast eth0 3395 ? SL 0:01 heartbeat: heartbeat: read: bcast eth0 3397 ? S 0:03 /usr/lib/heartbeat/ipfail 3593 ? Ss 0:00 /usr/sbin/apache2 -k start -DSSL 3683 ? S 0:00 /usr/sbin/apache2 -k start -DSSLSi quelque chose ne fonctionne pas, essayez de spécifier un fichier de logs dans ha.cf, et étudiez son contenu. Cela reste encore la méthode la plus fiable pour résoudre les erreurs de manipulation.
Vous êtes arrivé à la fin de cet article. Pour en savoir plus sur le sujet, n'hésitez pas à consulter la partie Références. Vous y trouverez plusieurs tutoriels bien faits et quelques liens pour aller plus loin.