使用24x SSDarrays设置低成本图像存储服务器以获得高IOPS?

我想build立让我们把它命名为一个低成本的Ra *圣将主办我们的社会网站的图像(数百万),我们有5 KB大小的每张图片的3 KB,7 KB,15 KB,25 KB和80 KB的每张照片。

我的想法是在Raid 6中构build一个24x用户240 GB SSD的服务器,这将为我提供5 TB的磁盘空间来存储照片。 有HA,我可以添加第二个,并使用drdb。

我期望获得超过150'000 IOPS(4K随机读取)。

由于我们大多只有读取权限,很less删除照片,我认为与消费者的MLC SSD。 我阅读了许多耐力评论,只要我们不重写单元格,就没有看到问题。

你对我的想法有什么想法? – 我不确定Raid 6或Raid 10(更多的IOPS,成本SSD)。 ext4文件系统是否正常 – 您是否使用1或2 Raid控制器,以及Extender Backplane

如果有人已经意识到类似的事情,我会很乐意得到真实世界的数字。


UPDATE

我已经购买了12台OCZ Talos 480GB SAS SSD硬盘,将它们放置在一个12-bay DAS中,并连接到PERC H800(1GB NV Cache,LSI制造的快速path)控制器,我计划安装Raid 50与ext4。 如果有人想知道一些基准,让我知道你想看到什么。

我会考虑使用OpenSolaris,SolarisExp 11,OpenIndiana或Nexenta可以实现的混合解决scheme。 混合池的成本要低得多,而且价值几千美元的内存,你将拥有大部分普通的旋转磁盘的150k + IOPS。 在Nexenta,我们有许多客户正是这样做的。 ZFS是一个健壮的文件系统,并且具有足够的RAM和/或SSD以实现额外的读/写caching,您可以以相对较低的成本获得非常可靠的解决scheme。 Nexenta Core是社区,你可以免费获得18TB的费用。 当然,OpenIndiana的新版本将允许很多相同的function。 使用ZFS send / recv添加到这个快照,克隆和复制中,您可以构build一个SAN,让EMC以更低的成本运行。 很多固态硬盘都不错,但还有其他select,有些不是一半。

在RAID10上使用RAID6。 对于主要基于读取的I / O负载,当arrays不降级时吞吐量应该类似,您可以获得更好的冗余( 任何两个驱动器可以与R6同时失败,如果两个故障驱动器在同一条path上,则R10不能处理(所以只能在4个驱动器arrays中的六个驱动器故障组合中的四个中存活),我不确定这个4/6数字是如何扩大arrays的),并且可以获得更大的可用性数组大小,除非将驱动器安排在4个驱动器的子arrays中(见下文)。

您的空间计算已经结束,当然是RAID10。 24 * 240Gb是5760Gb,没有冗余(RAID0或JBOD)。 使用RAID10,您将只能得到2880Gb,因为每个模块都有两个完全相同的副本。 如果你把所有的硬盘作为一个大的RAID6arrays,你将得到你的5TB(5280Gb,两个驱动器的奇偶校验信息分布在arrays上),但我个人会更偏执,创build更小的RAID6arrays,并joinRAID0或JBOD – 这样,更换驱动器的重build时间就会缩短,并且在许多情况下,您可以继续存在更多的驱动器出现故障(每条腿两个驱动器可能死机,而不是24个驱动器中的两个驱动器,而arrays无用)。 每条腿有四个驱动器可以获得与RAID10相同的空间。 四个6驱动器arrays可能是一个很好的妥协(4 * 4 * 240 = 3840Gb可用空间)或三个8驱动器arrays(3 * 6 * 240 = 4320Gb可用空间)。

