我想构建一个低成本的 Ra*san,它将为我们的社交网站托管图像(数百万张),每张照片有 5 种尺寸,每张图片分别为 3 KB、7 KB、15 KB、25 KB 和 80 KB。
我的想法是构建一个服务器,在 Raid 6 中配备 24 个消费者 240 GB SSD,这将为我提供大约 5 TB 的磁盘空间用于照片存储。为了实现 HA,我可以添加第二个并使用 drdb。
我希望获得超过150'000 IOPS(4K 随机读取)。
由于我们大多数情况下只具有读取权限,很少删除照片,因此我认为应该使用消费级 MLC SSD。我阅读了许多耐久性评论,只要我们不重写单元,就不会出现问题。
您觉得我的想法如何? - 我不确定 Raid 6 还是 Raid 10(更多 IOPS,成本 SSD)。 - ext4 是否适合文件系统 - 您会使用 1 还是 2 个 Raid 控制器,带扩展背板
如果有人意识到类似的事情,我会很高兴得到真实世界的数字。
更新
我购买了 12 个(另加一些备用)OCZ Talos 480GB SAS SSD 驱动器,它们将被放置在 12 托架 DAS 中并连接到 PERC H800(1GB NV 缓存,由 LSI 制造,带有快速路径)控制器,我计划使用 ext4 设置 Raid 50。如果有人对一些基准测试感到好奇,请告诉我您希望看到什么。
答案1
我会考虑使用 OpenSolaris、SolarisExp 11、OpenIndiana 或 Nexenta 实现的混合解决方案。混合池的成本要低得多,而且只需几千美元的 RAM,您就可以使用大多数普通旋转磁盘获得 150k+ IOPS。在 Nexenta,我们有许多客户正是这样做的。ZFS 是一个强大的文件系统,并且有足够的 RAM 和/或 SSD 用于额外的读/写缓存,您可以以相对较低的成本获得非常强大的解决方案。使用社区 Nexenta Core,您可以免费获得 18TB。当然,OpenIndiana 的新版本将允许许多相同的功能。除此之外,还可以使用 ZFS send/recv 进行快照、克隆和复制,您可以构建一个 SAN,以更低的成本让任何 EMC 都物有所值。许多 SSD 都不错,但还有其他选择,有些还不错。
答案2
使用 RAID6 而不是 RAID10。对于主要基于读取的 I/O 负载,当阵列未降级时,吞吐量应该相似,您会获得更好的冗余(任何R6 允许两个驱动器同时发生故障,如果两个故障驱动器位于同一支路上,R10 将无法正常运行(因此,在 4 驱动器阵列中,只有 6 种两个驱动器故障组合才能幸存下来,对于更大的阵列,我无法确定 4/6 这个数字如何扩展),并且除非您将驱动器排列在 4 驱动器子阵列中(见下文),否则您将获得更大的可用阵列大小。
您的空间计算不正确,对于 RAID10 来说肯定是这样。24*240Gb 在没有冗余(RAID0 或 JBOD)的情况下是 5760Gb。使用 RAID10,您将仅获得 2880Gb,因为(通常)每个块都有两个精确副本。如果将所有驱动器用作一个大型 RAID6 阵列,您将获得 5Tb(5280Gb,两个驱动器的奇偶校验信息分布在阵列中)但我个人会更加谨慎,并创建较小的 RAID6 阵列并将它们与 RAID0 或 JBOD 连接起来 - 这样,在更换驱动器时重建时间更短,并且在许多情况下您可以承受更多驱动器同时发生故障(每个支路可以有两个驱动器损坏,而不是总共 24 个驱动器中的两个驱动器损坏,而阵列不会变得无用)。每个支路有四个驱动器,您将获得与 RAID10 相同的空间。四个 6 驱动器阵列可能是一个很好的折衷方案(4 * 4 * 240 = 3840Gb 可用空间)或三个 8 驱动器阵列(3 * 6 * 240 = 4320Gb 可用空间)。
关于控制器:这些可能是 RAID 的单点故障。如果控制器坏了,您将同时丢失与其连接的所有驱动器。虽然这种故障非常罕见(随机损坏更常见),但如果发生这种情况,小心减少影响是没有坏处的。如果您使用 RAID10,请确保没有一对驱动器同时在同一个控制器上(这意味着至少有两个)。如果分成 4 个驱动器的 RAID-6 阵列,请使用四个控制器,每个控制器上都有一个驱动器或一个给定的阵列。当然,这假设您使用的是软件 RAID 和简单的控制器,这可能不太可能(您在驱动器上花费了这么多钱,您不妨购买一些不错的硬件 RAID 控制器来配合它们!)。
如果您还没有考虑备份解决方案,您也应该考虑一下。RAID 可以保护您免受某些硬件故障的影响,但无法保护您免受许多人为错误和其他潜在问题的影响。
答案3
只需买两个FusionIO 八进制卡并镜像它们 - 更简单,更快(但可能会稍微贵一些)。
答案4
150k IOPS 加上 4k 块的吞吐量为 585 Mb/s。请确保您的控制器和背板可以处理该吞吐量。至于 raid,请记住,它只能为您提供针对 SSD 故障的保护。控制器故障(或内存故障、处理器故障或服务器上任何其他单点故障)将导致您的数据无法使用。需要保持另一台相同的服务器同步,以避免停机并可能需要重新使用磁带。
如果第二台服务器像第一台一样装有 SSD,那么如果没有单点故障,购买支持 SSD 的集中式存储设备可能更便宜。但是,如果您使用真正的硬盘驱动器使第二台服务器保持同步,则可以节省大量更改而不会影响性能。由于大多数 IO 都是读取,因此驱动器上的负载将很小,除非主服务器处于离线状态。这将使您具有财务灵活性,可以购买多个复制目标,甚至可以在站点发生故障时将一些目标移到异地。