通过NFS在Nginx中提供静态文件?


9

我有一个网站,在nginx服务器上每秒收到约7k个请求。该服务器既可以处理对Apache服务器的重写,也可以直接提供静态文件,图像等。静态文件是其中最大的部分,大约有5000个请求。

对于体系结构升级,我考虑使用中央文件服务器,该服务器通过NFS导出包含这些静态文件的目录。这些文件将没有写访问权,因此该目录可以在nginx机器上以只读方式挂载。我主要关心的是:

NFS是否足够快?NFS可以处理多少个请求?这样一来,有一些“必备”选项吗?

好处:除了NFS之外,还有其他替代设置吗?

谢谢!


没有读取访问权限,还是“仅”读取访问权限?
pauska

谢谢!仅读访问,无写访问。
2011年

2
7k每秒的请求量约为每天6,048,00,000个请求,如果您在单个NGINX服务器上运行该请求,那么我们(以及使用服务器群集来承担一半负载的公司)很想知道您的设置。
涂抹

Answers:


2

通过设置中央NFS服务器,可以将单点故障引入设计中。仅此一项应该会破坏交易。如果没有,那么NFS对于这样的负载可能足够快。关键因素将是有足够的RAM来缓存文件,低延迟的互连(Gig-E或更高)以及调整(比以前少)。

您还应该强烈考虑使用rsync或类似工具在每个Web服务器上保留静态文件更新的本地副本。另一个选择可能是SAN或冗余NFS服务器解决方案(两者都将比rsync的想法更加复杂和昂贵)。


2
NFS不必是SPoF
gWaldo 2011年

@gWaldo您究竟如何设置“中央NFS服务器”而不使其成为SPoF?
克里斯·S

如您所说,您可以通过意识到中央 NFS服务器是SPoF来做到这一点,而是选择实现NFS群集。我实际上没有不同意你....
gWaldo

谢谢-接受此解决方案,因为我想我会走rsync路线,避免出现单点故障(这应该是我的主要关注点)。
j0nes

使用GlusterFS和CTDB实现高可用性双复制NFS服务器非常简单。在性能方面,我的集群每秒接收大约1万个请求,并且进展顺利。唯一的问题是NFS服务器将需要大量RAM。
2015年

2

我使用cachefilesd(以及最近的Linux内核,带有cachefs)将NFS文件缓存到本地HD。这样,nfs中的每次读取都会将文件复制到/ var / cache / fs目录中,下一次读取将从那里进行,内核会在nfs中检查内容是否仍然有效。

这样,您可以拥有中央NFS,但又不会损失本地文件的性能

当可用大小/节点达到配置的级别时,Cachefilesd将负责清理旧文件,因此您可以为NFS提供不常见的数据,为HD提供常见的请求

当然,也可以使用清漆来缓存更常见的请求,并从那时开始保存Nginx / NFS。

是一个小的缓存文件


1

速度取决于许多因素:

  • 您的服务器如何与NFS目标连接?单个双端口SAS磁盘可以利用6gbit / s的传输速度。如果您打算使用1gig以太网(可以从中减去20%的TCP开销),请记住这一点。
  • NFS服务器将获得哪种缓存?您是否正在使用具有大量缓存的企业级阵列控制器?读取缓存是此设置中的关键
  • 多少台服务器将同时访问同一文件?NFS锁定可能会造成伤害-严重

通过NFS打开文件的限制是主机操作系统的限制。例如,FreeBSD有许多不同的调整选项来支持大量打开的文件,但这取决于服务器中的RAM数量。

中央文件服务器的替代方法是在Web服务器之间使用同步/复制(如Chris S建议的那样)。rsync或DRBD可能是一个不错的选择,并且具有成本效益。


1

我建议不要使用NFS,除非您在其中添加了一些缓存。Nginx缓存总比没有好,但是Varnish更好。

话虽如此,如果您的负载将变为动态内容而不是静态内容,那么从本地磁盘提供应用程序文件将变得越来越重要。

如果放入NFS,请确保具有冗余。


这可能需要对体系结构进行一些更改。除了使用诸如Varnish之类的缓存层之外,对所有将在NFS共享上的静态文件使用原始提取CDN设置也是一个好主意。这将减轻NFS后端的负载。
Alpha01 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.