dimanche 23 novembre 2008

HOWTO DRBD entre deux noeuds Linux

Le week-end est toujours propice pour ce que l'on a pas le temps de réaliser durant la semaine.
J'ai repris mes tests DRBD menés cet été en détaillant la procédure.

Ce petit howto vous permet de créer un partage répliqué entre deux aires des stockage Linux.



1. Créer un fichier /etc/drbd.conf sur chacun des nœuds :

global {
usage-count no;
}
common {
protocol C;
syncer { rate 300M;
al-extents 1801;
}
# --------------------------------------------------------------------------------------------------------------
# Protocol A : réplication asynchrone,
# Protocol B : réplication mémoire sans commit disque distant
# Protocol C : réplication synchrone (attente du commit disque distant)
#
# Rate : Valeur à multiplier pas 0.3 pour avoir le débit en Mo/s ici 300 x 0.3 soit 90 MO/s maxi
# --------------------------------------------------------------------------------------------------------------
net {
allow-two-primaries;
sndbuf-size 2M;
max-buffers 16000;
max-epoch-size 16000;
unplug-watermark 16000;
}
}
resource r0 {
startup {
become-primary-on both;
}
on drbd1.qqchose.fr {
device /dev/drbd1;
disk /dev/sdb;
address [X.X.X.IP1]:7789;
meta-disk internal;
}
on drbd2.qqchose.fr {
device /dev/drbd1;
disk /dev/sdb;
address [X.X.X.IP2]:7789;
meta-disk internal;
}
# --------------------------------------------------------------------------------------------------------------
# le disque /dev/sdb de la machine1 sera répliqué avec /dev/sdb de la machine2
# /dev/drbd1 sera le périphérique utilisé sous linux pour partager les volumes en NFS
# --------------------------------------------------------------------------------------------------------------

2. Télécharger le package source de drbd depuis :
http://oss.linbit.com/drbd/ et le placer dans le répertoire de travail du serveur frontal linux.

3. Compiler les éxécutables :

cd /root/drbd-8.2.7
make install
make install-tools

4. Créer les packages :

make rpm

5. Installer les packages créés avec la commande : rpm –i drbd*rpm

se placer dans /root/drbd-8.2.7/dist/RPMS/x86_64
-rw-r--r-- 1 root root 175144 Nov 19 16:44 drbd-8.2.7-3.x86_64.rpm
-rw-r--r-- 1 root root 273209 Nov 19 16:44 drbd-debuginfo-8.2.7-3.x86_64.rpm
-rw-r--r-- 1 root root 897879 Nov 19 16:44 drbd-km-2.6.9_55.ELsmp-8.2.7-3.x86_64.rpm

6. ajouter dans /etc/rc2.d/S99local pour le tuning tcp/ip et accès disque :

/sbin/hdparm -a 4096 /dev/drbd1
/bin/echo "256">/sys/block/sdb/queue/nr_requests
/sbin/ifconfig eth0 txqueuelen 1000
echo 256960 > /proc/sys/net/core/rmem_default
echo 256960 > /proc/sys/net/core/rmem_max
echo 256960 > /proc/sys/net/core/wmem_default
echo 256960 > /proc/sys/net/core/wmem_max
echo 0 > /proc/sys/net/ipv4/tcp_timestamps
echo 1 > /proc/sys/net/ipv4/tcp_sack
echo 1 > /proc/sys/net/ipv4/tcp_window_scaling
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 30 > /proc/sys/net/ipv4/tcp_keepalive_intvl
echo 5 > /proc/sys/net/ipv4/tcp_keepalive_probes
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle

7. Fomater le volume à partager :

mkfs –t xfs, ext3 ou gpfs /dev/drbd1 sur chacun des nœuds

Attention, si vous avez l'intention d'accéder aux deux volumes répliqués de part et d'autre simultanément, il est préférable d'utiliser un système de fichiers en cluster tel que le gpfs d'IBM, gfs fournis avec RedHat & CentOS 5 ou OCFS2, le FS cluster opensource de Oracle

8. Créer le dictionnaire des méta-datas drbd

drbdadm create-md r0
V08 Magic number not found
Writing meta data...
initialising activity log
NOT initialized bitmap
New drbd meta data block sucessfully created.
success

9. Rattacher les disques à dupliquer entre eux
Lancer la première synchronisation
drbdadm -- --overwrite-data-of-peer primary r0

drbdadm attach
Connect

et valider la conf actif actif :
drbdadm adjust r0
drbdadm primary r0
10 Vérifier le bon fonctionnement :
cat /proc/drbd
version: 8.2.7 (api:88/proto:86-88)
GIT-hash: 61b7f4c2fc34fe3d2acf7be6bcc1fc2684708a7d build by root@{IP1]
[IP1], 2008-11-19 16:44:02
1: cs:SyncSource st:Primary/Primary ds:UpToDate/Inconsistent C r---
ns:375338964 nr:0 dw:33722292 dr:341683187 al:20719 bm:21431 lo:1 pe:53 ua:1951 ap:0 ep:1 wo:b oos:700333764
[=====>..............] sync'ed: 34.9% (683919/1049967)M
finish: 11:34:46 speed: 16,736 (57,684) K/sec

lorsque les volumes sont synchronisés, on obtient le résultat suivant :

version: 8.2.7 (api:88/proto:86-88)
GIT-hash: 61b7f4c2fc34fe3d2acf7be6bcc1fc2684708a7d
build by root@[IP1], 2008-11-19 16:44:02
1: cs:Connected st:Primary/Primary ds:UpToDate/UpToDate C r---
ns:16907660 nr:16815716 dw:33723376 dr:541 al:16345 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

11. Editer /etc/fstab pour mapper le volume /dev/drbd1 sur un volume à partager

# This file is edited by fstab-sync - see 'man fstab-sync' for details
/dev/VolGroup00/LogVol00 / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
none /dev/pts devpts gid=5,mode=620 0 0
none /dev/sh tmpfs defaults 0 0
none /proc proc defaults 0 0
none /sys sysfs defaults 0 0
/dev/VolGroup00/LogVol01 swap swap defaults 0 0
/dev/drbd1 /shares/PILLARSTORHIGHLS ext3 defaults 1 3
/dev/hda /media/cdrom auto pamconsole,exec,noauto,managed 0 0
/dev/fd0 /media/floppy auto pamconsole,exec,noauto,managed 0 0

12. Monter le volume en tapant mount /dev/drbd1

13. Enfin, partager le disque en NFS en éditant le fichier /etc/exports sur les deux machines

Editer /etc/exports et ajouter le nom de partage désiré : ici /shares/PILLARSTORHIGH
/shares/PILLARSTORHIGH[IP1] *(rw,async)

Faire un exportfs –a
/shares/STORHIGHLS


14 Monter le volume en NFS sur le client distant

ex : mount -t nfs 192.168.1.1:/shares/PILLARSTORHIGH /mnt/PILLARSTOREHIGH

Ah oui, les perfs .... En ce qui me concerne, les volumes sont répliqués à 19km de distance en gigabit et le débit par volume répliqué tourne autour de 60 Mo/s. J'ai déjà eu des pointes jusqu'à 3700 I/Os sans pb. Vous avouerez que pour 0,00€ de prix d'achat et un peu d'huile de coude, c'est pas mal.

Aucun commentaire: