在多台机器和硬盘驱动器上使用 nginx 提供静态文件
Serving static files with nginx on multiple machines and hard drives
我有一个项目将在部署后存储大量媒体内容。项目使用 Python,Django,也通过 Gunicorn 和 Supervisor 运行。
对于静态文件,我将使用 nginx。
我按照 this article 进行的基本设置,但我有一个问题,如何更动态地存储内容。一开始我有一台机器,4个硬盘,每个2Tb,以后会买更多,还有新机器(目前我只有一个).
站点位于 site.com
,nginx 位于子域 i.site.com
并且根目录中有 2 个文件夹:/static
用于存储 css、js、svg、e.t.c。设计元素和 /media
将存储什么媒体内容。
问题是设置 nginx 在每个硬盘驱动器上写入媒体,每台机器都会被使用。
为了速度我需要在不同的硬盘驱动器中写入每个新文件(如rotation/loop),例如我保存file1
,它写在machine1/hdd1
,然后我保存 file2
,它写在 machine1/hdd2
...file4
在 machine1/hdd4
,file5
在 machine2/hdd1
(目前我提到我只有一台机器,但以后会更多).
所以,任何人都有经验或想法我该怎么做?我确定 nginx 至少可以在多个硬盘上写入,但是我不确定如果我需要在多台机器上写入媒体数据我该怎么办。
如果您还有其他想法,也请提出来。
您可能会在提到的文章中找到 nginx 配置示例,或者通过关注 this link. I also looking for nginx upstream module,但我实际上不确定是否可以使用它进行配置。
更新: 以前,我写答案时没有过多考虑您要解决的实际问题。您在下面的评论提出了一些我以前忽略的有趣问题。我现在重写了我的答案。希望这会有所帮助。
在这个回答的前一个版本中,我提到了负载平衡。但显然你的问题更多的是文件存储而不是管理负载。
您正在寻找的东西叫做分布式文件系统。分布式文件系统允许您插入许多磁盘并且它可以扩展到多台机器。
DFS 将所有磁盘和机器组合在一起,让您可以像访问单个磁盘一样访问它们。不仅如此,如果您愿意,DFS 软件还可以为您处理文件复制。
我没有使用任何 DFS 的经验,但我读过一些关于 GlusterFS 的内容。我听说这很好,但请随时进行研究。
让我试着解释一下 GlusterFS 是如何工作的。看看这个 图表:
/ Disk 1
/ Machine 1 [Gluster Server] |
/ \ Disk 2
/
Nginx -> Gluster Client -> |
\
\ / Disk 1
\ Machine 2 [Gluster Server] |
\ Disk 2
无需深入了解太多细节,Gluster 客户端将允许您的 Nginx 服务器从单个目录访问机器 1 和机器 2,如 /media
。在这个 /media
目录中,您可以访问两台机器,就像所有数据都存储在 /media
中一样,即使它们存储在不同的机器上。
指南和教程:
- Setting up GlusterFS on Ubuntu - 很好的教程,解释了很多基本的东西。尽管它是为 Ubuntu 12.04 编写的,但我相信您可以根据您的 OS.
版本调整它
- Common DFS architectures explained - 一些 DFS 架构模式,您以后可能会觉得有用。
我有一个项目将在部署后存储大量媒体内容。项目使用 Python,Django,也通过 Gunicorn 和 Supervisor 运行。
对于静态文件,我将使用 nginx。
我按照 this article 进行的基本设置,但我有一个问题,如何更动态地存储内容。一开始我有一台机器,4个硬盘,每个2Tb,以后会买更多,还有新机器(目前我只有一个).
站点位于 site.com
,nginx 位于子域 i.site.com
并且根目录中有 2 个文件夹:/static
用于存储 css、js、svg、e.t.c。设计元素和 /media
将存储什么媒体内容。
问题是设置 nginx 在每个硬盘驱动器上写入媒体,每台机器都会被使用。
为了速度我需要在不同的硬盘驱动器中写入每个新文件(如rotation/loop),例如我保存file1
,它写在machine1/hdd1
,然后我保存 file2
,它写在 machine1/hdd2
...file4
在 machine1/hdd4
,file5
在 machine2/hdd1
(目前我提到我只有一台机器,但以后会更多).
所以,任何人都有经验或想法我该怎么做?我确定 nginx 至少可以在多个硬盘上写入,但是我不确定如果我需要在多台机器上写入媒体数据我该怎么办。 如果您还有其他想法,也请提出来。
您可能会在提到的文章中找到 nginx 配置示例,或者通过关注 this link. I also looking for nginx upstream module,但我实际上不确定是否可以使用它进行配置。
更新: 以前,我写答案时没有过多考虑您要解决的实际问题。您在下面的评论提出了一些我以前忽略的有趣问题。我现在重写了我的答案。希望这会有所帮助。
在这个回答的前一个版本中,我提到了负载平衡。但显然你的问题更多的是文件存储而不是管理负载。
您正在寻找的东西叫做分布式文件系统。分布式文件系统允许您插入许多磁盘并且它可以扩展到多台机器。
DFS 将所有磁盘和机器组合在一起,让您可以像访问单个磁盘一样访问它们。不仅如此,如果您愿意,DFS 软件还可以为您处理文件复制。
我没有使用任何 DFS 的经验,但我读过一些关于 GlusterFS 的内容。我听说这很好,但请随时进行研究。
让我试着解释一下 GlusterFS 是如何工作的。看看这个 图表:
/ Disk 1
/ Machine 1 [Gluster Server] |
/ \ Disk 2
/
Nginx -> Gluster Client -> |
\
\ / Disk 1
\ Machine 2 [Gluster Server] |
\ Disk 2
无需深入了解太多细节,Gluster 客户端将允许您的 Nginx 服务器从单个目录访问机器 1 和机器 2,如 /media
。在这个 /media
目录中,您可以访问两台机器,就像所有数据都存储在 /media
中一样,即使它们存储在不同的机器上。
指南和教程:
- Setting up GlusterFS on Ubuntu - 很好的教程,解释了很多基本的东西。尽管它是为 Ubuntu 12.04 编写的,但我相信您可以根据您的 OS. 版本调整它
- Common DFS architectures explained - 一些 DFS 架构模式,您以后可能会觉得有用。