Mise en place DRBD

Transcription

Mise en place DRBD
Noormahamud
Schezad
01/12/2014
2TSISR/Groupe B
Qu’est-ce que DRBD?
DRBD pour Distributed Replicated Block Device est comparabale à un RAID 1 mais en réseau, c’est à dire
que deux disques, partitions ou même un LVM peuvent être repliqué d’un disque à un autre via un réseau
ethernet ou fibre optique.
Cela permet donc d’assurer la disponibilité de vos données en cas de crash complet d’une machine. Ce que ne
permet pas de faire un RAID classique.
Schéma DRBD
Pour ce tuto nous allons donc utiliser deux machines virtuelles sous Debian 6.
Configuration des machines virtuelles
Nous allons donc utiliser deux machines virtuelles avec la configuration suivante:
Machine 1:

Hostname: node1

Adresse IP: 192.168.10.128

Un second disque dur virtuel de 1GO
Machine 2 :

Hostname: node2

Adresse IP: 192.168.10.129

Un second disque dur virtuel de 1GO
Noormahamud
Schezad
01/12/2014
2TSISR/Groupe B
Pour les adresses IP vous pouvez mettre celles que vous souhaitez, pour ce tuto j’ai laissée celle que ma
fournis le DHCP de VMWare Workstation.
Préparation des disques
Nous allons commencer par créer une partition sur les seconds disques que nous avons rajoutés.
Sur les deux machines tapez les commandes suivantes:
Sur node1
root@node1:~# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x48ef2de4.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): n
Command action
e
extended
p
primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-130, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-130, default 130):
Using default value 130
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
Sur node2
root@node2:~# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x293cdb74.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): n
Command action
e
extended
p
primary partition (1-4)
p
Noormahamud
Schezad
01/12/2014
2TSISR/Groupe B
Partition number (1-4): 1
First cylinder (1-130, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-130, default 130):
Using default value 130
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
Maintenant que nous avons partitionnés les deux disques nous allons installer les paquets necéssaires à
l’utilisation de DRBD.
Installation et configuration de DRBD
Sur les deux machines (node1 et node2) tapez les commandes suivantes:
apt-get install drbd8-utils
Puis une fois le paquet installé on active le module avec la commande suivante:
modprobe drbd
Vous pouvez vérifier la version de DRBD installée en tapant la commande modinfo drbd
Maintenant que nos disques et DRBD sont mis en place nous allons configurer la réplication des données entre
les deux disques.
Pour ce faire nous allons créer et éditer un fichier que nous allons appeler drbd1.res dans le dossier /etc/drbd.d/
Attention les commandes et les configurations suivantes sont à faire sur les deux serveurs.
cd /etc/drbd.d
nano drbd1.res
Puis remplissez le fichier de la façon suivante:
resource r0 {
# Taux de transfert
# 10M pour du 100mbits
# 100M pour du 1Gbits
syncer {
rate 10M;
}
on node1 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.10.128:7788;
meta-disk internal;
}
on node2 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.10.129:7788;
meta-disk internal;
}
}
Explications:
Tout d’abord on donne un nom à notre ressource DRBD dans notre cas nous allons l’appeler r0.
Noormahamud
Schezad
01/12/2014
2TSISR/Groupe B
Dans cette ressource nous allons renseigner nos deux nodes, cela commence donc par on node1 (node1 doit
être le hostname de la machine) avec les valeurs suivantes:
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.10.128:7788;
meta-disk internal;
#Ceci est le nom du disque DRBD que nous allons créer
#Ceci est le chemin de la parition que nous allons utili
#Adresse IP du node1
#On écrit les MD sur le disque
Et on fais la même chose pour node2
Une fois ce fichier écrit sur les deux nodes nous allons enfin pouvoir mettre en place la réplication:
Toujours sur les deux nodes tapez les commandes suivantes:
drbdadm create-md r0
drbdadm up r0
Et voila notre DRBD est pratiquement mis en place vous pouvez vérifier que vos nodes se contactent en tapant la
commande suivante:
drbd-overview
Vous devriez avoir cette ligne en sortie:
drbd-overview
0:r0 Connected Secondary/Secondary Inconsistent/Inconsistent C r---Cela veut dire que vos nodes se connectent mais que la réplication n’est pas encore possible etant donné
qu’aucun des deux n’est en mode Primary, pour y remédier nous allons mettre node1 en primary avec la
commande suivante:
root@node1:~# drbdadm -- --overwrite-data-of-peer primary r0
Et node2 en secondary (pas forcement obligatoire de faire ça)
root@node2:~# drbdadm secondary r0
La synchronisation initale se lance vous pouvez vérifier l’état de la synchronisation avec la commande
suivante:
root@node1:~# cat /proc/drbd
version: 8.3.7 (api:88/proto:86-91)
srcversion: EE47D8BF18AC166BE219757
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---ns:9312 nr:0 dw:0 dr:9512 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:1034812
[>....................] sync'ed: 1.2% (1034812/1044124)K
finish: 0:43:06 speed: 356 (320) K/sec
La synchronisation initiale peut être plus ou moins lente en fonction de l’espace disque et de la rapidité de votre
réseau local.
Vous pouvez suivre la synchronisation avec un rafraîchissement toutes les 2 secondes avec la commande
suivante:
watch cat /proc/drbd
Vous aurez ceci en sortie:
Every 2.0s: cat /proc/drbd
version: 8.3.7 (api:88/proto:86-91)
srcversion: EE47D8BF18AC166BE219757
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---ns:96416 nr:0 dw:0 dr:96616 al:0 bm:5 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:947708
[>...................] sync'ed: 9.5% (947708/1044124)K
finish: 0:44:25 speed: 328 (320) K/sec
Vous pouvez quitter cette vue en faisant CTRL+C
Une fois la synchronisation terminée la commande cat /proc/drbd vous donneras ceci:
root@node1:~# cat /proc/drbd
Noormahamud
Schezad
01/12/2014
2TSISR/Groupe B
version: 8.3.7 (api:88/proto:86-91)
srcversion: EE47D8BF18AC166BE219757
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r---ns:1044124 nr:0 dw:0 dr:1044324 al:0 bm:64 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
Si les deux sont en mode ds:UpToDate/UpToDate c’est que tout fonctionne bien.
Maintenant que notre raid réseau et fonctionnel nous allons créer un système de fichier en ext4 pour pouvoir
écrire dessus.
Tapons la commande suivante sur le node primaire (node1)
root@node1:~# mkfs.ext4 /dev/drbd0
Maintenant nous pouvons monter le disque DRBD comme n’importe quel disque dur
mkdir /mnt/r0
mount /dev/drbd0 /mnt/r0/
Si vous tapez la commande df -h vous pouvez voir que le disque est bien monté.
root@node1:~# df -h
###
/dev/drbd0
###
1004M
18M
936M
2% /mnt/r0
Maintenant nous allons tester notre replication.
Mise en pratique de la replication via DRBD
Pour tester notre replication nous allons télécharger une image iso de Debian sur node1 et voir si la replication se
fait sur le node2.
Donc sur node1 nous allons aller dans le dossier /mnt/r0 et télécharger l’ISO de Debian 6
cd /mnt/r0/
wget http://cdimage.debian.org/debian-cd/6.0.7/i386/iso-cd/debian-6.0.7-i386-CD-1.iso
Pendant le téléchargement les paquets téléchargés seront aussi copiés sur node2 étant donné que DRBD est
configuré pour faire une copie synchrone des fichiers (Protocol C).
Après le téléchargement, ce que nous pouvons faire maintenant c’est mettre node1 en secondary, de
mettre node2 en primary et de monter la partition sur node2.
Sur node1
root@node1:~# umount /mnt/r0
root@node1:~# drbdadm secondary r0
root@node1:~# drbd-overview
0:r0 Connected Secondary/Secondary UpToDate/UpToDate C r---On voit donc que maintenant les deux nodes sont en secondary.
Sur node2
root@node2:~# drbdadm primary r0
root@node2:~# mkdir /mnt/r0
root@node2:~# mount /dev/drbd0 /mnt/r0/
Faisons un ls -l dans le dossier /mnt/r0 de node2
root@node2:~# ls -l /mnt/r0/
total 662548
-rw-r--r-- 1 root root 678428672 Feb 23 08:36 debian-6.0.7-i386-CD-1.iso
Noormahamud
Schezad
01/12/2014
2TSISR/Groupe B
Nous avons bien notre fichier ISO présent sur le node2.
IMPORTANT: On ne peut monter un disque DRBD que sur le serveur ou il est en primary. Le montage est
impossible en secondary.
Si vous tapez la commande drbd-overview quand le disque est monté vous aurez des informations
supplémentaires, comme le point de montage et l’espace disque restant.
root@node2:~# drbd-overview
0:r0 Connected Primary/Secondary UpToDate/UpToDate C r---- /mnt/r0 ext4 1004M 665M 289
Maintenant nous allons voir comment faire en cas de crash d’un des serveurs.