我在 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
快速启动。
答案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,然后一切又开始正常工作。
希望这能帮助遇到类似问题的人。