Service de partage de fichiers réseau

Un, Qu'est-ce que NFS et son fonctionnement

La fonction principale de NFS (Network File System) est de permettre le partage de fichiers et de répertoires entre différents systèmes via un réseau. Un serveur NFS autorise les clients à monter des répertoires partagés distants sur leur propre système. Pour le client, le répertoire distant apparaît comme une partition locale. Bien que le point de montage local puisse avoir n'importe quel nom, il est préférable de le conserver identique à celui du serveur pour faciliter la gestion.

NFS est couramment utilisé pour stocker des données statiques telles que des vidéos et des images.

Le transfert de données entre le serveur et le client se fait via le réseau. Pour ce faire, des ports réseau spécifiques sont nécessaires. Le serveur NFS sélectionne aléatoirement les ports pour le transfert de données. Comment le client peut-il alors connaître ces ports ? C'est grâce au protocole d'appel de procédure distatne (RPC). Le service RPC gère l'allocation des ports pour NFS. Le client communique d'abord avec le RPC serveur pour obtenir les ports nécessaires, puis établit une connexion pour le transfert de données.

Conseil : Avant de démarrer le serveur NFS, il faut impérativement démarrer le service RPC, sinon le serveur NFS ne pourra pas s'enregistrer. De plus, si le service RPC est redémarré, toutes les informations de ports enregistrées seront perdues, nécessitant un redémarrage du service NFS pour réenregistrement. Notez que modfiier le fichier de configuration de NFS ne nécessite généralement pas de redémarrage complet ; la commande /etc/init.d/nfs reload ou exportfs –rv suffit pour appliquer les modifications de /etc/exports.

« Processus de communication entre client et serveur NFS »

  1. Le serveur démarre d'abord le service RPC et ouvre le port 111
  2. Le serveur démarre le service NFS et enregistre ses ports auprès du RPC
  3. Le client démarre son RPC et demande au RPC serveur les ports NFS
  4. Le RPC serveur renvoie les informations de ports au client
  5. Le client utilise ces ports pour établir une connexion avec le serveur NFS et transférer les données

Deux, Déploiement de NFS

1, Vérification des paramètres système et version du serveur

[root@serveur ~]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
[root@serveur ~]# uname -r
3.10.0-327.el7.x86_64
[root@serveur ~]# 

2, Deux méthodes pour installer les logiciels du service NFS

1) [root@cloud ~]# yum groupinstall "Serveur de fichiers NFS" -y

2) yum install -y nfs-utils rpcbind

3, Démarrage du service NFS (côté serveur)

1) Activation du service RPC
[root@cloud ~]# systemctl start rpcbind
Starting rpcbind:                                          [  OK  ]


2) Vérification des services intermédiaires actifs
[root@cloud ~]# rpcinfo -p 127.0.0.1
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper


3) Démarrage du service NFS
[root@cloud ~]# systemctl start nfs
Starting NFS services:                                     [  OK  ]
Starting NFS mountd: rpc.mountd: svc_tli_create: could not open connection for udp6
rpc.mountd: svc_tli_create: could not open connection for tcp6
rpc.mountd: svc_tli_create: could not open connection for udp6
rpc.mountd: svc_tli_create: could not open connection for tcp6
                                                           [  OK  ]
Starting NFS daemon: rpc.nfsd: address family inet6 not supported by protocol TCP
                                                           [  OK  ]
Starting RPC idmapd:                                       [  OK  ]


4) Vérification des services après le démarrage de NFS
[root@cloud ~]# rpcinfo -p 127.0.0.1
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100005    1   udp  46787  mountd
    100005    1   tcp  48141  mountd
    100005    2   udp  51029  mountd
    100005    2   tcp  34046  mountd
    100005    3   udp  54267  mountd
    100005    3   tcp  33692  mountd
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049  nfs_acl
    100227    3   tcp   2049  nfs_acl
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    2   udp   2049  nfs_acl
    100227    3   udp   2049  nfs_acl
    100021    1   udp  49372  nlockmgr
    100021    3   udp  49372  nlockmgr
    100021    4   udp  49372  nlockmgr
    100021    1   tcp  33433  nlockmgr
    100021    3   tcp  33433  nlockmgr
    100021    4   tcp  33433  nlockmgr
[root@cloud ~]# 

5) Activation au démarrage
[root@cloud ~]# systemctl enable rpcbind
[root@cloud ~]# systemctl enable nfs

4, Le client n'a besoin que du service RPC

[root@client ~]# systemctl start rpcbind
[root@client ~]# systemctl status rpcbind
rpcbind (pid  18859) is running...

