3 votes

Qu'est-ce qui cause les erreurs `input/output` lors de la lecture à partir de NFS v4 sur CentOS ?

Nous constatons que des applications telles que nginx et php-fpm se trompent occasionnellement (et temporairement) lorsqu'elles ouvrent des fichiers de qualité à partir d'un montage NFS connecté :

Exemple d'erreur php-fpm :

2017/05/20 22:53:09 [error] 55#0: *6575 FastCGI sent in stderr: "PHP message: PHP Warning:  getimagesize(/www/newspaperfoundation.org/html/wp-content/blogs.dir/22/files/2017/05/19-highest-honors-1.jpg): failed to open stream: Input/output error in /www/newspaperfoundation.org/html/wp-content/plugins/mashsharer/includes/header-meta-tags.php on line 271" while reading response header from upstream, client:
192.168.255.34, server: www.dailyrepublic.com, request: "GET /solano-news/fairfield/highest-honors-commends-students-with-4-0-and-higher-grade-point-average/ HTTP/1.1", upstream: "fastcgi://172.17.0.3:9001", host: "www.dailyrepublic.com"

Exemple d'erreur nginx :

2017/05/20 23:22:32 [crit] 56#0: *712 open() "/www/newspaperfoundation.org/html/wp-content/blogs.dir/24/files/2017/05/Tandem1W-550x550.jpg" failed (5: Input/output error), client: 192.168.255.34, server: www.davisenterprise.com, request: "GET /files/2017/05/Tandem1W-550x550.jpg HTTP/1.1", host: "www.davisenterprise.com", referrer: "http://www.davisenterprise.com/"

Lors d'une erreur temporaire, je peux ls et vérifier que le fichier existe avec les permissions correctes. L'image finit par s'afficher correctement au bout d'un certain temps. Les autres fichiers retournent OK sans erreur d'entrée/sortie.

Je n'ai pas trouvé beaucoup d'enregistrements pour documenter le problème. Mais l'activation de rpcdebug Je vois beaucoup de messages de ce type au moment des erreurs :

May 20 16:10:07 tomentella kernel: NFSD: nfsd4_open filename 19tommeyerW.jpg op_openowner           (null)
May 20 16:10:07 tomentella kernel: nfsv4 compound op ffff8806239e5080 opcnt 5 #2: 18: status 10011
May 20 16:10:07 tomentella kernel: nfsv4 compound returned 10011
May 20 16:10:07 tomentella kernel: nfsd_dispatch: vers 4 proc 1
May 20 16:10:07 tomentella kernel: nfsv4 compound op #1/5: 22 (OP_PUTFH)
May 20 16:10:07 tomentella kernel: nfsd: fh_verify(36: 01070001 008c0312 00000000 3c639297 604b0f25 ce691899)
May 20 16:10:07 tomentella kernel: nfsv4 compound op ffff8806239e5080 opcnt 5 #1: 22: status 0
May 20 16:10:07 tomentella kernel: nfsv4 compound op #2/5: 18 (OP_OPEN)
May 20 16:10:07 tomentella kernel: NFSD: nfsd4_open filename 19tommeyerW.jpg op_openowner           (null)
May 20 16:10:07 tomentella kernel: nfsv4 compound op ffff8806239e5080 opcnt 5 #2: 18: status 10011
May 20 16:10:07 tomentella kernel: nfsv4 compound returned 10011
May 20 16:10:08 tomentella kernel: nfsd_dispatch: vers 4 proc 1
May 20 16:10:08 tomentella kernel: nfsv4 compound op #1/4: 22 (OP_PUTFH)
May 20 16:10:08 tomentella kernel: nfsd: fh_verify(36: 01070001 008c0312 00000000 3c639297 604b0f25 ce691899)
May 20 16:10:08 tomentella kernel: nfsv4 compound op ffff8806239e5080 opcnt 4 #1: 22: status 0
May 20 16:10:08 tomentella kernel: nfsv4 compound op #2/4: 15 (OP_LOOKUP)

En particulier, j'ai l'impression de ne voir ce message que pour les fichiers qui sont en erreur :

May 20 16:10:07 tomentella kernel: NFSD: nfsd4_open filename 19tommeyerW.jpg op_openowner           (null)

Des idées sur ce qui pourrait être à l'origine de la input/output erreurs ?

Les montages du client en utilisant les éléments suivants :

mount.nfs4 -v -o proto=tcp $NFSMASTERHOST:/srv/data /srv/data

Centos 7 avec les paquets mis à jour. L'erreur est "nouvelle" avec peu de changements de serveur récemment. Je pense que ma récente mise à jour des paquets système a pu être le déclencheur de ce changement.

Comme le problème va et vient pour certaines images, je suis en mesure d'observer les journaux et de les comparer. Voici un exemple où le problème passe de OK à mauvais lors de la recherche d'un nom d'image particulier :

