从已挂载的、不可用的 NFS 挂载中恢复 Apache
我在生产中有几个 Web 应用程序,它们利用 NFS 安装在 Web 头之间共享资源(通常是静态资产文件)。如果 NFS 挂载不可用,Apache 将挂起请求无法访问的文件,内核将记录:
11 月 2 日 14:21:20 server2 kernel: nfs: 服务器 server1 未响应,仍在尝试
我在运行 NFS v3 和 Apache 2.2.3 的 RHEL5 中重现了该行为:
在 Server1 上创建 NFS 挂载(我的 /etc/exports 的内容)
/srv/test_share server2(rw)
在 Server2 上挂载 NFS 共享(我的 /etc/fstab 的内容)
server1:/srv/test_share /mnt/test_share nfs defaults 0 0
使用引用存储在 NFS 共享上的图像文件的简单 HTML 文件在 Apache 中设置虚拟主机
加载站点,html 和图像文件均返回 200
卸载 NFS 共享,加载页面对引用的镜像返回 404s
重新挂载 NFS 共享
通过开启 NFS 来模拟 NFS 崩溃在 Server1 上关闭 - 重新加载站点在检索引用的文件时挂起。
目前网上搜索还没有找到好的解决方案。基本上,期望的行为是 Web 服务器返回 404,并且在 NFS 挂载恢复之前不会挂起。
干杯,
本
I have several web applications in production that utilize NFS mounts to share resources (usually static asset files) among web heads. In the event that an NFS mount becomes unavailable, Apache will hang requesting files that cannot be accessed, the kernel will log:
Nov 2 14:21:20 server2 kernel: nfs: server server1 not responding, still trying
I reproduced the behavior in RHEL5 running NFS v3 and Apache 2.2.3:
Create an NFS Mount on Server1 (contents of my /etc/exports)
/srv/test_share server2(rw)
Mount the NFS share on Server2 (contents of my /etc/fstab)
server1:/srv/test_share /mnt/test_share nfs defaults 0 0
Setup a virtual host in Apache with a simple HTML file referencing image files stored on the NFS sharen
Load the site, the html and image files all return 200
Unmount the NFS Share, loading the page returns 404s for the images referenced
Remount the NFS Share
Simulate an NFS crash by turning NFS off on Server1 - reloading the site hangs retrieving the referenced files.
Internet searches so far have not turned up a good solution. Basically the desired behavior would be for the web server to return 404s and not hang until the NFS mount recovers.
Cheers,
Ben
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
几个选项:
soft,intr,timeo=10
而不是default
选项 2 和 3 为您提供断开连接的操作,因此比 nfs 更强大。 drdb 很性感,但我的建议是选项 2,使用 git 或 svn 之类的东西,简单而强大
couple of options:
soft,intr,timeo=10
instead ofdefault
option 2 and 3 give you disconnected operation and are therefore much more robust than nfs. drdb is sexy, but my advice would be option 2 with somwething like git or svn, simple and robust
我不会直接从 NFS 挂载提供服务,而是从本地文件系统提供服务。
设置一个每隔几分钟将 NFS 挂载同步到本地文件系统的 cron 作业并不会太难。 Apache 将从那里提供其内容,而不依赖于 NFS 安装。如果挂载发生故障,Apache 仍然能够为这些资产提供服务,尽管在 NFS 挂载恢复之前这些资产可能已经过时。
I would not directly serve from the NFS mount, but instead from your local filesystem.
It wouldn't be too hard to setup a cron job that synced the NFS mount to the local file system every few minutes. Apache would serve its content from there, not depending on the NFS mount. If the mount goes down, Apache would still be able to serve the assets, although they might be out of date until the NFS mount comes back up.