[root@client ~]# systemctl enable rpcbind

5, Fichier de configuration NFS sur le serveur

1) [root@cloud ~]# cat /etc/exports 
##Test pour RPC et NFS
/ressources 192.168.222.0/24(rw,sync)                    Si ro, lecture seule

Cela signifie partager le répertoire /ressources, accessible uniquement aux hôtes du réseau 192.168.222.0/24, avec droits en lecture/écriture, et synchronisation des tampons avec le disque

2) Redémarrage en douceur
systemctl reload nfs
Si une ressource est en cours d'utilisation, elle reste accessible ; sinon, elle devient indisponible

3) Vérification des partages (côté serveur)
showmount -e localhost

(Serveur NFS)
[root@cloud ~]# showmount -e 127.0.0.1
Export list for 127.0.0.1:
/ressources 10.0.0.0/24

(Client)
showmount -e adresse_IP_du_serveur
[root@client ~]# showmount -e 192.168.222.140
Export list for 192.168.222.140:
/ressources 192.168.222.0/24

6, Montage du répertoire partagé sur le client. /ressources est le répertoire partagé, /mnt est le point de montage local. Ce montage est temporaire et sera perdu au redémarrage. Pour un montage permanent, ajouter dans /etc/fstab ou dans rc.local

[root@client ~]# mount -t nfs 192.168.222.140:/ressources /mnt
[root@client ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_client-lv_root
                       18G  5.1G   12G  31% /
tmpfs                 932M   80K  932M   1% /dev/shm
/dev/sda1             477M   43M  410M  10% /boot
/dev/sr0              1.9G  1.9G     0 100% /media/CentOS-6.7-x86_64-LiveDVD
192.168.222.140:/ressources
                       17G  2.4G   14G  16% /mnt
[root@client ~]# 


[root@client ~]# cd /mnt
[root@client mnt]# ls
fichier.txt
[root@client mnt]# cat fichier.txt 
contenu du fichier de test
[root@client mnt]# 

###Montage, deux méthodes
/etc/fstab
192.168.222.140:/ressources   /mnt                    ext4    defaults        0 0

/etc/rc.local
mount -t nfs 192.168.222.140:/ressources /mnt 

a, Dans /etc/rc.local

Inconvénient : Parfois le montage au démarrage échoue. En production, il est recommandé de configurer le montage au démarrage ET de surveiller le point de montage.

b, Dans /etc/fstab

Inconvénient : Évitez de placer les systèmes de fichiers réseau NFS dans fstab.

  1. fstab est prioritaire au démarrage réseau. À ce moment, le serveur NFS n'est pas encore accessible.
  2. Même pour les systèmes de fichiers locaux, faites attention aux deux dernières colonnes de fstab qui doivent être 0 0, sinon cela peut empêcher le démarrage du serveur.

7, La lecture fonctionne, mais l'écriture pose problème

[root@client mnt]# touch nouveau_fichier.txt
touch: cannot touch `nouveau_fichier.txt': Permission denied
[root@client mnt]# 


Vérifions les permissions du répertoire partagé sur le serveur. L'utilisateur actuel est nfsnobody
[root@serveur /]# ls -l ressources
total 4
-rw-r--r--. 1 root root 17 Aug 14 07:00 fichier.txt

[root@serveur /]# chmod -R 777 ressources			Ça fonctionne maintenant

Vérification des autres utilisateurs
[root@serveur ~]# cat /var/lib/nfs/etab 
/ressources	192.168.222.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

Exemple de cas :

Implémenter un scénario où plusieurs clients montent un serveur NFS et où, quel que soit le client qui écrit des données, tous les autres clients peuvent lire et écrire, avec tous les fichiers écrits sur le serveur NFS appartenant au même utilisateur et groupe "utilisateur_partage".

Voici un résumé du processus, similaire à une optimisation :

  1. Créer sur le serveur et les clients l'utilisateur "utilisateur_partage" avec le même UID et GID sur tous les systèmes :
[root@serveur ~]# id utilisateur_partage
uid=555(utilisateur_partage) gid=555(utilisateur_partage) groups=555(utilisateur_partage)
[root@serveur ~]# 

[root@client ~]# id utilisateur_partage
uid=555(utilisateur_partage) gid=555(utilisateur_partage) groups=555(utilisateur_partage)
[root@client ~]# 

  1. Configuration du fichier exports :
[root@serveur ~]# vim /etc/exports

##Test pour RPC et NFS
##/ressources 192.168.222.0/24(rw,sync)
/ressources 192.168.222.0/24(rw,sync,all_squash,anonuid=555,anongid=555)           Compresser tous les utilisateurs en utilisateur_partage

Astuces importantes pour la configuraton NFS en production

  1. Assurer que tous les serveurs ont les mêmes permissions sur le répertoire partagé NFS a) all_squash : Compresser tous les clients en utilisateur anonyme. b) L'utilisateur spécifié par anonuid et anongid.
  2. Tous les clients et serveurs doivent avoir le même utilisateur avec le même UID et GID, comme nfsnobody (l'UID doit être identique)
  3. Appliquer les modifications :
[root@serveur ~]# systemctl reload nfs
[root@serveur ~]# cat /var/lib/nfs/etab 
/ressources	192.168.222.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=555,anongid=555,sec=sys,rw,secure,root_squash,all_squash)

  1. Définir l'utilisateur et le groupe du répertoire /ressources :
[root@serveur /]# chown -R utilisateur_partage.utilisateur_partage ressources

umount -lf /mnt,,, Pour démonter alors que le répertoire est en cours d'utilisation

===============================================Optimisation des paramètres de montage, haut débit, blocs de lecture/écriture.

Paramètres de sécurité couramment utilisés côté client : nosuid,noexec,nodev,rw

mount -t nfs -o nosuid,noexec,nodev,rw ********:/ressources /mnt

Paramètres d'optimisation côté serveur les plus courants : sync

Optimisation côté client : noatime.nodiratime (pour les environnements à haut débit)

[root@client ~]# cat /proc/mounts ……

192.168.222.140:/ressources/ /mnt nfs4 (Plus récente version du protocole, meilleure performance)rw,relatime,vers=4,rsize=262144,wsize=262144(actuellement très performant),namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.222.138,minorversion=0,local_lock=none,addr=192.168.222.140 0 0

noatime:

Lorsqu'un fichier est créé, modifié ou accédé, le système Linux enregistre ces informations temporelles. Lorsque les opérations de lecture de fichiers sont fréquentes, l'enregistrement du dernier accès au fichier représente une charge non négligeable. Pour améliorer les performances, nous pouvons éviter de mettre à jour l'attribut atime lors de la lecture des fichiers. L'option noatime lors du montage du système de fichiers empêche la mise à jour de l'information d'accès au fichier. Lorsqu'un système de fichiers est monté avec l'option noatime, la lecture des fichiers ne modifie pas l'attribut atime. L'importance de cette option est d'éliminer les opérations d'écriture sur le système de fichiers lors des lectures. Comme les opérations d'écriture sont plus consommatrices de ressources que les lectures, ce paramètre peut améliorer significativement les performances du serveur.

nodiratime:

Ne pas mettre à jour les temps d'accès aux inodes des répertoires sur ce système de fichiers.

Optimisations NFS officielles, modification suggérée, optimisation du noyau
[root@serveur ~]# cat /proc/sys/net/core/rmem_default    //Valeur par défaut de la taille du tampon de réception (octets)
212992
[root@serveur ~]# cat /proc/sys/net/core/rmem_max       //Valeur maximale de la taille du tampon de réception (octets)
212992

Augmentation des valeurs
echo 262144 >/proc/sys/net/core/rmem_default


[root@serveur ~]# cat /proc/sys/net/core/wmem_default    //Tampon d'envoi
212992
[root@serveur ~]# cat /proc/sys/net/core/wmem_max 
212992

Modification du répertoire partagé via la ligne de commande

exportfs -o rw,sync,all_squash,anonuid=555,anongid=555 192.168.222.0/24:/ressources

[root@serveur ~]# cd /var/lib/nfs/
[root@serveur nfs]# ls
etab  export-lock  nfsdcltrack  rmtab  rpc_pipefs  statd  state  v4recovery  xtab
[root@serveur nfs]# cat etab   //Vérification des paramètres par défaut
/ressources	192.168.222.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=555,anongid=555,sec=sys,rw,secure,root_squash,all_squash)

[root@serveur ~]# cat /etc/exports   //Paramètres de configuration
##Test pour RPC et NFS
##/ressources 192.168.222.0/24(rw,sync)
/ressources 192.168.222.0/24(rw,sync,all_squash,anonuid=555,anongid=555)

mount -a Vérifie si les montages sont corrects

[root@serveur ~]# cat /proc/mounts //Affiche les paramètres de montage détaillés (systèmes de fichiers), y compris les éléments de montage non affichés importants. Par exemple : /dev/pts

Étiquettes: serveur NFS partage de fichiers réseau configuration NFS optimisation NFS

Publié le 20 juin à 00h18