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

Nexenta, NFS и LOCK_EX

Сейчас я использую архитектуру LAMP и ожидаю большой проблемы :(

У меня есть несколько веб-серверов http, использующих PHP5. Все они монтируются через NFS (v3) в каталог для всех размещенных веб-сайтов. На файловом сервере работает Nexenta Storage Appliance с использованием ZFS.

Проблема в том, что все клиенты NFS, пытающиеся записать что-то в файл через NFS, получают эту проблему:

Это внутри процесса apache2:

open("/nfs/website1/file.txt", ORDWR|OCREAT, 0600) = 11647 fstat(11647, {stmode=SIFREG|0600, st_size=23754, ...}) = 0 flock(11647, LOCK_EX

И процесс никогда не получает БЛОКИРОВКУ и продолжает ждать ... всегда.

Эффект? Все процессы apache2 используются и ждут ... мои серверы все еще не могут обрабатывать другие запросы, потому что больше нет доступного процесса.

Я не знаю, где найти решение ... для меня это на стороне сервера NFS ... но какая конфигурация неправильная или отсутствует? Как я могу найти, что не так? Если вам нужна дополнительная информация о конфигурации, просто спросите меня, что может вам больше помочь :)

Похоже, демон блокировки не запущен на стороне сервера.

Вы можете проверить это, изменив монтирование NFS (на стороне клиента), чтобы использовать параметр nolock. Использование этого параметра не предотвращает блокировку на клиентском компьютере (используется локальная блокировка), но предотвращает блокировку между машинами, поэтому это может быть не подходящим решением для вас. Тем не менее, вы можете попробовать это в качестве теста, чтобы увидеть, предотвращает ли он блокировку процессов вашего веб-сервера.

Как только вы точно узнаете, является ли проблема с демоном блокировки, вы можете выяснить, почему он не работает на стороне сервера (или есть ли какой-либо тип межсетевого экрана, который не позволяет протоколу блокировки делать это между клиентами и сервером) .