Esiste un comando che costringerà Linux a svuotare la cache di un file su una condivisione NFS?


14

In relazione a questa domanda su StackOverflow , mi chiedo se c'è un modo per svuotare la cache NFS / forzare Linux a vedere la copia più aggiornata di un file che si trova su una condivisione NFS.

Ho una situazione in cui quattro server Apache montano la stessa directory tramite NFS e quando un server apporta una modifica a un file, ci vogliono circa 5-10 secondi affinché gli altri server vedano quella modifica. Se viene apportata una seconda modifica a quel file all'interno di questa finestra, potrebbe sovrascrivere la prima modifica.

La fstabvoce per il filesystem è:

172.16.1.15:/home               /media/home     nfs     vers=3,defaults,noauto,sync,acregmin=1          0       0

Esiste un comando che costringerà Linux a svuotare la cache di un file su una condivisione NFS?


Quale meccanismo di memorizzazione nella cache di apache stai utilizzando?
usermane,

@usermane: non sto usando un meccanismo di memorizzazione nella cache di Apache. I file in questione sono file PHP e quando vengono modificati su un host, gli altri host non vedono tale modifica per alcuni secondi.
Josh,

Risposte:


12

Controlla questi elementi e vedi se funziona per te:

  1. Sul client , se non si sta già utilizzando l' ctoopzione nella colonna delle opzioni della /etc/fstabriga per il proprio filesystem NFS, aggiungerlo. ctodice al client nfs di aprire i file tramite close-to-open, il che li fa aggiornare il file ogni volta che lo aprono.

  2. Sul server , assicurati che il tuo filesystem sia esportato con l' syncopzione e non async. Con le scritture sincrone, il client scaricherà sul disco quando il file viene chiuso. ( o con nfs V3, ogni volta che viene effettuato un commit () ). Potrebbe esserci un impatto sulle prestazioni in quel modo, ma se stai scrivendo su un filesystem NFS, sicuramente vuoi syncimpostarlo.

  3. In seguito a quel post di StackOverflow, l'apertura del file con O_DIRECT funziona solo se il kernel è stato compilato con CONFIG_NFS_DIRECTIO.

  4. Inoltre, assicurati di avere le seguenti impostazioni nel tuo file httpd.conf:

    • EnableMMAP off
    • EnableSendfile off

    Dalla documentazione di ottimizzazione delle prestazioni di apache:

    • Se si mappa in memoria un file che si trova su un filesystem montato su NFS e un processo su un altro computer client NFS elimina o tronca il file, il processo potrebbe ricevere un errore del bus al successivo tentativo di accedere al contenuto del file mappato.
    • La disattivazione di EnableSendfile non aiuta in modo specifico il comportamento sync / async di NFS, ma deve essere disattivato se si utilizza apache con NFS.

Grazie! Questi sono ottimi suggerimenti. Non sto usando ctosul client e lo proverò. Non ho syncasyncsul server né ; Ho appena aggiunto sync. O_DIRECTnon mi ha aiutato perché in realtà è PHP a leggere questi file e non è in grado di aprirli O_DIRECTin alcun modo.
Josh,

@Josh, ha risolto il tuo problema? Siamo bloccati sullo stesso problema! Potresti per favore aggiornare questo post?
rafa.ferreira,

3

All'interno di un determinato processo, la chiamata di opendir e closedir nella directory padre di un file invalida la cache NFS. L'ho usato durante la programmazione di un programmatore di lavoro. Molto, molto utile. Provalo!


-1

Se apri il file specificato in un programma non memorizzato nella cache (come vim o emacs) e poi chiudi, aggiornerà / cancellerà la cache per quel file


2
Qual è la tua definizione di "programma non memorizzato nella cache" e hai un riferimento per quella dichiarazione?
RalfFriedl,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.