«

»

Août 17 2014

[Tuto]HA: 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 données de nos serveurs Web.

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

Qu’est-ce que NFS?

NFS, pour Network Sharing Filesystem est un protocole de partage sur le réseau. 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 montée dans le systéme 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

Topologie

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

 

Afin de pouvoir accéder 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 redémarrer 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

Préparation des disques

Nous allons commencer par créer une partition sur les seconds disques que nous avons rajoutés.

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 partitionnées les deux disques nous allons installer les paquets nécessaires à l’utilisation 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 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 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 façon 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 d’abord on donne un nom à notre ressource DRBD dans notre cas nous allons l’appeler 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 créer
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 même chose pour node2

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

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 vérifier 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 réplication n’est pas encore possible étant donné qu’aucun des deux n’est en mode Primary, pour y remédier 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 vérifier l’état 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 l’espace disque et de la rapidité de votre réseau local.
Vous pouvez suivre la synchronisation avec un rafraichissement toutes les 2 secondes avec la commande suivante:

watch drbd-overview

Une fois la synchronisation terminée 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 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.
Tapez la commande suivante sur le serveur primaire (nfs1)

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

Installaion de NFS

Nos deux serveurs vont donc nous servir afin d’externaliser le stockage du contenu Web.

Nous allons donc installer les rôle de serveur NFS dur les deux serveurs.

apt-get install nfs-kernel-server

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

Nous allons donc créer 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 d’IP pouvant se connecter au serveur
  • rw = Droit de lecture et d’écriture
  • sync = synchronisation
  • no_root_squash = droit pour root
  • no_subtree_check = désactive 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 balancée, qui sera l’IP à partir de laquelle les serveurs web vont se connecter
  • Démarrer et arrêter le service nfs-kernel-server

Installation et configuration de Heartbeat

HeartBeat s’installe simplement avec la commande:

apt-get install heartbeat

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

  • ha.cf : Pour la configuration générale 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 s’assurer 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 créer 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 balancée entre les serveurs NFS
drbddisk::r0 = nom de la ressource drbd (spécifé dans /etc/drbd.d/drbd0.res)
Filesystem::/dev/drbd0::/mnt::ext4 = Nom de la partition drbd, point de montage et type de système de fichier.
nfs-kernel-server = le service qui va être lancé sur le serveur non actif lors du balancement.

Et pour finir nous allons créer 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 démarrer heartbeat, nous allons sur les deux serveurs nfs, désactiver le lancement automatique de nfs-kernel-server.

insserv -r nfs-kernel-server

Sur nfs1 démarrez Heartbeat avec la commande suivante:

/etc/init.d/heartbeat start

Patientez quelques seconde et faites sur nfs1 la commande drbd-overview et vérifiez si la partition /dev/drbd0 est bien montée dans /datas-web.

Vous pouvez aussi vérifier avec la commande ifconfig, vous verrez qu’une nouvelle interface eth0:0 a été créer avec l’adresse IP configuré dans le fichier haresources.

Maintenant sur nfs2 démarrez aussi heartbeat avec la commande:

/etc/init.d/heartbeat start

Et voila votre cluster DRBD / NFS est opérationnel.

Comment le tester?

Connectez vous si ce n’est pas déjà fait en SSH sur les deux serveurs nfs.

Sur nfs2 tapez la commande suivante pour vérifier l’état de drbd en temps réel:

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 n’est pas montée.

Maintenant sur nfs1 on arrête 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 vérifier que l’ip de balancement est bien présente sur nfs2.

Maintenant on remet nfs1 en primaire en redémarrant heartbeat avec la commande:

/etc/init.d/heartbeat start

Comme dans le fichier haresources j’ai mis la valeur auto_failback on, nfs1 va redevenir automatiquement primaire dés que heartbeat est redémarrer.

Connecter les serveurs Web aux serveurs nfs.

Le but de ce tuto étant d’externaliser les donnés des serveurs Web, il est temps de les y connecter.

Il est donc temps de démarrer les deux serveurs Web.

Pour rappel voici la liste des machines virtuelles démarrées:

  • 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 l’IP balancés 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 donnés de nos pages dans le dossier /datas-web.

Le dossier par défaut ou sont stockés les page web dans Debian se trouve dans /var/www/ nous allons donc metre le contenu du ce dossier dans /datas-web et créer un lien symbolique vers le dossier d’origine:

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 n’avez qu’a placer le fichiers dans /datas-web/www à partir de n’importe quel serveur web.

Vérifiez que vous pouvez toujous accéder á vos pages web via l’IP web balancé: http://192.168.2.100/.

Pour tester que tout fonctionne vous pouvez arrêter le serveur nfs1 et vérifier que vos pages web sont toujours accéssibles.

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

10.1.0.30:/datas-web	/datas-web     nfs     _netdev,defaults,user,auto,noatime,intr   0 0

Voila ce qui met fin à ce tutoriel.

Dans le prochain, nous allons voir comment mettre en place un cluster de 3 serveurs de bases de données avec réplication et répartition de charges.

(2 commentaires)

  1. Marcelo

    Bonjour, Merci encore pour ce tuto.
    je viens de relire encore et encore ton tuto mais je me rends compte que finalement il n’y pas de répartition de charge sur les serveurs NFS ?
    Aurais-je mal compris bien qu’il y est Heartbeat mais le fait que tu évoques du Raid0 mais fait pensé que les donnée sont copiés mais que le serveur NFS 1 prend la charge d’accès ?

    1. Denis

      Salut,

      Dans ce tuto seul les serveurs Web sont en repartition de charges avec HaProxy.

      Les serveurs NFS sont actifs/passif,

      si l’un des deux serveur les services et l’adresse ip balancé sera transféré sur le serveur fonctionnel.

      DRBD permet de copier en live les donnés d’un serveur a l’autre, mais seul le serveur DRBD « Primaire »peut monter la partition.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Lire les articles précédents :
HAProxyLogo
[Tuto]HA: Mettre en place deux serveurs HaProxy actif / passif avec Heartbeat

Bonjour à tous, dans ce nouveau tutoriel, nous allons voir comment mettre en place un serveur de répartition de charge...

Fermer