在过去的几个月里,我一直在尝试寻找在多个运行 Apache+PHP 的 Web 服务器(12 个以上)上共享多个网站内容的最佳方法。我面临的最大挑战之一是我们需要能够读取和出于各种好或坏的原因(例如,应用程序不在我们的控制范围内、通过 Web 界面管理的 wordpress 网站等...),随时写入文件系统。
以下是我尝试过并取得成果的一些方法:
- Rsync/duplicity/csync2:每分钟仅运行一次,这意味着某些更改不会在集群中足够快地共享,以防止出现重大问题。
- inotify/incron:考虑到要监控的文件和目录数量巨大,这太复杂了。此外,它对新文件的处理效果不佳。
- GlusterFS:我们有 4 台服务器的 gluster 后端,虽然性能确实很慢,但可以忍受。不幸的是,每台 Web 服务器上运行的 gluster 客户端不断崩溃,导致 4 台文件服务器中的一台服务器冻结 2 到 15 分钟。我们联系了 Gluster Inc.,希望他们的一些工程师能帮助我们,但他们无法找出问题所在。使用 3 个月后,我们不得不放弃。
有关我们设置的一般信息:
- 托管在 Amazon EC2 上
- 运行 Ubuntu Maverick
- 运行 Nginx (2) -> Varnish (2) -> Apache (12+)
- .htaccess 已禁用,以实现最佳性能。我们将指令直接添加到站点配置文件中
- 我们运行的大多数网站/应用程序都不属于我们,不幸的是,无法实现只读环境
- 考虑到这些 Web 服务器正在处理的任务,具有自动故障转移功能的高可用性对我们来说非常重要
所以我认为这涵盖了所有内容 :)。提前感谢您的时间和回复。
答案1
这里的“最不坏”(TM) 选项是 NFS。我知道这很难接受。我尝试使用 rsync 来避免它,我尝试使用 GFS 来避免它,我尝试使用 incron/inotify 来避免它。我尝试通过推动开发人员停止使用文件系统作为数据存储来避免它。最终,我们真的没有比 NFS 更好的选择。不是因为 NFS 很好,正如你所说,它的 HA 部分很粗糙,而是因为真的没有更好的选择。
答案2
从技术上讲,它仍处于“测试阶段”,但我认为 Bittorrent Sync 非常适合您。我没有这样的环境(多个 Web 服务器),所以自己没有尝试过,但听说其他人也这样做,并且非常高兴。我确实将它用于分布式服务器备份,从技术角度来看,这是一种类似的用途:http://wandin.net/dotclear/index.php?post/2013/07/17/Distributed-server-backups-with-btsync
答案3
旧的 NFS+DRBD 有什么问题(假设是在 Linux 上)?