如何在多个 Web 服务器之间共享资产?

如何在多个 Web 服务器之间共享资产?

我有多个连接到负载平衡器的 Linux Web 服务器,并且我想在这些服务器之间共享资产(例如图片、视频和其他内容)。最好的方法是什么?

目前,我已经将文件服务器挂载到所有 Web 服务器,但我担心它在流量大的情况下会崩溃。我该如何避免这种情况发生?

提前致谢。

答案1

根据您的需要,有多种方法可以做到这一点。

  • 在 Web 服务器上使用安装有 fx NFS 的中央文件服务器
  • 与上面相同,但是是多余的,所以如果一个发生故障,另一个将接管
  • 使用某种同步工具(例如 rsync)并将文件本地托管在 Web 服务器上。然后设置一个 cronjob 以特定间隔在服务器之间同步文件。
  • 使用 CDN 例如 Amazon S3、Akamai 等。

如果您有大量新文件,前两种方法最合适。如果您不经常添加或更改文件,则第三种方法将是理想的解决方案,因为用户在尚未同步的静态内容上会遇到 404 错误。

最后一种选择可能在很多方面都是理想的,但也可能是四种选择中最昂贵的。您还需要重写您的网站来支持这一点。

答案2

另一种减少 Web 服务器负载并执行负载平衡的好方法是使用 squid(即 squid3)。将其设置为具有缓存的反向代理。如果您这样设置,它将把图片等静态内容缓存到 HDD(默认)或 RAM(更快且最佳)。如果任何一个特定节点超载,它也可以轮询到其他 squid 服务器。

答案3

针对这一挑战,我采用的一个解决方案是将文件的主要读/写副本放在共享 NFS 驱动器上,但同时在每个 Web 服务器上保留只读副本,这样当 NFS 主机发生故障时,文件访问将处于只读模式,而不是完全丢失。

  • 文件存储在中央主机上,通过 NFS 挂载与网络主机共享
  • rsync每 15 分钟运行一次,以保证每个网络主机上的只读副本保持最新。
  • 每分钟运行一次check_linkbash 脚本以确保 NFS 挂载仍然存在,如果不存在则将符号链接交换到只读副本。

更多详细信息请访问本文从我第一次建立这个系统的时候开始。

优点:

  • 文件读取高度可用
  • 文件写入无竞争条件
  • 新文件可立即供所有网络主机使用。

缺点:

  • 有点复杂。
  • 只读副本的数量与网络主机的数量成正比,如果您拥有两个以上的网络主机,则数量可能会过多。
  • 文件写入的可用性不高。
  • 切换到只读副本之前可能需要长达 1 分钟的停机时间。

答案4

您可能需要考虑使用 NoSQL 数据库。它们旨在在集群上运行,提供最终一致性。但请注意,它们不是 ACID。

这是一个介绍这将帮助你决定适合你的用途的 NoSQL 数据库类型。

这里有一个资源列表与可用的 NoSQL 相关。

相关内容