关于控制器:这些可能是RAID的单点故障。 如果控制器死亡,您将立即失去连接到它的所有驱动器。 虽然这样的失败是非常罕见的(随机腐败更为常见),但如果发生在您身上,应该小心减less影响。 如果你使用RAID10,确保没有一对驱动器都在同一个控制器上(这意味着至less有两个驱动器)。 如果拆分成4个驱动器的RAID-6arrays使用四个控制器,并且每个驱动器或一个给定的arrays。 这当然假定你正在使用软件RAID和简单的控制器,这可能不太可能(你在硬盘上花费了很多,你也可以得到一些像样的硬件RAID控制器)。

如果你还没有,也应该考虑备份解决scheme。 RAID将保护您免受某些硬件故障,但不会出现许多人为错误和其他潜在问题。

只要购买两张FusionIO Octal卡就可以了,而且更简单,速度更快(但是可能会更贵一些)。

回答您的关键问题:

  1. RAID 6 vs. RAID 10:如果您将SSD用作主存储器,几乎可以肯定不用担心IOPS。

  2. SLC与MLC:有微妙的差异。 如果你打算使用MLC,我会build议购买英特尔。 英特尔320系列有一个SMART计数器,您可以使用它来跟踪磨损级别百分比,并在驱动器发生故障之前更换驱动器。

但是,如果您想要使用SSD以可靠的方式提高存储性能,您可能需要在Nexenta OS(或者可能的FreeBSD,不确定开发状态)上查看ZFS:

  1. ZFS允许您构build使用SSD作为大容量读取(L2ARC)和写入(ZIL)caching的传统磁盘“RAID-Z2”(有点像RAID-6)arrays,从而让您获得所需的性能优势因为没有全闪存arrays的成本。

  2. 经常访问的块将从SSD中读取,较less使用的块仍将从磁盘读取。 所有的写操作都会首先进入SSD,并且在arrays方便的时候写入磁盘。

  3. 因为您将需要更less的SSD,您将购买更高质量的设备,而且如果您从OCZ(或其他)的消费级MLC设备构buildRAIDarrays,则不会出现预期的灾难性故障。

  4. 即使你不使用高质量的设备,后果也不那么严重。 如果您为ZFS L2ARC使用MLC设备,并且失败,则您的数据仍保留在磁盘上。

具有4k块的150k IOPS是585 Mb / s的吞吐量。 确保你的控制器和底板可以处理。 至于突袭,请记住,防止SSD故障的保护是它会买你。 控制器故障(或内存故障,处理器停机或服务器上任何其他单点故障失败)将导致您的数据无法使用。 保持另一个相同的服务器同步将需要避免宕机,并可能不得不回到磁带。

如果第二台服务器像第一台服务器一样充满固态硬盘,则可能会使其成本更低,因此购买支持SSD的集中式存储设备(如果没有单点故障)便宜得多。 但是,如果使用真正的硬盘驱动器保持第二台服务器同步,则可以节省大量的更改,而不会影响性能。 由于大部分IO是读取的,除了主服务器处于脱机状态时,驱动器上的负载将是最小的。 这将允许您在财务上灵活地购买多个复制目标,甚至可以在出现站点故障时将其移动到非现场。

您可以完全避免RAID控制器问题,通过使用ZFS – 它可以检测和纠正无声的损坏(通过ECC检查的数据错误),这实际上没有RAID控制器能够(检测是,但不是修复),并在一个大驱动器(2TB +),每个驱动器每年可能会出现1-2次错误。

不幸的是,如果你想要与供应商支持,你需要使用Solaris。 一些Linux厂商支持它,但它仍然是一个testing版产品(也就是说,我在linux上使用它,我发现它实际上不可能杀死,直到热的时候把几个驱动器从它们的托架中拉出来,最坏的情况是arraysclosures向下 – 但没有数据损坏)

把所有这些作为一个昂贵的磁盘的单个服务器,可能不是最好的答案。 鉴于您的预算和需求,我会build议看看STF。 它被devise成日本最大的博客服务之一的图像存储:

https://github.com/stf-storage/stf