Le truc geek du jour :

Un peu d’aide pour mesurer la charge d’un serveur NFS sous Linux ?

Utilisant NFS pour de nombreux usages sur des serveurs web ou mail, notamment sur les systèmes à haute disponibilité avec répartition de charge, les serveurs NFS ainsi utilisés sont souvent fort chargés. Fort de sa mauvaise réputation historique, le NFSd de Linux marche, ma fois, plutôt bien.

Pour optimiser l’usage de NFS, on dispose de plusieurs paramètres plus ou moins faciles à gérer :

– La taille des buffers NFS (rsize et wsize),
– Les buffers de la pile IP
– L’optimisation du système de fichiers (par exemple avec dir_index pour ext3, ou noatime lors du mount)
– L’utilisation de jumbo frames entre clients et serveurs (on monte à 9000 octets, ce qui permet de transmettre une charge utile de 8192 octetes, soit un buffer NFS entier)
– Le nombre de processus de NFSD

Sur ce dernier paramètre, il est souvent difficile de savoir le nombre de processus NFSD dont on a besoin, puisque non seulement ce nombre dépend du débit de vos disques dur, de leur latence (temps de réponse à une requête), du nombre de requêtes par secondes effectuées sur votre serveur NFS, mais aussi de la nature de ces requêtes et de la RAM dont vous disposez aussi bien sur le client que sur les serveurs.

En effet, si vous avez, comme Lautre Net, un serveur NFS qui s’adresse à des clients disposant de beaucoup de RAM, vous aurez de nombreuses requêtes de vérification d’attributs, (lookup, getattrs) mais très peu de requêtes en lecture ou écriture (read/write)

Le graphique munin du nfsd de lautre net le montre bien :
http://exil.lautre.net/munin/lautre.net/elsa.lautre.net-nfs_client.html

Afin de savoir si le nombre de nfsd est suffisant, on pourrait utiliser nfsstat, mais ce dernier ne donne pas l’information intéressante. On utilise directement

cat /proc/net/rpc/nfsd

Cette commande, (utilisée par nfsstat qui nous fournit en faite la majorité des chiffres de ce fichier) nous fournit des informations supplémentaires sur le taux de charge des processus du serveur nfs.
La ligne TH est suivie de 10 nombres, et nous indique le temps qu’a passé le NFS dans un état où il faisait tournet X% de ses processus, où X vaut respectivement 10%, 20%, 30%, etc. 90% et 100%.
Ainsi, les premiers chiffres indiquent le temps où le NFSD n’était pas très occupé, et les derniers le temps où le NFSD était à saturation, et où peu (sinon aucun) processus était en attente.

Afin de suivre l’évolution dans le temps du nombre de requête, on dispose de plugins munin très bien faits. Aucun plugin ne sachant me mesurer le taux de charge des processus de NFSD, j’ai donc écrit mon propre plugin, que vous pouvez trouver ici :

Le plugin NFSD_TH usage pour munin

Et voici un exemple de graphique ‘en vrai’ : (le même serveur que celui cité ci-dessus, à savoir le NFSd de Lautre Net : Fey) :

24_fey.png

Pour installer ce plugin, procédez ainsi :

– recopiez le fichier à télécharger ci-dessus dans /usr/share/munin/plugins/nfsd-th
– créez un lien symbolique dans le dossier des plugins de munin-node : ln -s /usr/share/munin/plugins/nfsd-th /etc/munin/plugins
– enfin, relancez munin-node : /etc/init.d/munin-node restart

Un quart d’heure plus tard, vous verrez apparaître vos premières barres de mesure en 10 points de la charge de votre serveur NFS.

Voilà. Si ce graphique et ce programme vous est utile, où pas, où si vous voulez l’améliorer, n’hésitez pas à m’envoyer un email.

Catégories : français