Bonjour;
Je poste cette question au cas où un expert NFS connaitrait ce problème.
J'ai le schéma suivant (non modifiable, postulat):Un 1er client NFS C1 écrit un fichier sur un server NFS S.
Un 2eme client NFS du même server S1 va "consommer" ce fichier pour le traiter...
C1, C2 & S sont des machines linux qui toutes implémenent NFS V3 uniquement (nfs V2 et V4 ont été déactivés).
Le problème est le suivant: parfois C2 "ne voie pas" que C1 a posté un fichier.
Ou, il le voie avec 30 ou 60 secondes de retard (sur un lan à 1Gb)
Ou, si C2 a vu le fichier et le détruit (notion de synchro..), C1 ne voit pas la disparition demandée par C2.
Bref, ce processus, même s'il fonctionne "un peu", a énormément de lacunes. 1 fois sur 100, il sera en défaut.
J'ai changé beaucoup de paramètres (mode de transport en tcp, flags de cache actimo en tout genre, flag sync…. etc..), j'ai toujours des échecs ou des retards…
Est-ce qu'un expert pourrait m'expliquer ce qui se passe dans ce mode rarissime et bien sûr, sur quels paramètres agir pour avoir 100% de réussite.
En vous remerciant pour vos avis ou expériences éclairés
# Pas une parole d'expert, mais néanmoins une parole!
Posté par Michaël (site web personnel) . Évalué à 2.
Dans la RFC de NTFS-3 j'ai trouvé ça:
Du coup j'ai une question: comment es-tu sûr que C2 cherche le fichier après que C1 l'ait posté, c'est-à-dire après que
close
soit terminé?[^] # Re: Pas une parole d'expert, mais néanmoins une parole!
Posté par pierre31 . Évalué à 0.
Je reproduit l'erreur par un script en bash.
En fait l'écriture par C1 d'un fichier, c'est un touch!
Et une fois sur 10, le mécanisme échoue, dans mon script ou la vraie vie.
Donc, il est fermé. On ne peut pas mettre en cause les hypothéses.
J'ai tourné le pb dans tous les sens; le fichier est fermé et bien fermé!
Tous les caches sont à 000 et c'est nok!
La seule question, dans ce shéma C1 --> S --> C2 --> S --> C1
c'est: qu'est-ce qui n'a pas marché?
[^] # Re: Pas une parole d'expert, mais néanmoins une parole!
Posté par Michaël (site web personnel) . Évalué à 3.
Bon très bien, mais dans ce cas la question devient «comment es-tu sûr que C2 essaie de trouver ton fichier après que
touch
soit terminé?» Apparemment tu as deux machines, donc deux scripts bash, c'est ça?[^] # Re: Pas une parole d'expert, mais néanmoins une parole!
Posté par pierre31 . Évalué à 0.
Non!
D'abord, c'est pas "Apparemment tu as deux machines"!
J'ai 3 machines, et c'est bien là la spècificité du problème.
J'ai 2 clients, et un server.
Et j'ai 1 seul script qui fait:
C1> touch /S1_SHARE/F1
C1> tempo paramètrable
C1> ssh C2 ls /S1_SHARE/F1 > /tmp/res
Et ensuite, soit je teste le $? du ssh , soit le contenu du /tmp/res par un grep, etc
Il y a un grand nombre de façons de le faire!
Et je compte le nombre de défauts, et je recommence en effaçant F1 par exemple depuis C1, mais il y a un grand nombre de cas où le pb apparait de manière incontestable.
Mais, y a pire!
Si je suis loggué sur C1
et j'ouvre une 2eme Konsole sur C2 (via ssh ou telnet peu importe)
depuis C1> je fais touch /S1SHARE/F1
_Bon, là il est créé, c'est sûr!
Et, depuis la console que je viens d'ouvrir sur C2
C2> ls /S1_SHARE/F1
1 fois sur 10 (ou plus ou moins, en général, quand ça commence à merder, c'est mort..)
et bien, là depuis C2 je ne vois pas /S1_SHARE/F1
[^] # Re: Pas une parole d'expert, mais néanmoins une parole!
Posté par symoon . Évalué à 1.
Et si tu coupais le problème en deux, en regardant sur le serveur, histoire de voir si c'est la lecture ou l'écriture qui est mise en tampon ?
[^] # Re: Pas une parole d'expert, mais néanmoins une parole!
Posté par pierre31 . Évalué à 0.
C'est un essai qui a été fait; le fichier est bien présent sur le server.
Et c'est logique car la 1ere étape est classique: C1 écrit sur S, ça , ça marche. C'est le modèle classique NFS client server.
C'est après que ça se gâte. Comment est-que C2 est notifié du changement? Pourquoi le serait-t-il systématiquement.
Ceci en plus est corroboré par le 2eme cas que je cite dans le post initial.
Quand enfin C2 a réussi à voir le fichier, il fait un traitement très rapide, et détruit ce même fichier. Ce rm se passe bien entre C2 et S. Mais, C1 cette fois ne voit pas le fichier disparaitre et tout part en vrac.
C'est la même situation que celle du début, mais inversée, et on a la même punition.
[^] # Re: Pas une parole d'expert, mais néanmoins une parole!
Posté par NeoX . Évalué à 2.
ce ne serait pas un histoire de timeout qui dit au client de rafraichir sa liste à un moment donné ?
# Use of NFS considered harmful
Posté par Michaël (site web personnel) . Évalué à 4. Dernière modification le 17 mars 2012 à 12:11.
Voilà une piste intéressante
Source: http://www.time-travellers.org/shane/papers/NFS_considered_harmful.html
En résumé tu résoudrais ton problème en désactivant le disable client write caching au prix de performances intolérables. Je pense que la morale de l'histoire est qu'il ne faut pas utiliser NFS pour synchroniser des processus, mais une traditionnelle IPC (dans ton cas seules les sockets peuvent être considérées, j'opterai pour un seimple envoi de messages en UDP).
[^] # Re: Use of NFS considered harmful
Posté par Krunch (site web personnel) . Évalué à 2.
Je pense que la première chose à faire serait d'examiner au niveau réseau ce qui se passe, histoire de vérifier si c'est bien le client C1 qui fait du write caching ou bien s'il envoi les données immédiatement et que quelque chose d'autre introduit le délai.
Un espèce de howto qui donne une idée de comment débugguer des problèmes de NFS : http://bl0rg.krunch.be/nfs-perfs.html
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: Use of NFS considered harmful
Posté par pierre31 . Évalué à 0.
Tous les caches sont déja à 0, ACTIMO aussi, au prix de perf's lamentables.
Il ne s'agit pas de trouver une autre solution, il s'agit de réparer ou du moins de comprendre ce qui cloche dans celle-là!
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.