我有一个这样的三层网络解决方案:
- 具有负载平衡 + 代理 + 静态内容的前端
- 后端有 2 个 Apache Web 服务器,每个服务器服务于不同的网站
- 将内容推送到 Apache Web 服务器的发布系统
因此,我正在为后端的 Web 服务器开发一个高可用性解决方案。我的想法是在后端服务器之间复制内容,如果一个服务器发生故障,另一个服务器将为所有网站提供服务(这可以是手动的,也可以使用 Heartbeat)。
问题是这些网站的总大小和文件数量都很大。我尝试使用 rsync 在服务器之间复制内容,但需要很长时间。我还考虑过使用 NFS 来共享内容,但这不是高可用性的选项。另一种方法是让发布系统将内容推送到两个 Web 服务器,但如果我在后端放置另一个 Web 服务器会发生什么?
有没有更好的方法?我不需要两台服务器同时提供相同的内容,但同步相同的内容是必须的。
答案1
您确实应该考虑使用多节点文件系统(例如 OCFS 或 GFS)的 DRBD(基于 TCP/IP 的 RAID-1)。
您还可以考虑获取一个 SAN,以便能够放置其中任何一个文件系统。
答案2
使用 SAN 而不是 NFS 服务器,RAID 将处理高可用性。
您可以使用 HAProxy + Keepalived 作为负载均衡器。对于复制,如果以太网不能满足您的需求,请考虑光纤链路。在我看来,RSync 非常高效(使用“-z”选项可以压缩数据,因此非常高效)。至少,如果您想要高性能,您可以将两个 Apache 作为 VM 托管在同一台服务器上,并添加一些不错的磁盘(15K rpm)和一个不错的 RAID 卡。这应该可以为您提供所需的可用性
答案3
我在 Debian Lenny 上使用 Heartbeat2 进行故障转移,效果非常好。我有一个 Web 应用程序,由一台 Web 服务器提供服务,如果出现问题,该服务器将故障转移到另一台 Web 服务器(例如 2 节点主动-被动集群)。Web 应用程序数据位于文件系统上,也位于 MySQL 数据库中。我们在主-主复制模式下使用 MySQL 来处理数据库应用程序数据的镜像。当我们实时推送更新时,其余部分由 rsync 处理。这种设置在过去的 6 个月中一直在生产中发挥作用,并且在实际事故中表现良好。我认为由于这一点,我们的总体正常运行时间又增加了 9%。
我很惊讶你的 rsync 花了这么长时间,因为你的 web 服务器可能位于同一个数据中心或同一个国家,除非它们是 ISO 之类的大文件。可能值得检查你使用的 rsync 选项,看看是否可以优化。