Могу ли я программно принудительно заставить изменения файла распространяться на все клиенты NFS? - PullRequest
4 голосов
/ 28 сентября 2011

У меня есть CMS, встроенная в PHP, которая хранит список страниц, структуру навигации по страницам и содержимое страниц в файлах на диске. Это приложение размещено на кластере серверов Apache / php-fpm, которые находятся за haproxy-сервером. Эти серверы монтируют каталог Apache DocumentRoot через NFS с центрального файлового сервера, поэтому все изменения, сделанные в CMS, записываются в файлы на общем ресурсе NFS.

Я обнаружил, что, если я не смонтирую общий ресурс NFS с параметром noac, внесенные изменения могут занять до 5-10 секунд для распространения на все серверы кластера; Это означает, что когда несколько изменений вносятся в быстрой последовательности, последнее изменение иногда перезаписывает более ранние изменения, потому что последнее изменение может перейти на сервер, который еще не получил более ранние изменения.

Однако при использовании опции монтирования noac задержка доступа к контенту на стороне посетителя составляет 2-5 секунд, что совершенно недопустимо.

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

Ответы [ 2 ]

2 голосов
/ 19 мая 2012

Я решил ту же проблему с параметром NFS cto в сочетании с директивами apache EnableMMAP Off и EnableSendFile Off. параметр noac имел те же симптомы, о которых вы писали.

2 голосов
/ 28 сентября 2011

Я не знаю ни одной опции уровня NFS для достижения того, чего вы хотите, НО, если приложения, обращающиеся к этим файлам, находятся под вашим контролем, вы можете разрешить каждый открытый файл, используя опцию O_DIRECT - это обходит любой локальный кеш NFSдля любого файла, открытого таким образом ...

Примечание:

Вы пишете, что noac приводит к задержке в 2-5 секунд ... это, кажется, указывает на проблему на уровне сети и / или хранилища или на "большое количество файлов / каталогов в одном каталоге"»...

...