从已安装且不可用的NFS Mount恢复Apache

时间:2009-11-02 22:21:10

标签: apache recovery nfs

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

Nov 2 14:21:20 server2 kernel: nfs: server server1 not responding, still trying

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

  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. 使用简单的HTML文件在Apache中设置虚拟主机,该文件引用存储在NFS sharen上的图像文件

  4. 加载网站,html和图片文件都返回200

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

  6. 重新安装NFS共享

  7. 通过在Server1上关闭NFS来模拟NFS崩溃 - 重新加载站点会挂起检索引用的文件。

  8. 到目前为止,互联网搜索还没有找到一个好的解决方案。基本上,期望的行为是Web服务器返回404并且在NFS挂载恢复之前不会挂起。

    干杯,

2 个答案:

答案 0 :(得分:2)

几个选项:

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

选项2和3为您提供断开连接的操作,因此比nfs更强大。 drdb是性感的,但我的建议是选择2与sitwething像git或svn,简单而强大

答案 1 :(得分:0)

我不会直接从NFS挂载服务,而是从本地文件系统直接服务。

设置一个每隔几分钟就将NFS挂载同步到本地文件系统的cron作业就不会太难了。 Apache将从那里提供其内容,而不依赖于NFS安装。如果挂载发生故障,Apache仍然可以为资产提供服务,尽管它们可能已经过时,直到NFS挂载恢复为止。