Vous êtes sur la page 1sur 10

Mettre en place deux serveurs NFS actif / Passif avec DRBD et Heartbeat sous Debian 7

Bonjour tous, dans ce nouveau tuto, nous allons voir comment mettre en place deux serveur
NFS qui vont nous servir de SAN afin de centraliser les donnes de nos serveurs Web.

Ce tutoriel fait suite aux deux tutoriels prcdents, je donc vous epxliquer comment mettre en
place deux serveurs , un serveur actif et un serveur passif avec NFS, DRBD et heartbeat.

Quest-ce que NFS?


NFS, pour Network Sharing Filesystem est un protocole de partage sur le rseau. La machine
faisant office de serveur NFS peut mettre disposition aux machines clientes, un dossier, une
parition de disque ou un disque entier. Sur la machine cliente, le dossier partag est monte
dans le systme de fichier comme une partition classqiue.

Mise en place des machines virtuelles


Vous pouvez donc rajouter ces deux serveurs dans notre cluster Web ou part.

Voici la topologie:

Topologie

Dans ce turoriel, je vais rajouter les deux serveurs dans mon cluster, mais afin de soulager ma
machine je vais juste dmarrer mon serveur lb1 et configurer mes deux serveurs NFS comme
ceci
Important!

hostname: nfs1
ip: 10.1.0.31
passerelle: 10.1.0.1
Un disque supplmentaire pour DRBD de 8GO

hostname: nfs2
ip: 10.1.0.32
passerelle: 10.1.0.1
Un disque supplmentaire pour DRBD de 8GO

Afin de pouvoir accder en SSH aux nouveaux serveurs, je vais rajouter le ces deux lignes
dans le fichier /etc/init.d/firewall de lb1

##NAT pour SSH sur les serveurs NFS


iptables -t nat -A PREROUTING -p tcp -d 192.168.2.100 --dport 2231 -j DNAT
--to-destination 10.1.0.31:22
iptables -t nat -A PREROUTING -p tcp -d 192.168.2.100 --dport 2232 -j DNAT
--to-destination 10.1.0.32:22

Puis redmarrer le firewall

/etc/init.d/firewall restart

Vous pouvez maintenant vous connecter en SSH vos deux serveurs NFS

ssh root@192.168.2.100 -p 2231 pour nfs1


ssh root@192.168.2.100 -p 2232 pour nfs2

Mise en place des serveurs NFS


Prparation des disques
Nous allons commencer par crer une partition sur les seconds disques que nous avons
rajouts.

Warning!

Les commandes suivantes sont faire sur les deux machines:

Sur nsf1

root@nfs1:~# 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 0x2bbb06b3.
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)

Command (m for help): n


Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-16777215, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-16777215, default 16777215):
Using default value 16777215

Command (m for help): w


The partition table has been altered!

Calling ioctl() to re-read partition table.


Syncing disks.

Sur nfs2

root@nfs2:~# 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 0x784d1f06.
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)

Command (m for help): n


Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-16777215, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-16777215, default 16777215):
Using default value 16777215

Command (m for help): w


The partition table has been altered!

Calling ioctl() to re-read partition table.


Syncing disks.

Maintenant que nous avons partitionnes les deux disques nous allons installer les
paquets ncessaires lutilisation de DRBD.

Installation et configuration de DRBD


Sur les deux machines (nfs1 et nfs2) 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 vrifier la version de DRBD installe en tapant la commande modinfo drbd

Maintenant que nos disques et DRBD sont mis en place nous allons configurer la rplication
des donnes entre les deux disques.

Pour ce faire nous allons crer et diter un fichier que nous allons appeler drbd0.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 drbd0.res

Puis remplissez le fichier de la faon suivante:

resource r0 {

startup {
wfc-timeout 30;
degr-wfc-timeout 15;
}

disk {
on-io-error detach;
}

syncer {
rate 100M;
}

on nfs1 {
device /dev/drbd0;
disk /dev/sdb1;
address 10.1.0.31:7788;
meta-disk internal;
}
on nfs2 {
device /dev/drbd0;
disk /dev/sdb1;
address 10.1.0.32:7788;
meta-disk internal;
}
}

Explications:
Tout dabord on donne un nom notre ressource DRBD dans notre cas nous allons lappeler
r0.
Dans cette ressource nous allons renseigner nos deux serveurs nfs , cela commence donc par
nfs1 (nfs1 doit tre le hostname de la machine) avec les valeurs suivantes:
device /dev/drbd0; #Ceci est le nom du disque DRBD que nous allons crer
disk /dev/sdb1; #Ceci est le chemin de la parition que nous allons utiliser
address 10.1.0.31:7788; #Adresse IP de nfs1
meta-disk internal; #On crit les MD sur le disque

Et on fais la mme chose pour node2

Une fois ce fichier crit sur les deux serveurs nous allons enfin pouvoir mettre en place la
rplication:

Toujours sur les deux serveurs tapez les commandes suivantes:

drbdadm create-md r0
drbdadm up r0

