从已挂载的、不可用的 NFS 挂载中恢复 Apache

发布于 2024-08-09 12:57:12 字数 830 浏览 11 评论 0原文

我在生产中有几个 Web 应用程序,它们利用 NFS 安装在 Web 头之间共享资源(通常是静态资产文件)。如果 NFS 挂载不可用,Apache 将挂起请求无法访问的文件,内核将记录:

11 月 2 日 14:21:20 server2 kernel: nfs: 服务器 server1 未响应,仍在尝试

我在运行 NFS v3 和 Apache 2.2.3 的 RHEL5 中重现了该行为:

  1. 在 Server1 上创建 NFS 挂载(我的 /etc/exports 的内容)

    /srv/test_share server2(rw)

  2. 在 Server2 上挂载 NFS 共享(我的 /etc/fstab 的内容)

    server1:/srv/test_share /mnt/test_share nfs defaults 0 0

  3. 使用引用存储在 NFS 共享上的图像文件的简单 HTML 文件在 Apache 中设置虚拟主机

  4. 加载站点,html 和图像文件均返回 200

  5. 卸载 NFS 共享,加载页面对引用的镜像返回 404s

  6. 重新挂载 NFS 共享

  7. 通过开启 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:

  1. Create an NFS Mount on Server1 (contents of my /etc/exports)

    /srv/test_share server2(rw)

  2. Mount the NFS share on Server2 (contents of my /etc/fstab)

    server1:/srv/test_share /mnt/test_share nfs defaults 0 0

  3. Setup a virtual host in Apache with a simple HTML file referencing image files stored on the NFS sharen

  4. Load the site, the html and image files all return 200

  5. Unmount the NFS Share, loading the page returns 404s for the images referenced

  6. Remount the NFS Share

  7. 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

〃温暖了心ぐ 2024-08-16 12:57:12

几个选项:

  • 正确设置 nfs 挂载选项,您需要进行软挂载,以便可以中断 nfs 访问。尝试用 soft,intr,timeo=10 而不是 default
  • 将文档根与 rsync 之类的其他东西同步,或者自己编写一个从 SCM 进行半自动签出/导出的脚本,如果你用一个。无论如何,建议使用 SCM,让您可以恢复到上一个​​工作版本,例如
  • 使用真正的分布式文件系统(最好是容错的,例如 coda),甚至是分布式块设备系统,例如 drdb

选项 2 和 3 为您提供断开连接的操作,因此比 nfs 更强大。 drdb 很性感,但我的建议是选项 2,使用 git 或 svn 之类的东西,简单而强大

couple of options:

  • get your nfs mount options right, you need to do a soft mount so nfs access can be interupted. try soft,intr,timeo=10 instead of default
  • sync your document roots with something else like rsync, or script yourself a semi-atomatic checkout/export from your SCM, if you use one. SCM use is recommended anyway, gives you the possibility to revert to the last working version, for instance
  • use a real distributed filesystem (preferably fault tolerant like coda) or even a distributed block device system like drdb

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

云雾 2024-08-16 12:57:12

我不会直接从 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文