我运行一个网站,其中包含大量的大文件,即使购买了我的主机在单个服务器上提供的最大空间量(8x2TB驱动器),我现在磁盘空间不足。
我想添加第二个服务器纯粹用于存储和提供文件。 我的问题是这样做的最佳做法是什么? 使用NFS挂载新服务器是一种方法。 另一种方法是重写我的应用程序,以利用多个服务器,但这是很多工作。
有没有一种简单的方法将底层存储与Web服务器隔离开来,这样对于Web服务器来说,它们都显示为单一path,但实际上是分布在多个服务器上的?
我的操作系统是Linux CentOS,我的服务器是Apache。
请注意,我面临的唯一问题是磁盘空间,而不是带宽或CPU等。我不需要负载平衡stream量,只增加更多的空间。
我认为NFS是要走的路,但还有其他的select,比如FreeNAS(基于FreeBSD), AoE (代表以太网上的ATA)和SAMBA,但是我不会推荐它,除非你也在寻找windows的互操作性。
我不知道你有多less成本。但是在这种情况下,我们可以使用NAS或者使用SAN来更好地replace服务器上的空间。 存储区域的优势
使用NAS / SAN,您仍然可以使用NFS或某些stream行的高速协议在多台服务器之间共享文件。 不需要更改服务器上的许多configuration。
有了NAS / SAN,您可以随时扩展您的系统,永远不会遇到关于磁盘空间的问题,因为您可以立即订购多个磁盘和热插拔。 令人惊讶的是,当所有的服务器不需要configuration存储在本地的数据,当1或2个节点closures,你仍然正常运行你的服务。 它是那么好
SAN的缺点
当你开始需要处理你现在拥有的数据存储量时,就我所见,你实际上只有两个select:
1)使用像Amazon S3或Rackspace Cloud Files这样的对象存储来存储数据。 这将给你几乎无限的存储容量,并将缓解您的服务器需要提供这些文件。
2)开始pipe理你自己的设备。 当然,你可能会得到某种集群文件系统,并运行在一个托pipe的专用服务器上,但是你将会在很多方面与系统打交道。 为了确保可靠的数据存储,您将需要几台服务器,成本将会快速上升。
我会build议获得更多的外部磁盘空间。 任何认真的托pipe提供商应该能够为您提供一个SAN系统,可以扩大几乎无限。 但我build议不要使用NFS。 根据我的经验,apache和NFS并不总是一起工作。 您最好使用像iSCSI这样的正确的SAN协议。 你想要一个专用的磁盘设备,而不是磁盘共享。
你通常想要的是扩大服务器的数量。 如果不知道我们的应用程序的细节,很难看到,但我会build议使用您的设置的分发性质。 使用HTTP,您有很好的机会根据path将请求redirect到不同的服务器。
那么,NFS也会起作用,但是在某些时候,你的网站将成为瓶颈
关于不同磁盘解决scheme的优点有很多答案,但还有另外一个select。 您可以简单地拥有多个Web服务器,并且可以从不同的服务器提供站点的不同部分。
一种可能性是根据资源types分割你的网站。 例如:大部分内容都是图片,因此您使用主机名images.yourdomain.com设置了一个单独的networking服务器。 然后,你改变应用程序中的所有图像链接,不再指向例如http://www.mysite.com/images/image1.jpg ,而是指向http://images.yourdomain.com/image1.jpg 。
你也可以使用mod_rewrite来做到这一点,这样当浏览器从/images /whatever.jpg请求资源时,它将被/images /whatever.jpg为http://images.yourdomain.com/whatever.jpg 。
第三个select是使用mod_proxy将某些请求转发到第二个服务器而不重写它。 这样做的缺点是,所有的图像请求现在都将通过两台服务器,影响CPU,内存和networking。 即使他们现在不是问题,他们也许会在未来。
我不知道这对你是否有用。 这取决于你的应用程序是如何写的。