我正在发布一个视频托管网站(文件来自网络摄像头)每个文件大小将小于 1 mb。我希望能够轻松扩展我的存储容量并实现高可用性。我将使用 OVH 的专用服务器,该服务器有 2 个 NIC(1 个用于 WAN,1 个用于专用网络)我需要转码视频文件,将用户信息存储在 mysql 中,并使用 apache 作为前端网站。我将从 12 TB 存储开始;未来 6 个月将需要 100 TB。这甚至会是聚合每个服务器带宽的好机会。我正在考虑使用 proxmox 进行虚拟化或使用 glusterfs 进行存储,并在 HA 中使用 2 个服务器来运行 mysql + apache。最好的选择是什么?
答案1
虚拟化在这里并没有给你带来太多好处——那就是让一台大机器像几台小机器一样运行。你想要一堆大机器。将主机的物理存储拆分到一堆虚拟机上只会让你头疼。它还会使在集群文件系统中使用冗余变得更加困难,因为你需要确保它们不会出现在同一个物理磁盘上。
根据流量情况,最佳设置如下:
- 提供网页服务的主要网络服务器。这可能是负载均衡器后面的一台或多台机器。
- 数据库服务器,根据负载,可能是与 Web 服务器相同的机器,也可能是单独的机器或集群。
- 存储服务器。在每个服务器上运行轻量级 Web 服务器(如 nginx),然后直接从那里提供文件。每个服务器都有自己的 URL 来提供文件。
- 转码服务器 - 它将获取源文件,决定将输出存储在哪个存储服务器上,并将其记录在数据库中。将其拆分到单独的服务器上意味着在视频编码时不会使网站速度变慢。
当你开始时,这些都可以在同一对机器上 - 随着你的成长,将它们分成单独的机器。
集群文件系统可能听起来更简单,但所有流量都会通过主服务器,从而限制你。
我怀疑你也低估了如果可以避免的话管理集群文件系统是多么的痛苦。集群文件系统在出现故障之前都很好。它们在增加更多冗余方面确实有优势。如果你需要将大量文件呈现为单个文件系统,那么它们是唯一的选择 - 但我认为你不需要为此增加复杂性。
单独的存储服务器很容易找到视频(只需在数据库中记录 URL 或它所在的服务器)。决定将新文件存储在哪里可能很简单,只需每个服务器运行一个小脚本,将其可用磁盘空间记录到数据库表中。一个查询就会告诉您哪个服务器拥有最多的空间,然后您可以通过 rsync 或 scp 将其保存在那里。添加新服务器也很容易 - 一旦它将自己记录在该表中,视频就会开始进入它。如果您需要冗余,请选择前两个服务器,复制到两者,并记录每个视频的主服务器和备用服务器。