# apt-get install heartbeat
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 sur hb1 ou hb2 selon heartbeatapache2 ⇒ 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:
Car ces fichiers doivent être identique sur les 2 becannes.
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…
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`
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
On est dans le cas d'une partition disponible en /dev/hda1 sur hb1 et hb2.
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.
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
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 !