May 20 18:38:37 tomentella kernel: NFSD: nfsd4_open filename Ron-Thomas-web-150x150.jpg op_openowner           (null)
May 20 18:38:37 tomentella kernel: NFSD: nfsd4_open_confirm on file Ron-Thomas-web-150x150.jpg
May 20 18:38:37 tomentella kernel: NFSD: nfsd4_close on file Ron-Thomas-web-150x150.jpg
May 20 18:39:08 tomentella kernel: NFSD: nfsd4_open filename Ron-Thomas-web-150x150.jpg op_openowner           (null)
May 20 18:39:08 tomentella kernel: NFSD: nfsd4_open filename Ron-Thomas-web-150x150.jpg op_openowner           (null)
May 20 18:39:10 tomentella kernel: NFSD: nfsd4_open filename Ron-Thomas-web-150x150.jpg op_openowner           (null)
May 20 18:39:10 tomentella kernel: NFSD: nfsd4_open filename Ron-Thomas-web-150x150.jpg op_openowner           (null)
May 20 18:39:11 tomentella kernel: NFSD: nfsd4_open filename Ron-Thomas-web-150x150.jpg op_openowner           (null)
May 20 18:39:11 tomentella kernel: NFSD: nfsd4_open filename Ron-Thomas-web-150x150.jpg op_openowner           (null)

Voici nfsstat

tomentella  ~ $ nfsstat
Server rpc stats:
calls      badcalls   badclnt    badauth    xdrcall
94437487   6          6          0          0       

Server nfs v4:
null         compound     
503       0% 94436978 99% 

Server nfs v4 operations:
op0-unused   op1-unused   op2-future   access       close        commit       
0         0% 0         0% 0         0% 11213689  3% 2631554   0% 3377      0% 
create       delegpurge   delegreturn  getattr      getfh        link         
579       0% 0         0% 0         0% 88581315 31% 32460559 11% 0         0% 
lock         lockt        locku        lookup       lookup_root  nverify      
365       0% 0         0% 365       0% 30058556 10% 0         0% 0         0% 
open         openattr     open_conf    open_dgrd    putfh        putpubfh     
2771686   0% 0         0% 74326     0% 0         0% 92969992 32% 0         0% 
putrootfh    read         readdir      readlink     remove       rename       
2435      0% 1999675   0% 1917567   0% 350       0% 12404     0% 5072      0% 
renew        restorefh    savefh       secinfo      setattr      setcltid     
1226801   0% 0         0% 5072      0% 0         0% 18315216  6% 121025    0% 
setcltidconf verify       write        rellockowner bc_ctl       bind_conn    
121105    0% 0         0% 115189    0% 365       0% 0         0% 0         0% 
exchange_id  create_ses   destroy_ses  free_stateid getdirdeleg  getdevinfo   
0         0% 0         0% 0         0% 0         0% 0         0% 0         0% 
getdevlist   layoutcommit layoutget    layoutreturn secinfononam sequence     
0         0% 0         0% 0         0% 0         0% 0         0% 0         0% 
set_ssv      test_stateid want_deleg   destroy_clid reclaim_comp 
0         0% 0         0% 0         0% 0         0% 0         0% 

Client rpc stats:
calls      retrans    authrefrsh
0          0          0

2voto

editor Points 363

Le problème semble être lié à la duplication des IP locales derrière les hôtes Docker. Docker attribue à deux conteneurs la même IP interne (par ex. 172.17.0.4 ), le serveur NFS ne parvient pas à déterminer à quel client répondre, ce qui entraîne l'arrêt des deux clients dans certains cas. Il s'agit apparemment d'un problème de longue date dans l'implémentation de RHEL, car j'ai pu trouver les informations suivantes un rapport de bogue documentant ce problème dans Centos 6 (je suis encore sous CentOS 7.3).

2voto

1.01pm Points 759

J'ai trouvé ceci en cherchant une solution à mes propres problèmes d'erreur d'entrée/sortie avec un montage NFS partagé. Je montais un disque NFS partagé sur plusieurs machines, lisant et écrivant avec PHP. J'obtenais sporadiquement, mais fréquemment, des erreurs de ce type. Je ne sais pas si ce que j'ai fait a résolu le problème, mais au cas où cela aiderait quelqu'un d'autre avec le même problème ...

Je créais donc des serveurs de travail en les clonant. Ils avaient donc tous le même nom d'hôte. Je n'y ai pas prêté attention, le nom d'hôte n'était pas quelque chose qui affectait ce que je faisais, pour autant que je puisse en juger. J'ai modifié les noms d'hôtes pour qu'ils soient tous uniques, et je me suis assuré que le fichier /etc/hosts incluait le nom d'hôte pointant vers 127.0.0.1, et les erreurs NFS ne sont plus réapparues depuis.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X