====== Haute Disponibilité ====== ====== Heartbeat 2 ===== Liens: *http://doc.ubuntu-fr.org/tutoriel/mirroring_sur_deux_serveurs ====== Heartbeat ====== ===== Installation ===== # apt-get install heartbeat ===== Configuration ===== On est sur ''hb1''. ''ha.cf'' est manquant par defaut, donc: # cd /etc/ha.d # zcat /usr/share/doc/heartbeat/ha.cf.gz >ha.cf # vi ha.cf Faire en sorte d'avoir: debugfile /var/log/ha-debug logfile /var/log/ha-log logfacility local0 keepalive 5 deadtime 30 warntime 10 initdead 120 udpport 694 baud 19200 serial /dev/ttyS0 # <= Cela suppose un cable série croisé entre les 2 becannes bcast eth0 # <= Cela suppose un reseau commun auto_failback on node hb1 node hb2 Où, ''hb1'' et ''hb2'' correspond au ''uname -r'' des bécannes. Et puis: # zcat /usr/share/doc/heartbeat/haresources.gz >haresources # vi haresources Faire en sorte d'avoir: hb1 IPaddr2::/24/eth0:1 apache2 MailTo::root * ''hb1'' => le nom du maitre * '''' => l'ip qui sera monter sur ''hb1'' ou ''hb2'' selon ''heartbeat'' * /24 => masque reseau * /eth0:1 => nom de l'interface qui sera créé * ''apache2'' => le service qui sera demarré * ''MailTo::root'' => envoi d'un mail a root pour l'informer de l'etat Et enfin: (toujours dans ''/etc/ha.d/'' ) # cp /usr/share/doc/heartbeat/authkeys . # vi authkeys Faire en sorte d'avoir: auth 2 2 sha1 le_secret_partage Et faire aussi (rw unique pour root): chmod 0600 authkeys Copier les 3 fichiers sur ''hbd2'', c'est a dire: * ha.cf * haresource * authkeys Car ces fichiers doivent être identique sur les 2 becannes. ===== Tester avec Apache ===== Vu sur ci-dessus, on va tester avec le service ''apache2''. D'abord, faire en sorte qu' ''apache2'' ne demarre plus automatiquement. # /etc/init.d/apache2 stop # update-rc.d -f apache2 remove Maintenant, ''heartbeat'' va demarrer le service, sur la bécanne maitre... ou esclave. Faire sur les 2 serveurs, hb1 et hb2: # /etc/init.d/heartbeat start Et regarder les logs et le service apache demarrer sur le maitre, et accessible sur l'ip de configuration... ======DRBD ====== ===== Installer ===== On est sur HB1 (qui a la même distrib que HB2) ! # aptitude update # aptitude install drbd-utils En fait: ''drbd0.7-utils'' # aptitude install drbd0.7-utils En fait: ''drbd0.7-module-source''\\ Et aussi: # aptitude install linux-headers-`uname -r` ==== Compiler ==== Suivre, grosso merdo, le How-to ici: * http://ubuntuforums.org/showthread.php?t=538002 # cd /usr/src # ls -lart -rw-r--r-- 1 root root 123283 2007-01-17 18:43 drbd0.7.tar.gz # tar xvzf drbd0.7.tar.gz # cd modules/drbd # m-a Choose “SELECT” and hit enter Choose “drbd8-module” “drbd7-module” and hit enter Choose “BUILD” Choose “NO” if asked to install or upgrade the selected source package. Continue the process and install the module when prompted. # update-modules # modprobe drbd Copier et installer le package sur l'autre bécanne: # scp /usr/src/drbd0.7-module-2.6.18-5-686_0.7.21-4+2.6.18.dfsg.1-13etch4_i386.deb :/usr/src/. Et sur HB2, faire simplement ça: # aptitude update # aptitude install drbd-utils # cd /usr/src # dpkg -i drbd0.7-module-2.6.18-5-686_0.7.21-4+2.6.18.dfsg.1-13etch4_i386.deb # update-modules # modprobe drbd Ok. # lsmod | grep drbd drbd 127444 0 ===== Configurer ===== On est dans le cas d'une partition disponible en ''/dev/hda1'' sur ''hb1'' et ''hb2''. ==== drbd.conf ==== Editer le fichier ''/etc/drbd.conf'' et faire en sorte d'avoir: resource stuff { protocol C; incon-degr-cmd "echo '!DRBD! pri on incon-degr' | wall ; sleep 60 ; halt -f"; startup { # wfc-timeout 0; wfc-timeout 120; degr-wfc-timeout 120; # 2 minutes. } disk { on-io-error detach; #on-io-error panic; } net { } syncer { #rate 10M; rate 4M; group 1; al-extents 257; } on hb1 { device /dev/drbd0; disk /dev/hda1; address :7788; meta-disk internal; } on hb2 { device /dev/drbd0; disk /dev/hda1; address :7788; meta-disk internal; } } J'ai adapté la config, parce que je n'ai pas 1 Gb/s sur une carte reseau dédié. **Attention**: J'avais mis **''al-extents 101;''** est j'ai eu plein de problème. ==== mounter ==== Sur les 2 bécannes: # /etc/init.d/drbd start # cat /proc/drbd version: 0.7.21 (api:79/proto:74) SVN Revision: 2326 build by root@hb1, 2007-10-21 23:31:57 0: cs:Connected st:Secondary/Secondary ld:Inconsistent ns:0 nr:0 dw:0 dr:0 al:0 bm:224 lo:0 pe:0 ua:0 ap:0 1: cs:Unconfigured # tail -f /var/log/syslog ... Oct 22 01:35:54 hb1 kernel: drbd0: drbd0_receiver [11113]: cstate WFReportParams --> Connected Oct 22 01:35:54 hb1 kernel: drbd0: I am inconsistent, but there is no sync? BOTH nodes inconsistent! Oct 22 01:35:54 hb1 kernel: drbd0: Secondary/Unknown --> Secondary/Secondary Les 2 etants "Secondary", on force ''hb1'' en maitre:\\ Donc sur ''hb1'' : # drbdsetup /dev/drbd0 primary --do-what-I-say La synchronisation s'effectue: # cat /proc/drbd version: 0.7.21 (api:79/proto:74) SVN Revision: 2326 build by root@hb1, 2007-10-21 23:31:57 0: cs:SyncSource st:Primary/Secondary ld:Consistent ns:151212 nr:0 dw:0 dr:151368 al:0 bm:233 lo:0 pe:28 ua:39 ap:0 [=>..................] sync'ed: 8.6% (1669720/1820824)K finish: 0:06:45 speed: 4,092 (4,080) K/sec 1: cs:Unconfigured Et puis, seulement sur primary, formater en ''ext3'' ! # mkfs.ext3 /dev/drbd0 Mounter le disk (toujours sur ''primary'' ): # mkdir /mnt/stuff # mount /dev/drbd0 /mnt/stuff Et voila, on peut ecrire dedans, et c'est synchroniser sur ''hb2''. Mais on ne le sait pas, parce que ''hb2'' n'a un accès au disk, et sa seule source d'information est un # cat /proc/drbd ==== Test ==== Voir en alternant les maitres et esclaves: ''hb1'' est le maitre, il lit et ecrit le disk drbd... # umount /mnt/stuff # drbdsetup /dev/drbd0 secondary Il n'y a plus de maitre ! Sur ''hb2'', devenir maitre: # drbdsetup /dev/drbd0 primary Mounter le disk # mkdir /mnt/test # mount /dev/drbd0 /mnt/test Et voila, ''hb2'' lit et ecrit sur le disk drbd !