适用于 Amazon EC2 上的 Web 服务器的 NFS 服务器和客户端,平均负载较高


NFS server and client for web servers on Amazon EC2, high load average

我在Amazon EC2上有这个架构,一个NFS服务器和一个NFS客户端,在客户端上我服务于PHP和Django网站(nginx,uwsgi,php-fpm),它们运行良好。

当我基于第一个 NFS 的图像启动另一个 NFS 客户端实例时,我遇到了问题,当我加载 PHP 站点(wordpress)时,我开始在浏览器上超时。当我关闭其中一个 NFS 客户端实例时,事情又开始工作了。我怀疑存在文件锁定问题,我已经尝试了整晚,一直在谷歌上搜索并尝试了nolock选项,但我就是无法解决它。

我看到的是,NFS 挂载的文件夹看起来很好,并且显示了所有文件,但是当我附加第二个 EC2 实例时,NFS 服务器和两个客户端开始获得高负载平均值,CPU 使用率非常低。

这是 NFS 服务器上/etc/export 中的内容

/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)

这是 NFS 客户端上/etc/fstab 的内容

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会很快上升。

Amazon EC2 上的

NFSv4 存在问题,我不知道为什么,但我雇用的系统管理员告诉我,他也听说过 EC2 上的 NFS 问题。他发现NFS并发读取速度非常非常慢,大约在150秒内达到20MB,而写入速度还不错@ 7MB/s

所以真正的解决方法是回落到 NFSv3,一切又开始正常工作。

希望这将帮助遇到类似问题的人。