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

Сервер и клиент NFS для веб-серверов

У меня есть эта архитектура на Amazon EC2, один сервер NFS и один клиент NFS, на клиенте я обслуживаю веб-сайты PHP и Django (nginx, uwsgi, php-fpm), и они отлично работают.

У меня возникла проблема, когда я запускаю другую базу экземпляров клиента NFS на образе первой NFS, когда я загружаю сайт PHP (wordpress), у меня начинаются тайм-ауты в браузере. И когда я выключаю один из экземпляров клиента NFS, все снова начинает работать. Я подозреваю, что есть проблема с блокировкой файлов, я пытался всю ночь, искал в Google и пробовал опцию nolock, но я просто не мог ее решить.

Я увидел, что смонтированные папки NFS выглядели нормально и отображали все файлы, но когда я подключил второй экземпляр EC2, сервер NFS и оба клиента начали получать высокую среднюю нагрузку с очень низкой загрузкой ЦП.

Вот содержимое из / etc / export на сервере NFS

/export/www 172.0.0.0/8(rw,async,no_subtree_check)
/export/config/nginx/sites-available 172.0.0.0/8(rw,async,no_subtree_check)
/export/config/nginx/sites-enabled 172.0.0.0/8(rw,async,no_subtree_check)
/export/config/uwsgi/apps-available 172.0.0.0/8(rw,async,no_subtree_check)
/export/config/uwsgi/apps-enabled 172.0.0.0/8(rw,async,no_subtree_check)

А вот содержимое из / etc / fstab на клиентах NFS

LABEL=cloudimg-rootfs   /        ext4   defaults        0 0
/dev/xvdb       /mnt    auto    defaults,nobootwait,comment=cloudconfig 0       2
#172.31.0.62:/export/www        /var/www        nfs     auto    0 0
172.31.0.62:/export/www /var/www        nfs4    rw,noatime,nodev,async,hard,intr,rsize=32768,wsize=32768 0 2
172.31.0.62:/export/config/nginx/sites-available /etc/nginx/sites-available     nfs4    rw,noatime,nodev,async,hard,intr,rsize=32768,wsize=32768 0 2
172.31.0.62:/export/config/nginx/sites-enabled  /etc/nginx/sites-enabled        nfs4    rw,noatime,nodev,async,hard,intr,rsize=32768,wsize=32768 0 2
172.31.0.62:/export/config/uwsgi/apps-available /etc/uwsgi/apps-available       nfs4    rw,noatime,nodev,async,hard,intr,rsize=32768,wsize=32768 0 2
172.31.0.62:/export/config/uwsgi/apps-enabled /etc/uwsgi/apps-enabled   nfs4    rw,noatime,nodev,async,hard,intr,rsize=32768,wsize=32768 0 2

Большое спасибо.

ОБНОВИТЬ:

Похоже, это связано не только с PHP FPM, я даже могу воспроизвести это, обновив статическую страницу html. Всякий раз, когда сервер начинает зависать, запускается nfsstat показывает calls и authrefrsh поднимается очень быстро.

«Таймауты в браузере», на мой взгляд, не совсем доказывают, что NFS является причиной проблемы. Вы недостаточно подробно объяснили свой процесс отладки. Попробуйте получить доступ к файлам (которые вы запрашиваете из браузера) непосредственно из командной строки клиентов NFS. В такой ситуации я бы с большим подозрением относился к неправильной конфигурации nginx или некоторой неправильной конфигурации сети, которая в конечном итоге вызывает "таймауты в браузере".
Если в конце концов вы обнаружите, что проблема действительно вызвана NFS, и вы не найдете решение в разумные сроки, я бы посоветовал перейти на GlusterFS.

Обновление 1. Проверьте статистику ввода-вывода на клиенте и сервере «iostat -xm 20». Обратите внимание на статистику чтения / записи CPU iowait и NFS partiton MB. Вы хотите узнать, работает ли NFS медленно из-за загрузки R / W или по какой-либо другой причине. Если операций ввода-вывода много, выясните, кто их генерирует, выполнив команду «iotop».

Была проблема с NFSv4 на Amazon EC2, я не знаю почему, но системный администратор, которого я нанял, сказал мне, что он слышал о проблемах NFS и на EC2. Он обнаружил, что скорость одновременного чтения NFS была очень-очень низкой, примерно 20 МБ за 150 секунд, в то время как скорость записи была вполне нормальной @ 7 МБ / с.

Итак, реальным решением было вернуться к NFSv3, и все снова стало работать нормально.

Надеюсь, это поможет кому-то, у кого похожая проблема.