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

我有多个Linux Web服务器连接到负载均衡器,我喜欢在这些服务器之间共享资源(如图片,video和其他内容)。 什么是最好的方法来做到这一点?

目前,我已经在一台文件服务器上安装了所有的networking服务器,但是我担心它会在交通繁忙的情况下倒闭。 我怎样才能避免这种情况发生?

提前致谢。

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

    • 在Web服务器上使用装有fx NFS的中央文件服务器
    • 同上,但是多余的,所以如果一个人倒了,另一个人接pipe
    • 使用某种同步工具(例如rsync),并在web服务器上本地托pipe文件。 然后设置一个cronjob以特定的时间间隔同步服务器之间的文件。
    • 使用CDN,如Amazon S3,Akamai等

    前两个是最好的,如果你有很多新的文件来。 第三个将是理想的解决scheme,如果你不添加或更改文件,往往因为用户将获得404静态内容尚未同步..

    最后一个选项在很多方面可能是理想的,但也可能是4中最昂贵的。您还需要重写您的网站以支持这一点。

    另一个减lessweb服务器负载和执行负载平衡的好方法是使用squid(即squid3)将其设置为具有caching的反向代理。 如果你这样设置的话,它会把图片等静态内容caching到硬盘(默认)或RAM(更快,最好)。 如果任何一个特定的节点过载,它也可以循环到其他的鱿鱼服务器。

    我采用的一个解决scheme是在共享的NFS驱动器上拥有主要的文件读/写副本,而且还保留在每个networking服务器上的只读副本,以便NFS主机的故障将文件访问以只读模式而不是完全丢失它们。

    • 文件位于中央主机上,通过NFS挂载与networking主机共享
    • rsync运行15分钟,以保持每个Web主机上的只读副本新鲜。
    • check_link bash脚本每分钟运行一次,以确保NFS挂载仍然存在,并且不会将符号链接交换到只读副本。

    从我第一次设置这个系统的时候可以看到更多细节。

    上升空间:

    • 文件读取高度可用
    • 文件写入没有竞争条件
    • 新文件即时提供给所有networking主机。

    缺点:

    • 有点复杂。
    • 只读副本的数量随着networking主机的数量而变化,如果您有两个以上的networking主机,则可能会过多。
    • 文件写入不是高度可用的。
    • 在切换到只读副本之前,可能会长达1分钟的停机时间。

    你可能想考虑一个NoSQL数据库。 它们被devise用于集群,提供最终的一致性。 但要小心,他们不是酸。

    这里有一个介绍 ,可以帮助你决定你想要什么样的NoSQL数据库。

    以下是与可用的NoSQL相关的资源列表 。

    由于通常需要更多的服务器来运行dynamic网站/ aps所需的资源,因此可以考虑在另一个子域/域中托pipe静态资源。 (如static.yourdomain.com)

    然后您可以使用其他服务器/服务器来承载它们。 静态文件托pipe不占用太多资源,因此您的静态内容需要的服务器less得多。 您还将在服务器上为您的dynamic内容释放一些资源。

    根据您的负载平衡器,您可能也可以在同一个域上执行此操作,负载平衡器将决定使用哪个服务器来处理哪个请求,但是如果您使用单独的域,则可以将静态资源放到CDN上,这很容易应该出现的需要!

    你为什么不尝试一个DFS解决scheme,他们提供了高水平的冗余,并可以尽可能多的共享音量。 Gluster是我最喜欢的一个,在任何着名的Linux发行版中安装和configuration都非常简单