Table des matières
Haute Disponibilité
Heartbeat 2
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::<IP_A_MONTER>/24/eth0:1 apache2 MailTo::root
hb1
⇒ le nom du maitre<IP_A_MONTER>
⇒ l'ip qui sera monter surhb1
ouhb2
selonheartbeat
- /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:
# 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 <del>“drbd8-module”</del> “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 <IP_DE_HB2>:/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 <IP_DE_HB1>:7788; meta-disk internal; } on hb2 { device /dev/drbd0; disk /dev/hda1; address <IP_DE_HB2>: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 !