扩展NFS安装的Web服务器和在线文件存储

所以,几个月前,我的老板对我说:“我们需要在相当短的时间内扩大到X客户端。” 有些场合,如果还有什么其他的工程挑战,当然更多的客户意味着更多的收入。

所以,现在我们有一个类似于下面的设置。 冗余负载平衡器,提供来自两个web服务器(通过memcache共享的会话)的数据,以及两个后端完全冗余的文件服务器。 每台文件服务器都具有整个驱动器,RAID6arrays,整个驱动器,热空间驱动器,双raid控制器,双nics,多pathyada yada yada。

简单的设置

我觉得这个devise是坚实的,没有单点故障的高可用性。 通过将负载分解到多个Web服务器实现高性能,从可扩展性高的angular度来看,我们应该能够保持水平添加越来越多的机器,以扩展到越来越多的客户端。 主要的瓶颈是每个文件服务器可容纳多less存储空间,以及为每个客户端分配了多less空间。 这部分会比其他系统更快地扩展。 文件服务器/客户端“池”路由被select,因为它横向扩展和更便宜,然后说:“好吧,我们需要购买甚至更大的SAN”。

替代文字

所以,这一切都非常简单,越来越多的在线存储,意味着越来越多的NFS挂载。 这就是我的第二次猜测。 我想确保在把这个devise放在任何位置之前,我已经解决了所有潜在的问题。 只要每一块这个难题都得到适当的监督,我觉得它是可以控制的,但是我想首先得到其他的意见,也许是从这个路上走过的人。

我知道有几个关键问题需要关注。

  • 文件服务器上的热点 ,或者特定的机器工作得更辛苦,那么池的其他部分就会变得更加困难。
  • 带宽和后端交换 。 在networking服务器和NFS设备之间会有很多的交谈,高质量的交换机必须具备高交换matrix容量。

未知的问题…

  • NFS挂载在 Web 服务器上 ,是否有任何问题,让每个Web服务器有2 … 5 … 10 … 100 NFS挂载在任何给定的时间? 有没有办法让这个更容易或更友善? 也许是某种NFS代理? (这将创造一个内部的瓶颈,这使我皱眉)。 我想到了一个分布式文件系统,并且让web服务器安装它,但是看起来非专有的,POSIX兼容的,没有停机时间的扩展,内部冗余文件系统对于生产工作来说太不成熟,昂贵,或者是真的善于从Google隐藏。

让我知道你们的想法,如果你看到任何build议和优化,将不胜感激。

((因为它是一个开放性的问题,没有一个具体的“正确的答案”,问题是一个社区Wiki))

在90%的托pipe情况下,你会遇到比存储服务器更多的networking服务器,这会改变你的networkingdevise。 您将成对运行存储服务器,因为许多主/主文件服务器不支持多于镜像复制。 如果你有一个10G的骨干网,那么大的NFS服务器可能会处理十几个networking服务器。 您的连接线将是虚拟连接,因为您将在一个vlan上运行networking局域网,在单独的vlan上运行存储局域网,为networking局域网运行networking局域网,根据预算10g用于存储局域网。 你提到双主存储服务器,然后提到有些排他性的NFS挂载。 他们真的没有任何共享,或者它是一个双头/双架子/单一的fcal设置?

在双主设备中运行负载平衡器,以缩短切换时间并提高潜在的吞吐量。 一旦发生故障,请不要使用超过40%的容量,以便有足够的备件。

您还需要考虑MySQL / PostgreSQL / Cassandra / etc群集 – 它们并不特别喜欢NFS挂载。

Lefthand Networks有一个分布式文件系统产品。 GlusterFS已经有些成熟,可以根据你的工作量来工作。 MogileFS / Hadoop是另一种可能性。 另外,请看看Ceph,GFS和OCFS。

至于挂载次数,您将每个NFS服务器挂载一次,或者每个webserver挂载两次。 数十坐骑不会闻所未闻,但是,最终可能会分离您的networking群集,以消除数百个坐骑。 Hadoop可以将自己作为跨分布式networking的单个全局文件系统呈现给您的networking。

像karmawhore所说,有更多的文件服务器比networking服务器听起来像一个非常非标准的设置。 你能解释一下用法吗?

从你的Visio图纸和你的描述中,我无法弄清楚你的无单点故障是在什么地方。 对我来说,它看起来像每个NFS服务器有它自己的文件的子集?

你可能应该考虑用大量的RAM构build“胖”(即非常繁重的)文件服务器,并使用某种forms的群集或镜像文件系统,从2个NFS服务器开始,然后以2的增量进行扩展。也许http://www.drbd.org/可以为你工作?

例:

NFSA_1 < – > NFSA_2 NFSB_1 < – > NFSB_2

为了解释为什么在上面的devise中有更多的文件服务器比networking服务器,系统Grufftech(我和他一起工作)所说的是为消费者和企业(备份台式计算机和服务器)提供在线备份服务。

您可能会考虑编写自己的目录系统,将这些文件散列到不同的文件系统群集,并使用http / https从各个服务器上获取这些文件。 这样,扩展就成为添加更多后端“web服务器”的问题,您不必担心每台服务器与每个可能的存储服务器保持连接。 效率稍差,但大大简化了您的设置。 由于您维护了文件系统位置的映射,并且可以将数据存储在两个或多个单独的文件服务器对上,因此您可以简单地执行后端http请求,以便在请求时获取文件/文件。 你的配对在物理和networking拓扑上是分开的,所以丢失整个机架不会把你的配对的两个单元都拿走。 这将允许您使用不需要尽可能多的软件configuration的系统,但需要编写更多代码来pipe理分布式文件系统。

SuperMicro和其他一些厂商生产的4U机箱(SC847)可以处理36个3.5“外部/热插拔驱动器,再加上FreeBSD / OpenSolaris,你可以使用ZFS(如果你要使用商用驱动器,这将是非常有益的)。

由于您正在备份数据,是否真的有必要有一个支持群集locking的posix兼容的后端? 客户是否可能竞争访问相同的文件? 如果不是的话,任何分布式的文件系统,保持东西作为一个单一的安装也将工作。 虽然我们的备份在源机器的内部进行rsync,但客户机对备份文件副本的请求却是通过http服务的。

GlusterFS,MogileFS或HDFS也会给你一个单一的挂载点为每个networking服务器。 这将允许你更常规地访问数据,但是,你失去了一些posix的function。

你如何在存储节点上复制数据? 我假设你有Apache从存储节点上的相同目录提供你的Web内容…

我们正在设置类似的东西,但是在确定一种在存储节点间无延迟地复制数据的方法时,我感到非常沮丧。

想法?