我有多个连接到负载平衡器的 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_link
bash 脚本以确保 NFS 挂载仍然存在,如果不存在则将符号链接交换到只读副本。
更多详细信息请访问本文从我第一次建立这个系统的时候开始。
优点:
- 文件读取高度可用
- 文件写入无竞争条件
- 新文件可立即供所有网络主机使用。
缺点:
- 有点复杂。
- 只读副本的数量与网络主机的数量成正比,如果您拥有两个以上的网络主机,则数量可能会过多。
- 文件写入的可用性不高。
- 切换到只读副本之前可能需要长达 1 分钟的停机时间。