Có lệnh nào sẽ buộc Linux xóa bộ nhớ cache của một tệp trên chia sẻ NFS không?


14

Liên quan đến câu hỏi này trên StackOverflow , tôi tự hỏi liệu có cách nào để tôi xóa bộ đệm NFS / buộc Linux xem bản sao cập nhật nhất của tệp trên chia sẻ NFS không.

Tôi có một tình huống trong đó bốn máy chủ Apache gắn cùng một thư mục thông qua NFS và khi một máy chủ thực hiện thay đổi tệp, phải mất khoảng 5 - 10 giây để các máy chủ khác thấy sự thay đổi đó. Nếu thay đổi thứ hai được thực hiện cho tệp đó trong cửa sổ này, nó có thể ghi đè lên thay đổi đầu tiên.

Các fstabmục nhập cho hệ thống tập tin là:

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

Có lệnh nào sẽ buộc Linux xóa bộ nhớ cache của một tệp trên chia sẻ NFS không?


Những gì cơ chế bộ nhớ cache apache bạn sử dụng?
usermane

@usermane: Tôi không sử dụng cơ chế lưu trữ bộ đệm Apache. Các tệp được đề cập là các tệp PHP và khi chúng được sửa đổi trên một máy chủ, các máy chủ khác sẽ không thấy sự thay đổi đó trong vài giây.
Josh

Câu trả lời:


12

Kiểm tra các mục này và xem nếu có bất kỳ công việc cho bạn:

  1. Trên máy khách , nếu bạn chưa sử dụng ctotùy chọn trong cột tùy chọn của /etc/fstabdòng cho hệ thống tệp NFS của bạn, hãy thêm nó. ctobáo cho máy khách nfs mở tệp thông qua đóng để mở, điều này làm cho chúng làm mới tệp bất cứ khi nào chúng mở.

  2. Trên máy chủ , đảm bảo hệ thống tệp của bạn được xuất với synctùy chọn, và không async. Với ghi đồng bộ, máy khách sẽ chuyển sang đĩa khi tệp được đóng. ( hoặc với nfs V3, bất cứ khi nào một cam kết () được thực hiện ). Có thể có một hiệu suất đạt được theo cách đó, nhưng nếu bạn đang ghi vào hệ thống tập tin NFS, bạn chắc chắn muốn syncthiết lập.

  3. Theo sau bài đăng stackoverflow đó, việc mở tệp bằng O_DIRECT chỉ hoạt động nếu kernel được biên dịch với CONFIG_NFS_DIRECTIO.

  4. Ngoài ra, hãy đảm bảo bạn có các cài đặt sau trong tệp httpd.conf của mình:

    • EnableMMAP off
    • EnableSendfile off

    Từ tài liệu điều chỉnh hiệu suất apache:

    • Nếu bạn ánh xạ bộ nhớ một tệp nằm trên hệ thống tệp được gắn NFS và một quy trình trên máy khách NFS khác sẽ xóa hoặc cắt tệp, quá trình của bạn có thể gặp lỗi bus vào lần tiếp theo khi nó cố truy cập nội dung tệp được ánh xạ.
    • Tắt EnableSendfile sẽ không trợ giúp cụ thể với hành vi đồng bộ hóa / không đồng bộ của NFS, nhưng nó cần được tắt nếu bạn đang sử dụng apache với NFS.

Cảm ơn! Đây là những gợi ý tuyệt vời. Tôi không sử dụng ctotrên máy khách và tôi sẽ thử nó. Tôi không có một trong hai synchay asynctrên máy chủ; Tôi chỉ cần thêm sync. O_DIRECTkhông giúp tôi vì thực ra PHP đang đọc những tệp này và nó không thể mở chúng bằng O_DIRECTbất kỳ cách nào tôi có thể tìm thấy.
Josh

@Josh, nó đã giải quyết vấn đề của bạn? Chúng tôi bị chặn về cùng một vấn đề! Bạn có thể vui lòng cập nhật bài viết này?
rafa.ferreira

3

Trong một quy trình nhất định, việc gọi opendir và closir trên thư mục mẹ của một tệp làm mất hiệu lực bộ đệm NFS. Tôi đã sử dụng điều này trong khi lập trình một lịch trình công việc. Rất, rất hữu ích. Thử nó!


-1

Nếu bạn mở tệp đã cho trong một chương trình không được lưu trong bộ nhớ cache (như vim hoặc emacs) rồi đóng, nó sẽ cập nhật / xóa bộ đệm cho tệp đó


2
Định nghĩa của bạn về "chương trình không lưu trữ" là gì và bạn có tham khảo cho tuyên bố đó không?
RalfFriedl
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.