Apakah ada perintah yang akan memaksa Linux untuk membersihkan cache dari satu file pada share NFS?

14

Terkait dengan pertanyaan ini pada StackOverflow , saya bertanya-tanya apakah ada cara bagi saya untuk mem-flush cache NFS / memaksa Linux untuk melihat salinan terbaru dari file yang ada di share NFS.

Saya memiliki situasi di mana empat server Apache me-mount direktori yang sama melalui NFS, dan ketika satu server membuat perubahan ke file, dibutuhkan sekitar 5 - 10 detik untuk server lain untuk melihat perubahan itu. Jika perubahan kedua dibuat untuk file itu di dalam jendela ini, itu mungkin menimpa perubahan pertama.

The fstabentri untuk filesystem adalah:

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

Apakah ada perintah yang akan memaksa Linux untuk membersihkan cache dari satu file pada share NFS?

Josh
sumber
Mekanisme cache apache apa yang Anda gunakan?
usermane
@ usermane: Saya tidak menggunakan mekanisme caching Apache. File yang dimaksud adalah file PHP, dan ketika mereka dimodifikasi pada satu host, host lain tidak melihat perubahan itu selama beberapa detik.
Josh

Jawaban:

12

Periksa barang-barang ini, dan lihat apakah ada yang cocok untuk Anda:

  1. Pada klien , jika Anda belum menggunakan ctoopsi di kolom opsi/etc/fstab baris untuk sistem file NFS Anda, tambahkan itu. ctomemberitahu klien nfs untuk membuka file melalui close-to-open, yang membuat mereka menyegarkan file setiap kali mereka membukanya.

  2. Di server , pastikan filesystem Anda diekspor dengan syncopsi, dan tidak async. Dengan penulisan sinkron, klien akan membilas ke disk saat file ditutup. ( atau dengan nfs V3, setiap kali komit () dibuat ). Mungkin ada hit kinerja seperti itu, tetapi jika Anda melakukan menulis ke sistem file NFS, Anda pasti ingin syncmengatur.

  3. Mengikuti postingan stackoverflow itu, membuka file dengan O_DIRECT hanya berfungsi jika kernel dikompilasi dengan CONFIG_NFS_DIRECTIO.

  4. Juga, pastikan Anda memiliki pengaturan berikut di file httpd.conf Anda:

    • EnableMMAP off
    • EnableSendfile off

    Dari dokumentasi penyesuaian kinerja apache:

    • Jika Anda memetakan memori file yang terletak pada sistem file yang dipasang di NFS dan proses pada mesin klien NFS lain menghapus atau memotong file, proses Anda mungkin mendapatkan kesalahan bus saat berikutnya ia mencoba mengakses konten file yang dipetakan.
    • Mematikan EnableSendfile tidak akan secara khusus membantu dengan perilaku sinkronisasi / async NFS, tetapi perlu dimatikan jika Anda menggunakan apache dengan NFS.
Tim Kennedy
sumber
Terima kasih! Ini adalah saran bagus. Saya tidak menggunakan ctopada klien dan saya akan mencobanya. Saya tidak punya syncatau asyncdi server; Saya baru saja menambahkan sync. O_DIRECTtidak membantu saya karena sebenarnya PHP yang membaca file-file ini dan tidak dapat membukanya dengan O_DIRECTcara apa pun yang dapat saya temukan.
Josh
@ Astaga, apakah itu menyelesaikan masalah Anda? Kami diblokir untuk masalah yang sama! Bisakah Anda memperbarui posting ini?
rafa.ferreira
3

Dalam proses yang diberikan, memanggil opendir dan closedir pada direktori induk dari sebuah file akan membuat cache NFS tidak valid. Saya menggunakan ini saat memprogram penjadwal pekerjaan. Sangat, sangat membantu. Cobalah!

Erik Aronesty
sumber
-1

Jika Anda membuka file yang diberikan dalam program yang tidak di-cache (seperti vim atau emacs) dan kemudian tutup, itu akan memperbarui / menghapus cache untuk file itu

Cameron Clarke
sumber
2
Apa definisi Anda tentang "program non-cache", dan apakah Anda memiliki referensi untuk pernyataan itu?
RalfFriedl