Outils pour utilisateurs

Outils du site


informatique_hd

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 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:

# 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 !

informatique_hd.txt · Dernière modification : 2011/11/26 00:04 de thierry