首页 文章

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

提问于
浏览
2

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

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

我重现了运行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

  • 在Apache中设置虚拟主机,其中包含一个简单的HTML文件,引用存储在NFS sharen上的图像文件

  • 加载网站,html和图像文件全部返回200

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

  • 重新安装NFS共享

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

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

干杯,

2 回答

  • 0

    几种选择:

    • 正确获取您的nfs挂载选项,您需要进行软挂载,以便可以中断nfs访问 . 试试 soft,intr,timeo=10 而不是 default

    • 将您的文档根与rsync等其他内容同步,或者从SCM中自行编写半自动结帐/导出脚本(如果您使用的话) . 无论如何,建议使用SCM,例如,您可以恢复到上一个工作版本

    • 使用真正的分布式文件系统(最好是容错像coda),甚至是像drdb这样的分布式块设备系统

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

  • 2

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

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

相关问题