Et voila notre DRBD est pratiquement mis en place vous pouvez vrifier que vos serveurs se
contactent en tapant la commande suivante:

drbd-overview

Vous devriez avoir cette ligne en sortie:

root@nfs1:~# drbd-overview
0:r0 Connected Secondary/Secondary Inconsistent/Inconsistent C r-----

Cela veut dire que vos derveurs se connectent mais que la rplication nest pas encore
possible tant donn quaucun des deux nest en mode Primary, pour y remdier nous allons
mettre nfs1 primary avec la commande suivante:

root@nfs1:~# drbdadm -- --overwrite-data-of-peer primary r0

Et nfs2 en secondary (pas forcement obligatoire de faire a)

root@nfs2:~# drbdadm secondary r0

La synchronisation initiale se lance vous pouvez vrifier ltat de la synchronisation avec la


commande suivante:

root@nfs1:~# drbd-overview
0:r0 SyncSource Primary/Secondary UpToDate/Inconsistent C r-----
[======>.............] sync'ed: 38.2% (5064/8188)Mfinish: 0:01:31
speed: 56,432 (55,192) K/sec

La synchronisation initiale peut tre plus ou moins lente en fonction de lespace disque et de
la rapidit de votre rseau local.
Vous pouvez suivre la synchronisation avec un rafraichissement toutes les 2 secondes avec la
commande suivante:

watch drbd-overview
Une fois la synchronisation termine la commande cat /proc/drbd vous donneras ceci:

root@nfs1:~# drbd-overview
0:r0 Connected Primary/Secondary UpToDate/UpToDate C r-----

Si les deux sont en mode ds:UpToDate/UpToDate cest que tout fonctionne bien.

Maintenant que notre raid rseau et fonctionnel nous allons crer un systme de fichier en
ext4 pour pouvoir crire dessus.
Tapez la commande suivante sur le serveur primaire (nfs1)

root@nfs1:~# mkfs.ext4 /dev/drbd0

Warning!

Avec DRBD, vous devez savoir que lon ne peut monter la partition DRBD uniquement sur le
serveur sur lequelle la partition DRBD est en Primary.

Installaion de NFS
Nos deux serveurs vont donc nous servir afin dexternaliser le stockage du contenu Web.

Nous allons donc installer les rle de serveur NFS dur les deux serveurs.

apt-get install nfs-kernel-server

Une fois NFS install sur les deux serveurs, nous allons crer un dossier dans lequelle nous
allons monter la partition DRBD mais aussi qui va servir de dossier de partage NFS.

Nous allons donc crer un dossier datas-web sur les deux serveurs.

mkdir /datas-web

Maintenant, sur les deux serveurs NFS nous allons configurer le partage NFS, cela se fait dans
le fichier /etc/exports

ditez le comme ceci:

/datas-web 10.1.0.0/24(rw,sync,fsid=0,no_root_squash,no_subtree_check)

Explications:

/datas-web = Dossier partag


10.1.0.0/24 = Plage dIP pouvant se connecter au serveur
rw = Droit de lecture et dcriture
sync = synchronisation
no_root_squash = droit pour root
no_subtree_check = dsactive subtree check

Maintenant que NFS est configur. nous allons installer heartbeat sur les deux serveurs afin
de:
Mettre en place le balancement de la partition DRBD entre les deux serveurs
Mettre en place une IP balance, qui sera lIP partir de laquelle les serveurs web vont
se connecter
Dmarrer et arrter le service nfs-kernel-server

Installation et configuration de Heartbeat


Warning!

Toutes les prochaines tapes sont faire sur les deux serveurs !

HeartBeat sinstalle simplement avec la commande:

apt-get install heartbeat

Une fois heartbeat installer nous allons devoir crer trois fichiers dans le dossier /etc/ha.d/

ha.cf : Pour la configuration gnrale de HeartBeat


haresources : Pour la configuration des ressources
authkeys : Pour la clef partag entre les serveurs du cluster

Voici le contenu du fichier ha.cf

mcast eth0 239.0.0.10 694 1 0

warntime 4
deadtime 5
initdead 15
keepalive 2

#Re-balance les services sur le node primaire quand il revient en ligne


auto_failback on

#Serveurs du cluster
node nfs1
node nfs2

Attention Pour que tout fonctionne bien il faut sassurer que vous puissez ping nfs2 depuis
nfs1 et vice-versa.

Pensez donc rajouter les deux lignes suivantes sur le fichier /etc/hosts sur vos deux nodes:

##nodes
10.1.0.31 nfs1
10.1.0.32 nfs2

Nous allons maintenant crer le contenu du fichier haresources

nfs1 IPaddr::10.1.0.30/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/datas-


web::ext4 nfs-kernel-server
Explications:
nfs1 = serveur nfs primaire
IPaddr::10.1.0.30/24/eth0 = Adresse IP balance entre les serveurs NFS
drbddisk::r0 = nom de la ressource drbd (spcif dans /etc/drbd.d/drbd0.res)
Filesystem::/dev/drbd0::/mnt::ext4 = Nom de la partition drbd, point de montage et type de
systme de fichier.
nfs-kernel-server = le service qui va tre lanc sur le serveur non actif lors du balancement.

