Cache NFS: konten file tidak diperbarui pada klien ketika dimodifikasi di server


11

Inilah pengaturan saya: Satu mesin Server NFS (v4), beberapa mesin klien NFS.

Ketika mesin klien menulis file ke NFS mount, klien lain melihat konten baru secara instan: tidak ada masalah.

Tetapi, ketika mesin server memodifikasi konten file, konten baru ini tidak ditampilkan pada klien sampai saya melakukan lsdirektori dari klien.

Saya benar-benar bingung dengan inkonsistensi ini ... bantuan apa pun akan sangat dihargai!

Informasi :

  • nfs 1.2.3-r1 pada klien dan server
  • acregmin, acregmax, acdirmin, acdirmax, lookupcache: nilai default

1
Bisakah Anda melakukan sedikit percobaan untuk info lebih lanjut ?: Lakukan ls -ipada klien sebelum mengedit file di server, lalu lagi setelah itu. Lihat apakah angkanya berubah. Jika mereka melakukannya karena server mengganti file dan klien tidak memperhatikan ini sampai memindai ulang direktori. Jika demikian cobalah mengatur opsi pemasangan lookupcache=nonedan lihat apakah perilakunya berubah.
Patrick

2
maaf atas keterlambatannya. Inode secara efektif berubah. Saya telah menambahkan opsi lookupcache, sepertinya berhasil. Saya akan periksa lagi besok.
numberxiii

Jawaban:


11

Menambahkan sebagai jawaban berdasarkan komentar Anda.
Solusinya adalah menambahkan lookupcache=noneopsi nfs mount Anda.

Apa yang terjadi adalah bahwa pertama kali klien Anda membaca file, ia melakukan pencarian NFS untuk mendapatkan fileid NFS. Itu kemudian cache NFS fileid, dan ketika Anda kembali untuk membuka file, itu menggunakan cache. Biasanya ini bukan masalah karena ketika file diperbarui fileid-nya tetap sama. Tetapi untuk beberapa alasan file lama sedang dihapus, dan yang baru dibuat (atau diganti namanya, atau sesuatu ke tempat itu bukan file yang sama).
Sekarang biasanya ini bukan masalah baik ketika klien Anda mencoba untuk membuka fileid yang tidak ada di sana, itu akan mendapatkan kesalahan dari server dan melakukan pencarian lain untuk mendapatkan fileid baru. Tetapi untuk beberapa alasan server NFS membiarkan klien membuka fileid lama itu. Mungkin klien lain memiliki file terbuka dan belum dihapus, saya tidak tahu.

Bagaimanapun cara untuk menyelesaikannya adalah memberi tahu klien untuk selalu melakukan nfslookup sebelum membuka file dengan menggunakan opsi mount nfs lookupcache=none. Kelemahan dari ini adalah bahwa itu bisa mahal jika Anda sering membuka file karena menambah lebih banyak lalu lintas ke server NFS.


Terima kasih atas penjelasan Anda. Di server NFS, tumpukan direktori yang diekspor adalah DRBD / LVM / ext4. Mungkin itu yang menyebabkan "bug". Saya memiliki masalah pada beberapa klien, tetapi tidak pada beberapa yang lain ... Saya akan mengulang semua tes saya dan memberi tahu Anda jika semuanya berjalan baik dengan opsi ini.
numberxiii

0

Ubah opsi pemasangan ke hard,intr. Saya pikir defaultnya mungkin lunak di sistem Anda. ini akan membantu.


sayangnya, menambahkan opsi mount ini tidak mengubah apa pun :(
numberxiii

Untuk tes pertama saya, saya melakukan remount. Lalu saya sudah melakukan tes dari klien lain, dengan mount bersih. Masalahnya tampaknya diperbaiki: kita menunggu 30-an untuk melihat konten baru
numberxiii

Saya telah membangun klien baru (vm) untuk memeriksa: tidak ada masalah dengan konten!
numberxiii

1
@ johnshen64 mengapa Anda berpikir keras akan menyelesaikan masalah? Sulit / lunak hanya masalah ketika terjadi gangguan koneksi, tidak ada hubungannya dengan caching.
Patrick

0

Anda juga dapat menyegarkan cache NFS secara manual

sudo mount /nfs-mount -o remount

... jika Anda tidak ingin menambahkan opsi pemasangan yang menurunkan kinerja.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.