Чи є команда, яка змусить Linux очистити кеш одного файлу на спільній NFS?


14

Пов’язане з цим питанням у StackOverflow , мені цікаво, чи є спосіб, щоб я очистив кеш-пам'ять NFS / примусив Linux побачити найновішу копію файлу, що знаходиться на спільній доступності NFS.

У мене ситуація, коли чотири сервери Apache монтують один і той же каталог через NFS, і коли один сервер вносить зміни до файлу, потрібно, щоб інші сервери бачили цю зміну приблизно 5 - 10 секунд. Якщо в цьому вікні буде внесена друга зміна цього файла, вона може замінити першу зміну.

fstabЗапис для файлової системи:

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

Чи є команда, яка змусить Linux очистити кеш одного файлу на спільній NFS?


Який механізм кешування apache ви використовуєте?
usermane

@usermane: Я не використовую механізм кешування Apache. Зазначені файли - це файли PHP, і коли вони змінюються на одному хості, інші хости не бачать цього зміни протягом декількох секунд.
Джош

Відповіді:


12

Перевірте ці елементи та побачите, чи є якась робота для вас:

  1. На клієнті , якщо ви ще не з допомогою ctoопції в опції стовпці /etc/fstabрядка для вашої файлової системи NFS, додайте його. ctoповідомляє клієнтові nfs відкривати файли через закриття до відкриття, що змушує їх оновлювати файл кожного разу, коли вони його відкривають.

  2. На сервері переконайтесь, що ваша файлова система експортується за допомогою syncпараметра, а не async. При синхронному записі клієнт перейде на диск, коли файл закриється. ( або з nfs V3 щоразу, коли виконується фіксація () ). Таким чином може бути хіт продуктивності, але якщо ви пишете файлову систему NFS, ви обов'язково хочете syncвстановити.

  3. Слідкуючи за п'ятами цієї публікації про stackoverflow, відкриття файлу з O_DIRECT працює лише в тому випадку, якщо ядро ​​було складено за допомогою CONFIG_NFS_DIRECTIO.

  4. Також переконайтеся, що у файлі httpd.conf є такі параметри:

    • EnableMMAP off
    • EnableSendfile off

    З документації про налаштування продуктивності apache:

    • Якщо ви зіставляєте карту пам'яті у файлі, розташованому на файловій системі, встановленій NFS, а процес на іншій клієнтській машині NFS видаляє або скорочує файл, ваш процес може отримати помилку шини при наступному спробі отримати доступ до вмісту файлу, що відображається.
    • Якщо вимкнути EnableSendfile, спеціально не допоможе синхронізація / асинхронізація NFS, але його потрібно вимкнути, якщо ви використовуєте apache з NFS.

Спасибі! Це чудові пропозиції. Я не використовую ctoклієнта, і я спробую це. У мене немає syncні asyncсервера, ні ; Я щойно додав sync. O_DIRECTне допомогло мені, тому що насправді PHP читає ці файли, і він не може їх відкрити O_DIRECTжодним чином, який я можу знайти.
Джош

@Josh, це вирішило вашу проблему? Ми заблоковані з того ж питання! Чи можете ви оновити цю публікацію?
rafa.ferreira

3

В рамках заданого процесу виклик opendir і closedir у батьківській директорії файлу недійсний кеш NFS. Я використовував це під час програмування планувальників робіт. Дуже, дуже корисно. Спробуй це!


-1

Якщо ви відкриєте даний файл у не кешованій програмі (наприклад, vim чи emacs), а потім закриєте, він оновить / очистить кеш для цього файлу


2
Яке ваше визначення "не кешованої програми", і чи є у вас посилання на це твердження?
RalfFriedl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.