通过横向扩展Web服务器来共享file upload目录的最佳方式

我目前正在尝试为基于Drupal的Web应用程序devise一个可水平扩展的集群,它看起来像下面的彩色图表:

负载平衡器实现粘性会话,所以一旦用户被分配了服务器,用户就可以保持状态。

每个应用服务器都有以下几点

  • 在前面的清漆
  • drupal 6在pipe中间运行
  • memcached在后面

这两个mysql数据库服务器在一个共享的IP上,它们在一个DRBD的HA集群中,并且听起来很不错,所以丢失的不会造成整个平台的崩溃。

在这里输入图像描述

有几件事我不确定,我会感激你的意见:

文件存储应该如何水平扩展?

我正在考虑使用NFS在每个应用程序服务器上安装一个共享文件目录,因此一次上传的文件在所有这些文件上都可用。 我正在考虑NFS,因为它已经存在很久了,而且我没有使用MogileFS或GlusterFS的经验,这是我们之前使用过的,所以我们对它更加熟悉。

有没有任何的指导方针来解决多less个服务器是明智的共享一个通过NFS这样的目录?

如何在共享文件存储上提供HA?

这里的一个问题是NFS服务器是单点故障。

我们已经在Mysql服务器上使用了Heartbeat和DRBD,而且我希望尽可能降低堆栈中涉及的技术数量 – 如果我要对文件使用相同的HA策略,那么会出现什么问题服务器呢?

另一种方法

这是一个面向内部的网站,有限的用户偶尔会在短时间内使用网站,而内部的计划正在进行。 所以这不需要像一些启动一样无限地扩展。

鉴于

  • 我们可以预期的stream量有一个上限
  • 向文件服务器添加HA,并devise一个水平扩展的设置,这样会带来相当大的复杂性

我也在考虑让这两个Web服务器更加强大,以便它们能够处理它们之间的高峰负载,并在cron作业上设置两者之间的一致或rsync,以便:

  • 他们的文件仍然处于同步状态(粘滞会话让用户在同一台​​服务器上传文件)
  • 失去一个意味着该网站仍在运作。

这听起来像是一个可能的方式来解决任何可能的NFS / DRBD HA复杂性头痛?

谢谢,

C

NFS服务器将至less具有与MySQL服务器相同的configuration,因为它们具有基本相同的function和限制(两者都是写入数据的地方)。 我不喜欢多个作者使用NFS的想法,这使得pipe理文件locking变得非常复杂,而且我的经验在这一点上并不是很好。

我的build议是集中所有的写入应用程序服务器(也许有一个应用程序服务器专门写在NFS服务器上)和多个读取器应用程序服务器挂载它只读(我知道,Drupal有一些dynamic缩略图,需要写出来,但是你可以把它保留在RO fs上)。 您至less需要第二台NFS服务器(如果没有像SAN这样的共享存储,则使用DRBD是最佳select)来确保HA。

最后,看看Gluster和其他分布式系统。

你可以试试mogileFS。 我曾经使用过我们的一个项目。 它易于使用和configuration,可以扩展,没有单点故障。

http://danga.com/mogilefs/

最好的方法是find一个好的存储解决scheme。 根据应用的规模和types,你可以使用一个优秀的NAS,支持NFS和至less两个千兆端口和电源(查看一些企业解决scheme)。

如果您真的对应用程序非常认真,最好的select是检查一些SAN解决scheme,但这可能会非常昂贵,因为它需要特殊的硬件(可以使用现成的硬件,但可能太慢)。