Могу ли я программно заставить изменения файла распространяться на всех клиентов NFS?

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

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

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

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


person Josh    schedule 27.09.2011    source источник
comment
Вы никогда не сможете заставить клиента делать то, чего он не хочет.   -  person Ignacio Vazquez-Abrams    schedule 28.09.2011
comment
Лучше захотеть сделать то, что я хочу, иначе он будет заменен! ;-)   -  person Josh    schedule 28.09.2011
comment
На самом деле это может быть не такая уж и ужасная идея.   -  person Ignacio Vazquez-Abrams    schedule 28.09.2011
comment
@ IgnacioVazquez-Abrams Я смотрю на Samba как на альтернативу; открыты для предложений! (Я собирался опубликовать этот вопрос на ServerFault)   -  person Josh    schedule 28.09.2011


Ответы (2)


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

Замечание:

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

person Yahia    schedule 27.09.2011
comment
Спасибо за совет - я изучу это подробнее. Что касается проблемы уровня сети / хранилища, между сервером NFS и серверами приложений существует гигабитная связь ... так что это не должно быть проблемой ... - person Josh; 28.09.2011

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

person tloudev    schedule 19.05.2012