Web 服务器的 NFS 服务器和客户端

Web 服务器的 NFS 服务器和客户端

我在 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显示callsauthrefrsh快速启动。

答案1

我认为“浏览器超时”并不能真正证明 NFS 是问题的原因。您没有足够详细地解释您的调试过程。尝试直接从 NFS 客户端命令行访问文件(您从浏览器请求)。在这种情况下,我会更加怀疑 nginx 配置错误或某些网络配置错误最终导致“浏览器超时”。
如果您最终发现问题确实是由 NFS 引起的,并且您无法在合理的时间内找到解决方案,我建议切换到集群文件系统

更新 1:检查客户端和服务器上的 I/O 统计信息“iostat -xm 20”。注意 CPU iowait 和 NFS 分区 MB 读/写统计信息。您想了解 NFS 是否因为读/写负载或其他原因而变慢。如果有大量 I/O,请通过执行“iotop”命令找出是谁生成的。

答案2

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

因此真正的解决办法是回到 NFSv3,然后一切又开始正常工作。

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

相关内容