Назад | Перейти на главную страницу

Проблема с кешированием NFS

У нас возникла проблема, которая периодически возникает во время развертывания кода. NFS кэширует файлы по мере их чтения, но если файл читается во время развертывания кода, он остается в грязном состоянии, как если бы файл не был изменен во время развертывания. Единственный способ решить эту проблему - очистить кеш NFS после развертывания.

Наш веб-сервер возвращает пустые страницы для всех запросов, пока кеш NFS не будет очищен.

Есть ли настройка или у кого-нибудь есть предложения, как это исправить?

В данный момент мы используем NFS v3.

Существуют различные варианты кеширования атрибутов файла при монтировании NFS (на стороне клиента):

NOAC
Используйте опцию монтирования noac для достижения согласованности кэша атрибутов между несколькими клиентами. Почти каждая операция с файловой системой проверяет информацию об атрибутах файла. Клиент хранит эту информацию в кэше в течение определенного периода времени, чтобы снизить нагрузку на сеть и сервер. Когда действует noac, клиентский кеш атрибутов файлов отключен, поэтому каждая операция, которая должна проверять атрибуты файла, вынуждена возвращаться на сервер. Это позволяет клиенту очень быстро видеть изменения в файле за счет множества дополнительных сетевых операций.

lookupcache = none
Если клиент игнорирует свой кеш и проверяет каждый запрос поиска приложения с сервером, этот клиент может немедленно обнаружить, когда новая запись каталога была создана или удалена другим клиентом. Вы можете указать это поведение с помощью lookupcache = none. Дополнительные запросы NFS, необходимые, если клиент не кэширует записи каталога, могут снизить производительность. Отключение кэширования поиска должно привести к меньшему снижению производительности, чем при использовании noac, и не влияет на то, как клиент NFS кэширует атрибуты файлов.

actimeo = n
Использование actimeo устанавливает для всех acregmin, acregmax, acdirmin и acdirmax одинаковое значение.

  • acregmin = n, минимальное время (в секундах), в течение которого клиент NFS кэширует атрибуты обычного файла, прежде чем он запросит новую информацию об атрибутах с сервера. Если этот параметр не указан, клиент NFS использует минимум 3 секунды.
  • acregmax = n, максимальное время (в секундах), в течение которого клиент NFS кэширует атрибуты обычного файла, прежде чем он запросит новую информацию об атрибутах с сервера. Если этот параметр не указан, клиент NFS использует максимум 60 секунд.
  • acdirmin = n, минимальное время (в секундах), в течение которого клиент NFS кэширует атрибуты каталога, прежде чем он запросит новую информацию об атрибутах с сервера. Если этот параметр не указан, NFS
    клиент использует минимум 30 секунд.
  • acdirmax = n, максимальное время (в секундах), в течение которого клиент NFS кэширует атрибуты каталога, прежде чем он запросит новую информацию об атрибутах с сервера. Если этот параметр не указан, NFS
    клиент использует максимум 60 секунд.

Взято из Страница руководства NFS.

Надеюсь, это поможет.

Вы указали множество параметров NFS, большинство из которых (rsize / wsize / soft) не нужны, потому что они уже (обычно) по умолчанию (в Linux);

Параметры монтирования NFS rsize=32768,wsize=32768,timeo=30,retrans=10,intr,noatime,soft,async,nodev

Однако, если вы работаете в Linux, вам, вероятно, следует рассмотреть возможность установки следующих параметров NFS;

actimeo=3 (устанавливает acreg [max | min], acdir [max | min], может быть уменьшено до 1, если вы все еще наблюдаете проблемы со скоростью)

lookupcache=none (полностью игнорирует кеш, по умолчанию "все")

noac (Отключает кеширование атрибутов)

это Сообщение блога кажется, есть больше информации