Différences entre les versions de « Nfs »
| (22 versions intermédiaires par 2 utilisateurs non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
__FORCETOC__ | |||
=== Serveur NFS Linux === | |||
* S'assurer que le kernel intègre bien le support NFS (.config) en dur tant qu'a faire : | |||
<pre> | <pre> | ||
CONFIG_NFS_FS=y | CONFIG_NFS_FS=y | ||
CONFIG_NFS_V3=y | CONFIG_NFS_V3=y | ||
| Ligne 10 : | Ligne 11 : | ||
CONFIG_NFSD=y | CONFIG_NFSD=y | ||
CONFIG_NFSD_V3=y | CONFIG_NFSD_V3=y | ||
</pre> | |||
* Editer le fichier /etc/exports et y ajouter les répertoires à monter ainsi que l'hote distant autorisé à effectuer le montage : | |||
<pre> | |||
/var/www/vm localhost(ro) 212.43.248.153(ro) | /var/www/vm localhost(ro) 212.43.248.153(ro) | ||
/etc localhost(ro) 212.43.248.153(ro) | /etc localhost(ro) 212.43.248.153(ro) | ||
/var/lib/mysql localhost(ro) 212.43.248.153(ro) | /var/lib/mysql localhost(ro) 212.43.248.153(ro) | ||
Faire un exportfs -a pour prendre en compte le /etc/exports | |||
</pre> | |||
Sur le serveur, nfs & portmap (rpcbind sur les OS récent) doivent etre lancés. | |||
<pre> | |||
Pour partager ou monter les systèmes de fichiers NFS, les services suivants fonctionnent de concert, selon la version de NFS qui est implémentée : | |||
nfs — Un service qui lance les processus RPC appropriés pour répondre aux requêtes pour les systèmes de fichiers NFS partagés. | |||
nfslock — Un service facultatif qui lance les processus RPC appropriés pour permettre aux clients NFS de verrouiller des fichiers sur le serveur. | |||
portmap — Le service RPC pour Linux ; il répond aux requêtes pour des services RPC et définit des connexions vers le service RPC. Il n'est pas utilisé avec NFSv4. | |||
Les processus RPC suivants facilitent les services NFS : | |||
rpc.mountd — Ce processus reçoit la requête de montage en provenance d'un client NFS et vérifie que le système de fichiers demandé est bien exporté. Ce processus est démarré | |||
automatiquement par le service nfs et ne nécessite pas de configuration au niveau de l'utilisateur. Ce processus n'est pas utilisé avec NFSv4. | |||
rpc.nfsd — Ce processus est le serveur NFS. Il fonctionne avec le noyau Linux pour satisfaire les requêtes dynamiques des clients NFS, comme par exemple pour fournir des fils de | |||
serveur (ou threads) chaque fois qu'un client NFS se connecte. Ce processus correspond au service nfs. | |||
rpc.lockd — Un processus facultatif qui permet aux clients NFS de verrouiller des fichiers sur le serveur. Il correspond au service nfslock. Ce processus n'est pas utilisé avec | |||
NFSv4. | |||
rpc.statd — Ce processus implémente le protocole RPC de Moniteur de statut de réseau (NSM) (de l'anglais Network Status Monitor) qui avertit les clients NFS lorsqu'un serveur | |||
est redémarré sans avoir été préalablement arrêté correctement. Ce processus est lancé automatiquement par le service nfslock et ne nécessite pas de configuration au niveau de | |||
l'utilisateur. Ce processus n'est pas utilisé avec NFSv4. | |||
rpc.rquotad — Ce processus fournit des informations sur les quotas utilisateur s'appliquant aux utilisateurs distants. Il est lancé automatiquement par le service nfs et ne | |||
nécessite pas de configuration au niveau de l'utilisateur. | |||
rpc.idmapd — Ce processus fournit au client et serveur NFSv4 des appels ascendants (aussi appelés upcalls) qui établissent la correspondance entre les noms NFSv4 (qui sont des | |||
chaînes se présentant sous la forme utilisateur@domaine) et les UID et GID locaux. Pour que idmapd puisse fonctionner avec NFSv4, /etc/idmapd.conf doit être configuré. Ce service | |||
est nécessaire pour une utilisation avec NFSv4. | |||
rpc.svcgssd — Ce processus fournit le mécanisme de transport serveur pour le processus d'authentification (Kerberos Version 5) avec NFSv4. Ce service est nécessaire pour une | |||
utilisation avec NFSv4. | |||
rpc.gssd — Ce processus fournit le mécanisme de transport client pour le processus d'authentification (Kerberos Version 5) avec NFSv4. Ce service est nécessaire pour une | |||
utilisation avec NFSv4. | |||
</pre> | </pre> | ||
' | ==== Problèmes ==== | ||
Si il y a des soucis sur l'export nfs, vérifier les points suivant : | |||
<pre> | |||
* /etc/sysconfig/nfs | |||
MOUNTD_NFS_V3="yes" | |||
MOUNTD_OPEN_FILES=8192 | |||
RPCNFSDCOUNT=24 | |||
TUNE_QUEUE="yes" | |||
NFS_QS=262144 | |||
* /etc/hosts.allow | |||
All:XXX.XXX.XXX.XXX/YYY.YYY.YYY.YYY ( avec XXX = ip du réseau authorisé à accéder au serveur et YYY = masque du réseau) | |||
Il faut aussi vérifier la présence des dossiers suivant (sinon il faut les créer) : | |||
/var/lib/nfs/rpc_pipefs/mount | |||
/var/lib/nfs/rpc_pipefs/nfs | |||
/var/lib/nfs/rpc_pipefs/statd | |||
/var/lib/nfs/rpc_pipefs/portmap | |||
/var/lib/nfs/rpc_pipefs/lockd | |||
Il faut aussi modifier le fichier /etc/fstab et y ajouter ces 2 lignes: | |||
rpc_pipefs /var/lib/nfs/rpc_pipefs rpc_pipefs defaults 0 0 | |||
nfsd /proc/fs/nfsd nfsd defaults 0 0 | |||
</pre> | |||
==== Optimisation ==== | |||
L'optimisation du NFS est relativement simple une fois que l'on sait comment cela fonctionne. Le NFS est un systeme de fichier partage, il est donc concu pour s'assurer de la | |||
pertinence des informations accedes via une utilisation relativement faible du cache des informations lie au systeme de fichiers (a opposer au cache des fichiers en eux meme). | |||
Par defaut, a chaque requete via le NFS, un GETATTR est effectue pour verifier que le fichier n'a pas ete modifie depuis le dernier acces. Si ce n'est pas le cas, la version en cache | |||
est donc validee, dans le cas contraire une nouvelle requete reseau est effectue. Cela peut donc etre tres penalisant si le nombre de fichier acceder est important. | |||
Mise a part cet element qui peut fortement joue, tout les autres parametres sont relativement peu impactant. Voici donc les parametre qui semble etre optimaux : | |||
<pre> | |||
- Systeme : nfsvers=3,hard,intr,tcp,timeo=600,retrans=2,rsize=32768,wsize=32768,nocto,nolock | |||
- Application : nfsvers=3,hard,intr,tcp,timeo=600,retrans=2,rsize=32768,wsize=32768,actimeo=60,nolock | |||
- Data : nfsvers=3,hard,intr,tcp,timeo=600,retrans=2,rsize=32768,wsize=32768 | |||
</pre> | |||
Explication de ces parametres : | |||
<pre> | <pre> | ||
- nfsvers=3 : Cela force le passage en nfs v3. Suivant l'endroit ou la ligne est situe, l'un ou l'autre des parametres n'est pas fonctionnel. L'utilisation des droits permet donc de | |||
forcer a coup sur le v3 | |||
- hard : tout appel NFS reste actif tant que la reponse n'est pas valide, cela permet de s'assurer que la lecture ou l'ecriture est effective. | |||
- intr : Un processus qui fait une requete NFS ne peut etre interrompu sauf si cette option est selectionne. Cela permet, entre autres, de killer un processus si le serveur nfs ne | |||
repond plus | |||
- tcp : Le montage est realise en tcp. Cela permet de garantir un meilleur acces au serveur nfs, en particulier si il y a des problemes reseaux, par rapport a l'udp, il y a une perte | |||
tres faible en performance dans le cas d'un reseau ideal, mais cela est negligeable. De plus l'udp va disparaitre a terme au niveau NFS. Enfin, dans le cas d'un changement de MTU, le | |||
tcp est necessaire pour que l'echange se fasse. | |||
- timeo=600, retrans=2 | |||
- rsize=32k, wsize=32k : Taille des paquets nfs envoye, en tcp, il est preconise d'utiliser le maximum. | |||
- nocto : NO Cache TimeOut. Parametre le plus important car il permet d'indiquer que le cache d'attribut n'expire jamais. Ce parametre, a utiliser sur le montage systeme, permet | |||
d'eviter de faire des GETATTR pour chaque librairie systeme. Cela permet d'accelerer fortement les acces, a n'utiliser cependant que pour la partie systeme | |||
- actimeo=60 : Place le timeout du cache a 60s. Cela peut etre utilise pour les partitions qui changent peu et qui ne sont pas appele en ecriture | |||
</pre> | |||
=== Client Nfs === | |||
Le service portmap (ou rpcbind sur les os récent) doit etre lancé et nfs-common avant le service netfs. Le service nfsd n'a aucune raison de tourner sur un client nfs. Le paquet nfs-utils doit être installé aussi. Sur certain os (genre centos 6.2), rpcbind n'est pas lancé directement, mais netfs qui est démarré le démarre (il n'y a plus portmap ou nfs-common). | |||
<pre> | |||
Si le client n'arrive pas à faire un mount nfs, essayer de faire un mount nfs en local sur le serveur nfs. Si le serveur n'y arrive pas non plus, rajouter dans le /etc/fstab du | |||
serveur nfs : | |||
rpc_pipefs /var/lib/nfs/rpc_pipefs rpc_pipefs defaults 0 0 | |||
nfsd /proc/fs/nfsd nfsd defaults 0 0 | |||
</pre> | |||
<pre> | |||
Options pour le montage nfs | |||
* rw, monte le FS en lecture/écriture (doit donc être exporté en rw), | |||
* ro, monte le FS en lecture seule, | |||
* bg, si le montage ne fonctionne pas, cette option permet de faire des tentatives ultérieures en tâche de fond et de continuer à traiter les autres requêtes de montage, | |||
* hard, si un serveur ne fonctionne pas, cette option permet de bloquer les accès à ce serveur jusqu’à ce qu’il fonctionne de nouveau (à utiliser avec modération), | |||
* soft, si un serveur ne fonctionne pas, cette option permet d’envoyer une erreur en retour évite de bloquer des processus en attente de montage, | |||
* noexec, ne pas permettre l’exécution des binaires, | |||
* intr, permet aux utilisateurs d’interrompre les opérations bloquées, | |||
* nointr, n’autorise pas les interruptions des utilisateurs, | |||
* retrans=n, précise le nombre de tentatives à faire avant l’envoi d’une erreur, | |||
* timeo=n, précise la période de timeout (en 1/10 e de secondes) pour les requêtes, | |||
* rsize=n, précise la taille du tampon de lecture à n octets (pour UDP 8 Ko maximum est préférable - ne gère pas la congestion), | |||
* wsize=n, précise la taille du tampon d’écriture à n octets (pour UDP 8 Ko maximum est préférable - ne gère pas la congestion). | |||
remote_host:/repertoire_distant repertoire_local nfs rsize=1024,wsize=1024 0 0 | |||
</pre> | |||
<pre> | |||
Lorsque le client boot en pxe / nfs, si il bloque sur udev, modifier le fichier /tftpboot/nfsroot/centos5_26_x32/etc/sysconfig/network-scripts/net.hotplug | |||
avant : ppp*|ippp*|isdn*|plip*|lo*|irda*|dummy*|ipsec*|tun*|tap*) | |||
apres : eth*|ppp*|ippp*|isdn*|plip*|lo*|irda*|dummy*|ipsec*|tun*|tap*) | |||
</pre> | </pre> | ||
Sous freebsd, il faut editer le fichier /etc/rc.conf et rajouter : nfs_client_enable="YES" et nfs_reserved_port_only="YES" | |||
[[Catégorie:Linux]] | [[Catégorie:Linux]] | ||
Version actuelle datée du 28 mai 2013 à 16:43
Serveur NFS Linux[modifier]
- S'assurer que le kernel intègre bien le support NFS (.config) en dur tant qu'a faire :
CONFIG_NFS_FS=y CONFIG_NFS_V3=y # CONFIG_NFS_DIRECTIO is not set # CONFIG_ROOT_NFS is not set (à activer si l'on veut faire booter un serveur en pxe / nfs) CONFIG_NFSD=y CONFIG_NFSD_V3=y
- Editer le fichier /etc/exports et y ajouter les répertoires à monter ainsi que l'hote distant autorisé à effectuer le montage :
/var/www/vm localhost(ro) 212.43.248.153(ro) /etc localhost(ro) 212.43.248.153(ro) /var/lib/mysql localhost(ro) 212.43.248.153(ro) Faire un exportfs -a pour prendre en compte le /etc/exports
Sur le serveur, nfs & portmap (rpcbind sur les OS récent) doivent etre lancés.
Pour partager ou monter les systèmes de fichiers NFS, les services suivants fonctionnent de concert, selon la version de NFS qui est implémentée :
nfs — Un service qui lance les processus RPC appropriés pour répondre aux requêtes pour les systèmes de fichiers NFS partagés.
nfslock — Un service facultatif qui lance les processus RPC appropriés pour permettre aux clients NFS de verrouiller des fichiers sur le serveur.
portmap — Le service RPC pour Linux ; il répond aux requêtes pour des services RPC et définit des connexions vers le service RPC. Il n'est pas utilisé avec NFSv4.
Les processus RPC suivants facilitent les services NFS :
rpc.mountd — Ce processus reçoit la requête de montage en provenance d'un client NFS et vérifie que le système de fichiers demandé est bien exporté. Ce processus est démarré
automatiquement par le service nfs et ne nécessite pas de configuration au niveau de l'utilisateur. Ce processus n'est pas utilisé avec NFSv4.
rpc.nfsd — Ce processus est le serveur NFS. Il fonctionne avec le noyau Linux pour satisfaire les requêtes dynamiques des clients NFS, comme par exemple pour fournir des fils de
serveur (ou threads) chaque fois qu'un client NFS se connecte. Ce processus correspond au service nfs.
rpc.lockd — Un processus facultatif qui permet aux clients NFS de verrouiller des fichiers sur le serveur. Il correspond au service nfslock. Ce processus n'est pas utilisé avec
NFSv4.
rpc.statd — Ce processus implémente le protocole RPC de Moniteur de statut de réseau (NSM) (de l'anglais Network Status Monitor) qui avertit les clients NFS lorsqu'un serveur
est redémarré sans avoir été préalablement arrêté correctement. Ce processus est lancé automatiquement par le service nfslock et ne nécessite pas de configuration au niveau de
l'utilisateur. Ce processus n'est pas utilisé avec NFSv4.
rpc.rquotad — Ce processus fournit des informations sur les quotas utilisateur s'appliquant aux utilisateurs distants. Il est lancé automatiquement par le service nfs et ne
nécessite pas de configuration au niveau de l'utilisateur.
rpc.idmapd — Ce processus fournit au client et serveur NFSv4 des appels ascendants (aussi appelés upcalls) qui établissent la correspondance entre les noms NFSv4 (qui sont des
chaînes se présentant sous la forme utilisateur@domaine) et les UID et GID locaux. Pour que idmapd puisse fonctionner avec NFSv4, /etc/idmapd.conf doit être configuré. Ce service
est nécessaire pour une utilisation avec NFSv4.
rpc.svcgssd — Ce processus fournit le mécanisme de transport serveur pour le processus d'authentification (Kerberos Version 5) avec NFSv4. Ce service est nécessaire pour une
utilisation avec NFSv4.
rpc.gssd — Ce processus fournit le mécanisme de transport client pour le processus d'authentification (Kerberos Version 5) avec NFSv4. Ce service est nécessaire pour une
utilisation avec NFSv4.
Problèmes[modifier]
Si il y a des soucis sur l'export nfs, vérifier les points suivant :
* /etc/sysconfig/nfs MOUNTD_NFS_V3="yes" MOUNTD_OPEN_FILES=8192 RPCNFSDCOUNT=24 TUNE_QUEUE="yes" NFS_QS=262144 * /etc/hosts.allow All:XXX.XXX.XXX.XXX/YYY.YYY.YYY.YYY ( avec XXX = ip du réseau authorisé à accéder au serveur et YYY = masque du réseau) Il faut aussi vérifier la présence des dossiers suivant (sinon il faut les créer) : /var/lib/nfs/rpc_pipefs/mount /var/lib/nfs/rpc_pipefs/nfs /var/lib/nfs/rpc_pipefs/statd /var/lib/nfs/rpc_pipefs/portmap /var/lib/nfs/rpc_pipefs/lockd Il faut aussi modifier le fichier /etc/fstab et y ajouter ces 2 lignes: rpc_pipefs /var/lib/nfs/rpc_pipefs rpc_pipefs defaults 0 0 nfsd /proc/fs/nfsd nfsd defaults 0 0
Optimisation[modifier]
L'optimisation du NFS est relativement simple une fois que l'on sait comment cela fonctionne. Le NFS est un systeme de fichier partage, il est donc concu pour s'assurer de la pertinence des informations accedes via une utilisation relativement faible du cache des informations lie au systeme de fichiers (a opposer au cache des fichiers en eux meme). Par defaut, a chaque requete via le NFS, un GETATTR est effectue pour verifier que le fichier n'a pas ete modifie depuis le dernier acces. Si ce n'est pas le cas, la version en cache est donc validee, dans le cas contraire une nouvelle requete reseau est effectue. Cela peut donc etre tres penalisant si le nombre de fichier acceder est important.
Mise a part cet element qui peut fortement joue, tout les autres parametres sont relativement peu impactant. Voici donc les parametre qui semble etre optimaux :
- Systeme : nfsvers=3,hard,intr,tcp,timeo=600,retrans=2,rsize=32768,wsize=32768,nocto,nolock - Application : nfsvers=3,hard,intr,tcp,timeo=600,retrans=2,rsize=32768,wsize=32768,actimeo=60,nolock - Data : nfsvers=3,hard,intr,tcp,timeo=600,retrans=2,rsize=32768,wsize=32768
Explication de ces parametres :
- nfsvers=3 : Cela force le passage en nfs v3. Suivant l'endroit ou la ligne est situe, l'un ou l'autre des parametres n'est pas fonctionnel. L'utilisation des droits permet donc de forcer a coup sur le v3 - hard : tout appel NFS reste actif tant que la reponse n'est pas valide, cela permet de s'assurer que la lecture ou l'ecriture est effective. - intr : Un processus qui fait une requete NFS ne peut etre interrompu sauf si cette option est selectionne. Cela permet, entre autres, de killer un processus si le serveur nfs ne repond plus - tcp : Le montage est realise en tcp. Cela permet de garantir un meilleur acces au serveur nfs, en particulier si il y a des problemes reseaux, par rapport a l'udp, il y a une perte tres faible en performance dans le cas d'un reseau ideal, mais cela est negligeable. De plus l'udp va disparaitre a terme au niveau NFS. Enfin, dans le cas d'un changement de MTU, le tcp est necessaire pour que l'echange se fasse. - timeo=600, retrans=2 - rsize=32k, wsize=32k : Taille des paquets nfs envoye, en tcp, il est preconise d'utiliser le maximum. - nocto : NO Cache TimeOut. Parametre le plus important car il permet d'indiquer que le cache d'attribut n'expire jamais. Ce parametre, a utiliser sur le montage systeme, permet d'eviter de faire des GETATTR pour chaque librairie systeme. Cela permet d'accelerer fortement les acces, a n'utiliser cependant que pour la partie systeme - actimeo=60 : Place le timeout du cache a 60s. Cela peut etre utilise pour les partitions qui changent peu et qui ne sont pas appele en ecriture
Client Nfs[modifier]
Le service portmap (ou rpcbind sur les os récent) doit etre lancé et nfs-common avant le service netfs. Le service nfsd n'a aucune raison de tourner sur un client nfs. Le paquet nfs-utils doit être installé aussi. Sur certain os (genre centos 6.2), rpcbind n'est pas lancé directement, mais netfs qui est démarré le démarre (il n'y a plus portmap ou nfs-common).
Si le client n'arrive pas à faire un mount nfs, essayer de faire un mount nfs en local sur le serveur nfs. Si le serveur n'y arrive pas non plus, rajouter dans le /etc/fstab du serveur nfs : rpc_pipefs /var/lib/nfs/rpc_pipefs rpc_pipefs defaults 0 0 nfsd /proc/fs/nfsd nfsd defaults 0 0
Options pour le montage nfs
* rw, monte le FS en lecture/écriture (doit donc être exporté en rw),
* ro, monte le FS en lecture seule,
* bg, si le montage ne fonctionne pas, cette option permet de faire des tentatives ultérieures en tâche de fond et de continuer à traiter les autres requêtes de montage,
* hard, si un serveur ne fonctionne pas, cette option permet de bloquer les accès à ce serveur jusqu’à ce qu’il fonctionne de nouveau (à utiliser avec modération),
* soft, si un serveur ne fonctionne pas, cette option permet d’envoyer une erreur en retour évite de bloquer des processus en attente de montage,
* noexec, ne pas permettre l’exécution des binaires,
* intr, permet aux utilisateurs d’interrompre les opérations bloquées,
* nointr, n’autorise pas les interruptions des utilisateurs,
* retrans=n, précise le nombre de tentatives à faire avant l’envoi d’une erreur,
* timeo=n, précise la période de timeout (en 1/10 e de secondes) pour les requêtes,
* rsize=n, précise la taille du tampon de lecture à n octets (pour UDP 8 Ko maximum est préférable - ne gère pas la congestion),
* wsize=n, précise la taille du tampon d’écriture à n octets (pour UDP 8 Ko maximum est préférable - ne gère pas la congestion).
remote_host:/repertoire_distant repertoire_local nfs rsize=1024,wsize=1024 0 0
Lorsque le client boot en pxe / nfs, si il bloque sur udev, modifier le fichier /tftpboot/nfsroot/centos5_26_x32/etc/sysconfig/network-scripts/net.hotplug avant : ppp*|ippp*|isdn*|plip*|lo*|irda*|dummy*|ipsec*|tun*|tap*) apres : eth*|ppp*|ippp*|isdn*|plip*|lo*|irda*|dummy*|ipsec*|tun*|tap*)
Sous freebsd, il faut editer le fichier /etc/rc.conf et rajouter : nfs_client_enable="YES" et nfs_reserved_port_only="YES"