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:
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
Important!
hostname: nfs1
ip: 10.1.0.31
passerelle: 10.1.0.1
Un disque supplémentaire pour DRBD de 8GO
hostname: nfs2
ip: 10.1.0.32
passerelle: 10.1.0.1
Un disque supplémentaire pour DRBD de 8GO
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.
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 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
Warning!
Avec DRBD, vous devez savoir que l’on 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 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
Warning!
Toutes les prochaines étapes sont à faire sur les deux serveurs !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.
(3 commentaires)
Bonjour, avant tout merci pour le tuto, il me dépanne bien sur un projet.
Alors je rencontre un problème lors du montage du partage sur les serveurs webs, il ne se fait pas.
De plus après redémarrage des serveurs nfs, ça m’indique que drbd n’est pas configuré.
Saurais-tu d’où ça vient ?
Merci d’avance
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 ?
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.