存储大量照片(1.5 亿张)并提供给网络

存储大量照片(1.5 亿张)并提供给网络

对于实际项目,我必须设置一个高可用性存储服务器,可以存储和发布 (http) 7 种尺寸的 1.5 亿张照片,这意味着总共有 10.5 亿个文件。对于每张照片,我们需要总共 200 KB 的空间来存储所有 7 种尺寸的它们,总共 28 TB。

实际上我有两台可用的服务器(2x E5620、12GB Ram、Raid 控制器 1 GB NV 缓存、2x160 GB 操作系统磁盘),两台服务器都连接了带有 12x3TB SAS 磁盘的存储阵列(DAS)。

我不确定我计划的设置是否真的是最好的解决方案:

操作系统:RHEL 6

磁盘阵列:Raid 6、ext4/rsync 或 gfs2

HTTP 服务器:Apache Traffic Server 3 或 nginx

这样,两个服务器都可以存储和发布照片。

有什么建议吗?如果需要,我可以添加更多服务器。哪种文件系统是正确的选择?Raid 6 可以吗?

答案1

编辑:误读了存储要求!

我会使用至少 2+k+n 台服务器。

  • 2 个服务器作为负载均衡器keepalived,以纯故障转移方式运行(或任何您喜欢的方式)——我猜有 1GigE 连接可用,如果您使用直接返回 IPVS 配置,那么它可以处理大量简单的 GET 请求
  • k 服务器是前端 HTTP 服务器,HTTP 服务器将是 nginx,并带有一些用于本地缓存的额外分区。k 取决于您预期要处理的流量量(请参阅未决问题以下)
  • n 使用 glusterfs 设置服务器来存储数据。这样,您可以从 2 个 GlusterFs 服务器开始并测试您的设置。由于您只存储相当小的文件,因此无需将单个文件条带化到多个服务器,GlusterFS 应该可以很好地完成。前端的本地缓存应该能够克服任何速度问题,因为文件访问量通常小于 5%(但我不知道您的使用情况——这只是胡乱猜测)。n 很容易计算。是的,这只是一些例子,我没有写这个,因为我认为你做不到,但我发现自己经常忘记显而易见的部分……
    • 假设一台存储服务器有 8 个 500GB 磁盘。每台服务器大约有 6 * 500GB 存储空间 (RAID6) 3 TB,
    • 10 台服务器就是 30TB 的存储空间(预留 2TB 以备初期增长)。现在你还没有冗余,
    • 因此,添加另外 10 台服务器,您可以使用 GlusterFS 配置它以保留每个文件的 2 个副本,这样任何存储服务器都可以随时出现故障,而不会发生任何不好的事情。
    • 只需添加更多服务器即可轻松扩展,只需熟悉 GlusterFS 即可一切顺利。
  • 在前端安装存储服务器:开始愉快地提供内容

开放式问题(以及关于如何掩饰自己的问题): (不知道你是否清楚这些要求)

  • 您预计有多少流量(需要确定前端数量和上行带宽)
  • 高峰时段以及每秒的请求数——每天的平均流量很不错,但如果所有流量都发生在一天的 6 小时内怎么办
  • 预期增长(传出流量和总数据量)
  • 日志文件去哪儿了?——听起来好像有人想对所有文件的去向进行统计,你也需要为这些文件留出空间。
  • 您的管理层是否愿意花几块钱来设置实验室?如果不愿意,请问他们,如果您必须在实时硬件上尝试新配置,他们可以承受多少停机时间。询问他们一分钟的停机时间要花多少钱。如果他们不知道或不给您预算,他们很容易就能找到答案

无论如何,我都会远离那些需要同步文件的解决方案,因为这听起来像是你想把文件放在某个地方并立即可用。将文件放到服务器上 15 分钟后才可用并不是最理想的,而且在大多数情况下会花费真金白银。

笔记我假设你有一个可以容纳 28TB 的备份系统,如果没有,则添加另一个具有所需冗余的存储系统来处理最坏情况。添加一些异地备份来处理如果你忘记了一些最坏情况会发生什么

听起来并不太复杂。有趣的问题是:你的管理层愿意花这笔钱吗?

答案2

为什么不存储一个大文件并让服务器根据需要将其转换为请求的大小,然后将其存储在缓存中?还可以考虑运行多个前端服务器(通过负载平衡器)来处理请求,然后可能使用 NAS 或其他几个服务器来处理静态内容。您需要的前端数量取决于您将获得多少流量(youtube 容量或仅存储内容以供偶尔访问)。

相关内容