Bộ đệm NFS: nội dung tệp không được cập nhật trên máy khách khi được sửa đổi trên máy chủ


11

Đây là thiết lập của tôi: Một máy chủ NFS (v4), một số máy khách NFS.

Khi một máy khách ghi các tệp vào mount NFS, các máy khách khác sẽ thấy nội dung mới ngay lập tức: không có vấn đề gì.

Nhưng, khi máy chủ sửa đổi nội dung của tệp, nội dung mới này không được hiển thị trên máy khách cho đến khi tôi thực hiện một lsthư mục từ máy khách.

Tôi hoàn toàn bối rối về sự không nhất quán này ... bất kỳ trợ giúp sẽ được đánh giá rất cao!

Thông tin liên lạc

  • nfs 1.2.3-r1 trên cả máy khách và máy chủ
  • acregmin, acregmax, acdirmin, acdirmax, lookupcache: các giá trị mặc định

1
Bạn có thể làm một thí nghiệm nhỏ để biết thêm thông tin không?: Thực hiện ls -itrên máy khách trước khi chỉnh sửa tệp trên máy chủ, sau đó lại tiếp tục. Xem nếu các số thay đổi. Nếu họ làm điều đó bởi vì máy chủ đang thay thế tệp và máy khách không nhận thấy điều này cho đến khi nó giải cứu thư mục. Nếu vậy hãy thử thiết lập tùy chọn gắn kết lookupcache=nonevà xem nếu hành vi thay đổi.
Patrick

2
xin lỗi về sự chậm trễ. Các inode thay đổi hiệu quả. Tôi đã thêm tùy chọn tra cứu, nó dường như hoạt động. Tôi sẽ kiểm tra lại vào ngày mai.
numberxiii

Câu trả lời:


11

Thêm vào như một câu trả lời dựa trên nhận xét của bạn.
Giải pháp là thêm lookupcache=nonevào tùy chọn mount nfs của bạn.

Điều gì xảy ra là lần đầu tiên khách hàng của bạn đọc tệp, nó thực hiện tra cứu NFS để lấy tệp NFS. Sau đó, nó lưu trữ tệp NFS và khi bạn quay lại để mở tệp, nó sẽ sử dụng bộ đệm. Thông thường, đây không phải là vấn đề vì khi tệp được cập nhật, tệp của nó vẫn giữ nguyên. Nhưng vì một số lý do, tập tin cũ bị xóa và một tập tin mới được tạo ra (hoặc được đổi tên, hoặc một cái gì đó không phải là cùng một tập tin).
Bây giờ, thông thường, đây không phải là vấn đề vì khi máy khách của bạn cố mở tệp tin không có ở đó, nó sẽ gặp lỗi từ máy chủ và thực hiện một tra cứu khác để lấy tệp mới. Nhưng vì một số lý do, máy chủ NFS cho phép máy khách mở fileid cũ đó. Có lẽ một khách hàng khác đã mở tệp và vì vậy nó chưa bị xóa, tôi không biết.

Trong mọi trường hợp, cách giải quyết là yêu cầu khách hàng luôn thực hiện một nfslookup trước khi mở tệp bằng cách sử dụng tùy chọn gắn kết nfs lookupcache=none. Nhược điểm của việc này là nó có thể tốn kém nếu bạn thường xuyên mở tệp vì nó tăng thêm lưu lượng truy cập cho máy chủ NFS.


Cảm ơn bạn đã giải thích. Trên máy chủ NFS, ngăn xếp của thư mục đã xuất là DRBD / LVM / ext4. Có thể nó gây ra "lỗi". Tôi gặp vấn đề ở một số khách hàng, nhưng không phải ở một số người khác ... Tôi sẽ làm lại tất cả các thử nghiệm của mình và cho bạn biết nếu tất cả đều ổn với tùy chọn này.
numberxiii

0

Thay đổi tùy chọn gắn kết thành hard,intr. tôi nghĩ mặc định có thể mềm trong hệ thống của bạn. điều này sẽ giúp.


thật không may, việc thêm các tùy chọn gắn kết này đã không thay đổi bất cứ điều gì :(
numberxiii

Đối với bài kiểm tra đầu tiên của tôi, tôi làm lại. Sau đó, tôi đã thực hiện một thử nghiệm từ một khách hàng khác, với một gắn kết sạch sẽ. Vấn đề dường như đã được khắc phục: chúng tôi đợi 30 giây để xem nội dung mới
numberxiii

Tôi đã xây dựng một ứng dụng khách mới (vm) để kiểm tra: không có vấn đề gì với nội dung!
numberxiii

1
@ johnshen64 tại sao bạn nghĩ khó sẽ giải quyết vấn đề? Cứng / mềm chỉ quan trọng khi bị gián đoạn kết nối, không liên quan gì đến bộ nhớ đệm.
Patrick

0

Bạn cũng có thể tự làm mới bộ đệm NFS bằng

sudo mount /nfs-mount -o remount

... trong trường hợp bạn không muốn thêm bất kỳ tùy chọn gắn kết nào làm giảm hiệu suất.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.