En relación con esta pregunta sobre StackOverflow, me pregunto si hay alguna manera de vaciar la memoria caché de NFS/obligar a Linux a ver la copia más actualizada de un archivo que se encuentra en un recurso compartido de NFS.
Tengo una situación en la que cuatro servidores Apache montan el mismo directorio a través de NFS, y cuando un servidor realiza un cambio en un archivo, los otros servidores tardan entre 5 y 10 segundos en ver ese cambio. Si se realiza un segundo cambio en ese archivo dentro de esta ventana, es posible que se sobrescriba el primer cambio.
El fstab
la entrada para el sistema de archivos es:
172.16.1.15:/home /media/home nfs vers=3,defaults,noauto,sync,acregmin=1 0 0
¿Hay algún comando que obligue a Linux a vaciar el caché de un archivo en un recurso compartido NFS?
Respuesta aceptada:
Verifique estos elementos y vea si alguno funciona para usted:
-
En el cliente , si aún no está utilizando el
cto
opción en las opciones columna de/etc/fstab
línea para su sistema de archivos NFS, agréguelo.cto
le dice al cliente nfs que abra archivos a través de cerrar para abrir, lo que hace que actualicen el archivo cada vez que lo abren. -
En el servidor , asegúrese de que su sistema de archivos se exporte con
sync
opción, y noasync
. Con las escrituras sincrónicas, el cliente se vaciará en el disco cuando se cierre el archivo. (o con nfs V3, cada vez que se realiza un commit() ). Puede haber un impacto en el rendimiento de esa manera, pero si está escribiendo en un sistema de archivos NFS, definitivamente deseasync
establecer. -
Siguiendo los pasos de esa publicación de stackoverflow, abrir un archivo con O_DIRECT solo funciona si el núcleo se compiló con CONFIG_NFS_DIRECTIO.
-
Además, asegúrese de tener las siguientes configuraciones en su archivo httpd.conf:
EnableMMAP off
EnableSendfile off
De la documentación de ajuste de rendimiento de apache:
- Si asigna en memoria un archivo ubicado en un sistema de archivos montado en NFS y un proceso en otra máquina cliente NFS elimina o trunca el archivo, su proceso puede recibir un error de bus la próxima vez que intente acceder al contenido del archivo asignado.
- Desactivar EnableSendfile no ayudará específicamente con el comportamiento de sincronización/asincronía de NFS, pero debe desactivarse si está utilizando apache con NFS.