Et pour finir nous allons crer le fichier authkeys. Ce fichier contient un clef partag entre les
deux serveurs. Cela peut tre un mot de passe, ou un simple mot.
Voici le mien:

auth 3
3 md5 my-auth-key

Ce fichier la doit avoir les permissions 600. Donc sur les deux serveurs tapez:

chmod 600 /etc/ha.d/authkeys

Et voila tout est bon maintenant :)

Avant de dmarrer heartbeat, nous allons sur les deux serveurs nfs, dsactiver le
lancement automatique de nfs-kernel-server.

insserv -r nfs-kernel-server

Sur nfs1 dmarrez Heartbeat avec la commande suivante:

/etc/init.d/heartbeat start

Patientez quelques seconde et faites sur nfs1 la commande drbd-overview et vrifiez si la


partition /dev/drbd0 est bien monte dans /datas-web.

Vous pouvez aussi vrifier avec la commande ifconfig, vous verrez quune nouvelle interface
eth0:0 a t crer avec ladresse IP configur dans le fichier haresources.

Maintenant sur nfs2 dmarrez aussi heartbeat avec la commande:

/etc/init.d/heartbeat start

Et voila votre cluster DRBD / NFS est oprationnel.

Comment le tester?
Connectez vous si ce nest pas dj fait en SSH sur les deux serveurs nfs.

Sur nfs2 tapez la commande suivante pour vrifier ltat de drbd en temps rel:

watch drbd-overview

Depuis nfs2 vous devriez voir cette ligne:


0:r0 Connected Secondary/Primary UpToDate/UpToDate C r-----

Cette ligne nous montre bien que nfs2 est secondary et que la partition DRBD nest pas
monte.

Maintenant sur nfs1 on arrte heartbeat avec la commande suivante:

/etc/init.d/heartbeat stop

Basculez tout de suite sur nfs2 et voyez que la ligne va devenir:

0:r0 Connected Primary/Secondary UpToDate/UpToDate C r----- /datas-web ext4


7.9G 146M 7.4G 2%

Cela nous montre bien que nfs2 est devenu primaire et que la partition DRBD est bien
mont. Vous pouvez aussi vrifier que lip de balancement est bien prsente sur nfs2.

Maintenant on remet nfs1 en primaire en redmarrant heartbeat avec la commande:

/etc/init.d/heartbeat start

Comme dans le fichier haresources jai mis la valeur auto_failback on, nfs1 va redevenir
automatiquement primaire ds que heartbeat est redmarrer.

Connecter les serveurs Web aux serveurs nfs.


Le but de ce tuto tant dexternaliser les donns des serveurs Web, il est temps de les y
connecter.

Il est donc temps de dmarrer les deux serveurs Web.

Pour rappel voici la liste des machines virtuelles dmarres:

lb1
web1 et web2
nfs1 et nfs2

Monter le partage NFS sur les Web

A partir des deux serveurs Web, vous pouvez voir les partages disponibles avec la commande

showmount -e 10.1.0.30

10.1.0.30 tant lIP balancs entre les deux serveurs nfs.

Vous devriez voir ceci:

root@web1:~# showmount -e 10.1.0.30


Export list for 10.1.0.30:
/datas-web 10.1.0.0/24
Notre partage est donc bien visible, nous allons donc le monter sur les serveurs Web dans le
dossier que nous allons aussi appeler /datas-web sur les serveurs Web.

Sur les deux serveurs Web faire:

mkdir /datas-web

Puis nous allons monter le partage NFS

mount 10.1.0.30:/datas-web /datas-web

Si vous faites un df -h, vous verrez que le partage est bien mont sur les deux serveurs web

10.1.0.30:/datas-web 7.9G 146M 7.4G 2% /datas-web

Maintenant nous allons mettre les donns de nos pages dans le dossier /datas-web.

Le dossier par dfaut ou sont stocks les page web dans Debian se trouve dans /var/www/
nous allons donc metre le contenu du ce dossier dans /datas-web et crer un lien symbolique
vers le dossier dorigine:

Sur web1 faire:

mv /var/www /datas-web/
ln -s /datas-web/www/ /var/

Sur web2 faire

rm -rvf /var/www/
ln -s /datas-web/www/ /var/

Et voila vos deux serveurs Web utilisent maintenant le partage nfs pour stocker les pages
web. Si vous souhaitez rajouter du contenu web, vous navez qua placer le fichiers dans
/datas-web/www partir de nimporte quel serveur web.

Vrifiez que vous pouvez toujous accder vos pages web via lIP web balanc:
http://192.168.2.100/.

Pour tester que tout fonctionne vous pouvez arrter le serveur nfs1 et vrifier que vos pages
web sont toujours accssibles.

Si vous souhaitez que le partage nfs soit mont automatiquement sur vos serveurs web, vous
pouvez rajouter la ligne suivante dans le fichier /etc/fstab sur vos deux serveurs Web