Dans le post précédent du Summer Camp, nous avons vu comment monter les frontaux web. Aujourd’hui, nous allons voir comment mettre en place le serveur de fichier. Mais avant de commencer, pourquoi mettons nous en place des serveurs de fichiers ? Pourquoi le frontal ne porte-t-il pas la donnée directement.
La réponse est simple : un frontal est une machine “jetable”. Elle a pour but d’être déployée rapidement et simplement. Si un frontal porte 250Go de données, il sera lent à répliquer et gourmand en espace disque. Sans compter les problèmes de réplications de données entre les frontaux. Pour répondre à tout cela, nous allons mettre en place un serveur de fichier avec un partage réseau NFS qui sera monté sur les frontaux. Le système de fichier utilisé sera ZFS sous FreeBSD. En effet il offre des possibilités de réplication et de sauvegarde très interessantes, mais là n’est pas l’objet du billet, nous y reviendrons.
Prérequis :
- 4vCPU
- 1024Mo de RAM
- Un disque (j’utilise des VMDK) 8Go pour le système
- Un disque de XGo pour la data (en fonction du besoin…)
- 1 carte réseau sur le VLAN Backend
L’OS qui portera ce beau monde est : FreeBSD 8.2 x64. Le ZFS y est natif, le NFS supporté et al robustesse du système n’est plus à prouver : que du bonheur. Dans une version optimisée à venire de la plateforme, je ferai la même chose, mais sous Solaris.
Partitionment ZFS :
Nous allons donc crée notre partiton ZFS qui utilisera l’ensemble de notre disque DATA. Pour cela, après avoir identifié dans /dev/ le nom de mon disque (ici da1) :
root@oaf-prj-static.madeinsyria.fr-pts/0 [~]# zpool create data /dev/da1 root@oaf-prj-static.madeinsyria.fr-pts/0 [~]# zpool list NAME SIZE USED AVAIL CAP HEALTH ALTROOT data 49.8G 76.5K 49.7G 0% ONLINE - root@oaf-prj-static.madeinsyria.fr-pts/0 [~]# ls -l / total 50 -rw-r--r-- 2 root wheel 798 Feb 17 03:19 .cshrc -rw-r--r-- 2 root wheel 265 Feb 17 03:19 .profile drwxrwxr-x 2 root operator 512 Aug 18 04:18 .snap -r--r--r-- 1 root wheel 6200 Feb 17 03:19 COPYRIGHT drwxr-xr-x 2 root wheel 1024 Feb 17 03:18 bin drwxr-xr-x 7 root wheel 1024 Aug 18 04:23 boot drwxr-xr-x 2 root wheel 512 Aug 18 04:18 cdrom lrwxr-xr-x 1 root wheel 10 Aug 18 04:23 compat -> usr/compat drwxr-xr-x 2 root wheel 2 Aug 18 02:31 data dr-xr-xr-x 6 root wheel 512 Aug 18 04:25 dev drwxr-xr-x 20 root wheel 2048 Aug 18 02:26 etc drwxr-xr-x 3 root wheel 1536 Feb 17 03:19 lib drwxr-xr-x 2 root wheel 512 Feb 17 03:18 libexec drwxr-xr-x 2 root wheel 512 Feb 17 03:18 media drwxr-xr-x 2 root wheel 512 Feb 17 03:18 mnt dr-xr-xr-x 2 root wheel 512 Feb 17 03:18 proc drwxr-xr-x 2 root wheel 2560 Feb 17 03:19 rescue drwxr-xr-x 2 root wheel 512 Aug 18 02:29 root drwxr-xr-x 2 root wheel 2560 Feb 17 03:19 sbin lrwxr-xr-x 1 root wheel 11 Feb 17 03:19 sys -> usr/src/sys drwxrwxrwt 7 root wheel 512 Aug 18 02:29 tmp drwxr-xr-x 16 root wheel 512 Aug 18 04:23 usr drwxr-xr-x 23 root wheel 512 Aug 18 04:26 var
Nous avons donc un système de fichier ZFS d’environ 50Go de crée (on le vois via la commande zpool list), nommé data, et monté à la racine (un simple ls -l /). Pour finir, on active le ZFS au démarrage de la machine :
root@oaf-prj-static.madeinsyria.fr-pts/0 [~]# echo 'zfs_enable="YES"' >> /etc/rc.conf
Et voilà, pas besoin de plus ! Et si on partageait tout ça ?
Partage NFS :
NFS est un partage réseau qui est natif aux kernels de la quasi totalité des Unix. Il est basé sur le protocole RPC. Il est donc très avantageux de le privilégier pour partager ma partition ZFS. En effet, si je décide de changer de type d’Unix au niveau de mon frontal, je suis quasi sur de ne pas perdre la compatibilité. Une autre possibilité de ZFS dont je ne vous ai pas parlé, c’est le partage en NFS d’un pool de données. Pas mal non ?! C’est très simple :
root@oaf-prj-static.madeinsyria.fr-pts/0 [~]# zfs set sharenfs="-maproot=root -alldirs -network 192.168.1.0 -mask 255.255.255.0" data
On remarque que le paramètre sharenfs prend en option les options NFS. Dans mon cas l’autorise le montage à partir de tous les sous répertoires de la partition ZFS pour toutes les machines du réseau 192.168.1.0/24. L’option maproot permet à l’utilisateur root distant d’avoir les droits d’écriture en root sur la partition partagée.
On peut verifier l’option via :
root@oaf-prj-static.madeinsyria.fr-pts/0 [~]# zfs get sharenfs data
Bien sur, les partage ZFS s’appuie sur le NFS, il faut donc ajouter les services lockd et statd de NFS en démarrage automatique. Ses services permettent le lock des fichiers et la gestion du monitoring réseau pour RPC. On édite donc le fichier /etc/rc.conf :
root@oaf-prj-static.madeinsyria.fr-pts/0 [~]# rpc_statd_enable="YES" >> /etc/rc.conf root@oaf-prj-static.madeinsyria.fr-pts/0 [~]# rpc_lockd_enable="YES" >> /etc/rc.conf
Un petit reboot du server permet de verifier que tout est bien fonctionnel.
Montage des partages :
Sur les machines clients on monte les partages tous fraichement crées en utilisant la commande mount. Un rapide df -h permet de verifier que le filesystem est bien monté:
root@oaf-prj-web01.madeinsyria.fr-pts/0 [~]# mount -t nfs 192.168.20.100:/data /data root@oaf-prj-web01.madeinsyria.fr-pts/0 [~]# df -h Filesystem Size Used Avail Capacity Mounted on /dev/da0s1a 989M 291M 619M 32% / devfs 1.0K 1.0K 0B 100% /dev /dev/da0s1e 989M 14K 910M 0% /tmp /dev/da0s1f 11G 1.1G 8.7G 12% /usr /dev/da0s1d 4.8G 5.3M 4.4G 0% /var 192.168.20.100:/data 49G 22K 49G 0% /data
Pour que le montage se fasse automatiquement au démarrage de la machine, il faut éditer le fichier /etc/fstab et y ajouter la ligne ci dessous :
root@oaf-prj-web01.madeinsyria.fr-pts/0 [~]# echo "192.168.100.20:/data /data nfs rw 0 0" >> /etc/fstab
On adapte Nginx en modifiant la valeur de la variable “root” et “fastcgi_param”. On obtiens donc :
server { listen 80; server_name test.madeinsyria.fr; access_log /var/log/test.madeinsyria.fr.access.log main; location / { root /data; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /data; } #GESTION DU PHP location ~ \.php$ { try_files $uri /path/to/404.htm; #Dossier racine root html; #On revoie vers la socket fastcgi_param SCRIPT_FILENAME /data/$fastcgi_script_name; fastcgi_pass unix:/tmp/fcgi.socket; fastcgi_index index.php; include fastcgi_params; } }
On relance bien sur les service Nginx et hop c’est dans la boite ! Nos frontaux s’appuient sur une partition ZFS distante montée en NFS ! La haute dispo est en marche !!!
More From MadeInSyria
A lire aussi :
mmm bon je suis entrain de monté un projet de haute disponibilité mais pour l’instant je suis en phase d’etude .Donc si j’ai bien compris ton principe on va avoir nos frontaux qui vont tous pointer sur notre serveur NFS et après une réplication NFS se fera en mode actif passif entre les Serveur NFS c’est bien sa ?
Autre question Pourquoi avoir utilisé NFS et Pas iSCSI qui est plus rapide ?
Si tu veux un coup de main pour monter ta doc .I am here
Et j’ai oublié de te demander .Sa te derange si je partage tes post sur mon Blog et vice versa ?
mon blog http://www.adminreso.fr je l’ai mis en standby mais je vais mis remetre d’ici la rentré je pense si j’ai le tps
Saut,
La réplication des serveurs de fichiers statics se fait via ZFS et non pas NFS. Dans la vraie vie, mes File Server sont porté par des SAN IBM. Je n’ai donc aucun problème de vitesse de lecture écriture. Sans compter que la réplication se fait entre datacenter via une fibre, je n’ai donc pas de goulot à se niveau.
L’avantage de ZFS c’est tout simplement les snapshots de données qui permettent en quelques secondes de récupérer une donnée perdu (j’ai vu des serveurs de fichiers de 3To revenir en 15 min). Sans compter le ZFS send/receive qui permet la réplication de la donnée.
L’ensemble de mes posts peuvent être repris à d’autre endroit du moment que les sources sont cités. En parallèle, je ne publie que du contenu que je rédige ici car il s’agit un de peu de ma vitrine et de mes projets perso.
le iSCSI a été viré de zfs y compris d’OpenSolaris. Et sous Solaris on préfère utiliser la pile COMSTAR.
http://blather.michaelwlucas.com/archives/53 (iSCSI/ZFS/FreeBSD/ESXi)
zfs set shareiscsi n’est pas supporté dans FreeBSD.
[...] Serveur de fichier (ZFS + NFS) [...]
Bonjour, cette suite d’articles est très intéressante. J’espère qu’une suite va être donnée