Après
la mise en place de heartbeat le cluster fait correctement basculer un
premier service, l'adresse IP, d'un noeud à l'autre. L'objectif ici est
de répliquer les données de la partition servant de support à Samba vers
le noeud passif. Pour cette fonction nous allons mettre en place DRBD.
DRBD est un produit ayant de nombreuses fonctions. Ce billet se veut très simple et uniquement dédié à une première approche. Au fil du temps les autres billets sur le sujet mettrons en place des fonctions DRBD afin de rendre le produit plus robuste.
Je rappelle que cette solution ne demande rien de plus que deux machines sous Linux, elle est abordable à tous.
Le site du projet DRBD est le suivant Site de DRBD
Le périphérique géré par DRBD ne peut être monté que sur le noeud actif. Toutefois en utilisant le système de fichier GFS ou les snapshots de LVM il est possible de monter sur les deux noeuds du cluster le périphérique DRBD. Ce n'est toutefois pas une solution recommandée.
DRBD ne fonctionne qu'avec deux noeuds, toutefois depuis la version 8.3 il est possible de répliquer sur un troisième noeud.
DRBD fournit des scripts compatibles avec la gestion via heartbeat.
La partition qui sera répliquée sera celle supporté par /u01 aussi la retirer du fichier /etc/fstab, car le device pour le montage sera différent et mis en place par heartbeat.
J'ai choisi de faire simple pour ce billet aussi dans un premier temps, sauvegarder le fichier original avant d'en créer un nouveau.
Au sujet de la gestion de la bande passante
La valeur du paramètre rate est exprimée en Mo/sec, si vous êtes en réseau 100Mbit/s, n'allez pas au dessus de 9M, puisqu'il s'agit (environ) de la valeur maximale de débit. La valeur 9M correspond au tiers de ce débit afin de laisser de la bande passante aux utilisateurs. Le tiers de la bande passante est une valeur conseillée sur le site de drbd.
Les protocoles
Ce paramètre configure la manière dont les données sont répliquées.
Il est souhaitable de ne pas avoir de filesystem contenant des données avant la première synchronisation. Si il existe un filesystem avant la mise en place drbd, la commande drbdadm create-md retourne l'erreur suivante :
Le plus simple est de mettre à zéro le filesystem ( shrink ) sans oublier de le demonter avant !
Sur le serveur debian01
Ces étapes sont à faire également sur le second noeud. Dans un premier temps installer le package drbd-utils sur debian02 et recopier le fichier /etc/drbd.conf depuis debian01 vers debian02.
Lancer ensuite sur debian02
DRBD permet de mettre facilement en place la réplication, y compris de base de données type PostgreSQL ou MySQL sans passer par les fonctions natives du SGBD.
Compte tenu que toute la synchronisation se fait via le réseau, il est sage de dédier une interface réseau ( carte 1Gbits conseillée ) à la réplication DRBD.
DRBD est un produit ayant de nombreuses fonctions. Ce billet se veut très simple et uniquement dédié à une première approche. Au fil du temps les autres billets sur le sujet mettrons en place des fonctions DRBD afin de rendre le produit plus robuste.
Je rappelle que cette solution ne demande rien de plus que deux machines sous Linux, elle est abordable à tous.
DRBD
DRBD travaille au niveau bloc, il est ainsi capable de répliquer via le réseau une partition ou encore un volume logique. Il peut fonctionner en mode synchrone ou asynchrone. Le second mode ne permet pas le temps réel, mais est utile si le lien réseau dispose d'un faible débit.Le site du projet DRBD est le suivant Site de DRBD
Le périphérique géré par DRBD ne peut être monté que sur le noeud actif. Toutefois en utilisant le système de fichier GFS ou les snapshots de LVM il est possible de monter sur les deux noeuds du cluster le périphérique DRBD. Ce n'est toutefois pas une solution recommandée.
DRBD ne fonctionne qu'avec deux noeuds, toutefois depuis la version 8.3 il est possible de répliquer sur un troisième noeud.
DRBD fournit des scripts compatibles avec la gestion via heartbeat.
La partition qui sera répliquée sera celle supporté par /u01 aussi la retirer du fichier /etc/fstab, car le device pour le montage sera différent et mis en place par heartbeat.
Installer le package des utilitaires drdb
Le module DRBD est intégré au noyau Linux, il suffit juste de charger le package des utilitaires DRBD pour les manipulationsaptitude install drbd-utilsL'installation met en place une configuration standard sous /etc dans un fichier nommé drbd.conf. Fidèle à la philosophie actuelle de séparer dans des fichiers séparés les configuration ce fichier ne contient que des "include"...
J'ai choisi de faire simple pour ce billet aussi dans un premier temps, sauvegarder le fichier original avant d'en créer un nouveau.
mv /etc/drbd.conf drbd.conf.sample vi /etc/drbd.confVoici ce que contient le fichier /etc/drbd.conf pour l'exemple
global { usage-count yes; } common { protocol C; syncer { rate 9M; } } resource r0 { on debian01 { device /dev/drbd0; disk /dev/sda10; address 192.168.1.100:7789; meta-disk internal; } on debian02 { device /dev/drbd0; disk /dev/sda10; address 192.168.1.101:7789; meta-disk internal; } }Important : Ce fichier doit être présent sur les deux noeuds du cluster.
Au sujet de la gestion de la bande passante
La valeur du paramètre rate est exprimée en Mo/sec, si vous êtes en réseau 100Mbit/s, n'allez pas au dessus de 9M, puisqu'il s'agit (environ) de la valeur maximale de débit. La valeur 9M correspond au tiers de ce débit afin de laisser de la bande passante aux utilisateurs. Le tiers de la bande passante est une valeur conseillée sur le site de drbd.
Les protocoles
Ce paramètre configure la manière dont les données sont répliquées.
- Protocole A : le plus rapide, mais aussi le moins fiable, utilisé surtout en asynchrone, la réplication est jugée faite quand les données sont sur le disque local et dans le tampon d'envoi TCP.
- Protocole B : la réplication est jugée faite quand les données sont sur le disque local et les données dans le tampon de réception TCP du second serveur.
- Protocole C : le plus lent, le plus fiable donc à préférer. La réplication est considérée comme terminée quand les données sont écrites sur le second disque.
Il est souhaitable de ne pas avoir de filesystem contenant des données avant la première synchronisation. Si il existe un filesystem avant la mise en place drbd, la commande drbdadm create-md retourne l'erreur suivante :
md_offset 55372546048 al_offset 55372513280 bm_offset 55370821632 Found ext3 filesystem which uses 54074756 kB current configuration leaves usable 54073068 kB Device size would be truncated, which would corrupt data and result in 'access beyond end of device' errors. You need to either * use external meta data (recommended) * shrink that filesystem first * zero out the device (destroy the filesystem) Operation refused. Command 'drbdmeta /dev/drbd0 v08 /dev/sda10 internal create-md' terminated with exit code 40 drbdadm abortingDans un prochain billet, je présenterais l'utilisation de "external meta data" qui permet de mettre en place DRBD sur des données existantes.
Le plus simple est de mettre à zéro le filesystem ( shrink ) sans oublier de le demonter avant !
Sur le serveur debian01
root@debian01# dd if=/dev/zero bs=1M count=1 of=/dev/sda10Ou de remplir la partition avec des 0 ( attention c'est long ! )
root@debian01# shred -zvf -n 1 /dev/sda10Lancer la commande de création de la ressource
root@debian01# drbdadm create-md r0Cette étape peu prendre un peu de temps. Puis lancer les commandes suivantes :
root@debian01# drbdadm attach r0 root@debian01# drbdadm syncer r0 root@debian01# drbdadm connect r0Ou plus simplement
root@debian01# drbdadm up r0Vérifier le fonctionnement via le fichier /proc/drbd qui doit contenir les éléments suivants :
root@debian01# cat /proc/drbd GIT-hash: bb447522fc9a87d0069b7e14f0234911ebdab0f7 build by phil@fat-tyre, 2008-11-12 16:40:33 0: cs:Connected st:Secondary/Secondary ds:Inconsistent/Inconsistent C r--- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 resync: used:0/61 hits:0 misses:0 starving:0 dirty:0 changed:0 act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0Inconsistent/Inconsistent est l'état normal à ce stade. A partir de maintenant DRDB est correctement configuré, il faut alors lancer la première synchronisation.
Ces étapes sont à faire également sur le second noeud. Dans un premier temps installer le package drbd-utils sur debian02 et recopier le fichier /etc/drbd.conf depuis debian01 vers debian02.
Lancer ensuite sur debian02
root@debian02# shred -zvf -n 1 /dev/sda10 root@debian02# drbdadm create-md r0 root@debian02# drbdadm attach r0 root@debian02# drbdadm syncer r0 root@debian02# drbdadm connect r0Il ne reste plus qu'a lancer la commande de synchronisation depuis le noeud principal, et uniquement sur celui-ci :
root@debian01# drbdadm -- --overwrite-data-of-peer primary r0Suivre la progression de la synchronisation par la commande :
root@debian01# cat /proc/drbd version: 8.0.14 (api:86/proto:86) GIT-hash: bb447522fc9a87d0069b7e14f0234911ebdab0f7 build by phil@fat-tyre, 2008-11-12 16:40:33 0: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r--- ns:31808 nr:0 dw:0 dr:31808 al:0 bm:1 lo:0 pe:0 ua:0 ap:0 [>....................] sync'ed: 0.1% (52774/52805)M finish: 42:53:23 speed: 340 (320) K/sec resync: used:0/61 hits:1986 misses:2 starving:0 dirty:0 changed:2 act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0Cette action prend du temps il suffit de taper sur chaque noeud la commande suivante pour accélérer au maximum du débit réseau la synchronisation.
drbdsetup /dev/drbd0 syncer -r 100MPour revenir à la configuration courante, une fois les serveurs synchronisés ( sur chaque noeud )
drbdadm adjust r0Toujours sur le serveur primaire ( debian01 ), formater la partition /dev/drbd0. Ne pas faire cette manipulation sur le serveur secondaire (debian02).
root@debian01# mkfs.ext3 /dev/drbd0Le montage se fera sous /u01 et doit utiliser /dev/drbd0. Créer donc le point de montage sur les deux serveurs, sauf si vous l'avez déjà fait lors du partitionnement. Attention dans ce cas de bien retirer la ligne du fichier /etc/fstab.
mkdir /u01Modifier ensuite haresources, cette fois ci sur les 2 noeuds, pour que la partition /dev/drbd0 soit monté sous /u01 par heartbeat
vi /etc/ha.d/haresources debian01 IPaddr2::192.168.1.102 drbddisk::r0 Filesystem::/dev/drbd0::/u01::ext3Pour tester l'ensemble, redémarrer simplement les deux serveurs. Le serveur primaire doit avoir une commande df -h semblable à celle-ci :
root@debian01# df -h Sys. de fich. Tail. Occ. Disp. %Occ. Monté sur /dev/sda3 464M 81M 360M 19% / tmpfs 252M 0 252M 0% /lib/init/rw udev 10M 96K 10M 1% /dev tmpfs 252M 0 252M 0% /dev/shm /dev/sda1 89M 8,6M 75M 11% /boot /dev/sda7 9,2G 150M 8,6G 2% /opt /dev/sda9 942M 18M 877M 2% /tmp /dev/sda5 4,6G 447M 4,0G 11% /usr /dev/sda6 4,6G 138M 4,3G 4% /usr/local /dev/sda8 1,9G 251M 1,5G 15% /var /dev/drbd0 51G 180M 49G 1% /u01Et le serveur secondaire :
root@debian02# df -h Sys. de fich. Tail. Occ. Disp. %Occ. Monté sur /dev/sda3 464M 81M 360M 19% / tmpfs 252M 0 252M 0% /lib/init/rw udev 10M 96K 10M 1% /dev tmpfs 252M 0 252M 0% /dev/shm /dev/sda1 89M 8,6M 75M 11% /boot /dev/sda7 9,2G 150M 8,6G 2% /opt /dev/sda9 942M 18M 877M 2% /tmp /dev/sda5 4,6G 447M 4,0G 11% /usr /dev/sda6 4,6G 138M 4,3G 4% /usr/local /dev/sda8 1,9G 251M 1,5G 15% /varUne fois cela validé, redémarrer le serveur primaire et constater que /u01 est bien monté sur le serveur secondaire.
DRBD permet de mettre facilement en place la réplication, y compris de base de données type PostgreSQL ou MySQL sans passer par les fonctions natives du SGBD.
Compte tenu que toute la synchronisation se fait via le réseau, il est sage de dédier une interface réseau ( carte 1Gbits conseillée ) à la réplication DRBD.
Gestion du Split Brain
Il s'agit d'une situation due à une défaillance du réseau entre les deux noeuds du cluster. Chaque noeud tente d'accéder aux ressources DRBD car il pense que l'autre noeud est défaillant. Un message type apparait dans les traces :Split-Brain detected, dropping connection!Voici la méthode la plus simple pour gérer ce mode, sur un des noeuds passer les commandes suivantes :
drbdadm secondary r0 drbdadm -- --discard-my-data connect r0r0 est la ressource définie dans drbd.conf. Cette commande fait passer le noeud en secondaire Sur l'autre noeud du cluster passer la commande suivante :
drbdadm connect r0Ainsi ce noeud devient primaire.
Aucun commentaire :
Enregistrer un commentaire