我们有一个六个ubuntu服务器的小群集。 我们对这些集群进行生物信息学分析。 每个分析需要大约24小时完成,每个核心i7服务器可以一次处理2个,作为input约5GB数据并输出约10-25GB的数据。 我们每周运行几十次。 该软件是用C / C ++编写的自定义perl脚本和第三方序列比对软件的大杂烩。
目前,文件由两个计算节点提供(是的,我们使用计算节点作为文件服务器) – 每个节点有5个单独安装的1TB SATA驱动器(无RAID),并通过glusterfs 2.0.1进行池化。 他们每个都有3个绑定的以太网pci千兆以太网卡,连接到一个d-link DGS-1224T交换机($ 300 24端口消费级别)。 我们目前没有使用巨型帧(不确定为什么,实际上)。 两个文件服务计算节点然后通过glusterfs进行镜像。
其他四个节点都通过glusterfs挂载文件。
这些文件都是很大的(4GB +),如果是这样的话,它们将被作为裸文件(无数据库/等)存储。
你可以想象,这是一个有机的增长没有深思熟虑的混乱,我们现在想要改善它,我们现在空间不足。 我们的分析是I / O密集型的,这是一个瓶颈 – 两台文件服务器之间的速度只有140mB / s,而客户端(只有单个网卡)的速度可能只有50mb / sec。 我们有一个灵活的预算,我可能会涨到5万美元左右。
我们应该如何花费我们的预算?
我们至less需要10TB的存储空间来为所有节点提供服务。 这样的文件服务器的CPU /内存有多快/多大? 我们是否应该使用NFS,以太网ATA,iSCSI,Glusterfs或其他? 我们是否应该购买两台或更多台服务器,并创build某种存储集群,还是只有一台服务器能够支持这么less的节点? 我们是否应该投资更快的网卡(比如,带有多个连接器的PCI-Express卡)? 开关? 我们是否应该使用RAID,如果是硬件或软件? 和哪个raid(5,6,10等)?
任何想法赞赏。 我们是生物学家,而不是IT专家。
我在计算机科学领域,我在生物信息学研究。 目前746在Biostars 🙂
我曾在一所大学(大约40台Linux服务器,300台CPU,100TB磁盘空间+备份,大约1T RAM总量–16至256GB内存的服务器)运行生物信息学计算设备。 我们的集群有32个8核心计算节点,2个头节点,我们正在扩展2个48核心计算节点。 我们通过NFS将文件提供给计算节点。
我会build议切换到NFS您的情况。
我们考虑切换到Gluster,Lustre和Samba,但决定不使用这些。
我有几个有关NFS的主要提示:
我们目前的集群是3年前购买的,所以它不使用SAS,而是拥有一个扩展的FiberChannel驱动器和SAN控制器。 这一切正在改变,我们购买的所有新存储都是SAS。
我会build议考虑SAS存储。 SAS正在取代FiberChannel作为一种更便宜,更快,更好的解决scheme。 最近我对所提供的不同解决scheme进行了研究。 方便的我们看的选项是logging的服务器故障: 什么是SAS外部存储选项(Promise,Infortrend,SuperMircro,…)?
我们最近订购了RAID公司的24TB 6Gb SAS-6Gb SAS存储系统。 为了存储,我们付了12000美元。 这个命令应该在几个星期之后。 这是一个没有单点故障的系统 – 所有组件都是冗余的,如果有任何组件发生故障,则会自动进行故障切换。 它连接到2个服务器,每个服务器使用arrays的不同分区。 这是一个交钥匙的解决scheme,所以一旦出货,我们只需要连接它,打开电源,它就可以工作(RAID6分区将安装在Linux上)。 该命令还包括服务器和RAID公司正在build立的Linux Debian的那些没有额外的成本。
不幸的是,如果你做生物信息学基础设施的操作,你可能需要成为一个存储大师。
对于您的10TB分区,selectRAID6 – 2驱动器可能会失败而不会丢失数据。 将2TB硬盘重build为热备用需要24小时,另一个硬盘在此期间可能会失败。 我有两个驱动器在16驱动器arrays中同时失败。
考虑将一个驱动器专用于arrays中的热备份。 当你有更多的16驱动器,那么我会说一个热备件是必须的。
如果硬件在专用NFS服务器上失败,可以考虑一个行动计划。 我会保持一个双胞胎作为一个计算节点作为原始NFS服务器的潜在替代品。
最后,我不得不提到我们的文件服务器正在运行OpenSolaris(听起来不寻常 – 我知道)。 OpenSolaris(对我们而言)具有出色的服务器硬件支持(FiberChannel,IniniBand,…)。 build立一个NFS服务器需要1个小时 – 所有步骤都是一个简单的步骤:安装操作系统,通过NAT更新,设置networking,创buildzfs池,创buildzfs文件系统,共享NFS。 Sun是1984年开发NFS的人,OpenSolaris非常擅长服务NFS。 使用OpenSolaris的主要原因是ZFS–一个很好的生物信息文件系统 。 我喜欢的一些function:
zfs send )。 在你的NFS服务器上使用Linux会很好 – 在这种情况下,坚持使用XFS或Ext4。
你的预算不会让你的SAN类硬件很远,但你应该能够通过加强你的硬件来获得更好的性能。 获得一个体面的RAID控制器,购买更多的磁盘,得到一个更好的交换机,也许一个好的多端口NIC(得到体面的服务器级的,如英特尔PRO 1000 GT或ET的)。
如果您对IO模式的描述是正确的,那么您的读写比率为15:85,因此您需要使用RAID 10来提高SATA磁盘的吞吐量。 如果您只是简单地重新configuration当前的RAID-5驱动器(或者在这种规模下更合适的RAID6),那么考虑到您的写入偏见,性能会下降。 尽pipeRAID-10将使磁盘的可用容量减半。
获得上述所有的信息,并且有足够的磁盘以5千美元的价格提供RAID 10中的10TB是可行的,但这不是一个无风险的练习。 在这个问题中有一些非常有趣的选项,如果你对风险感到满意,并且build立你自己的解决scheme,那么这个答案是值得考虑的。
然而,我对你的主要build议是开始问自己(或谁签署支票)是多less存储故障实际上会花费您的业务,以及您是否适应这种风险。 5千美元的预算可能只是让您提高性能,但是您正在谈论的是10TB的假设是业务关键数据和处理能力,这些数据和处理能力都是基于单点故障的基础设施。 现在可能是一个很好的时机,仔细考虑这个基础设施的重要性,确定是否可以获得足够的预算来购买合适的入门级SAN或NAS解决scheme。
你的处理任务是自行开发的吗? 他们是通过分配每个节点来处理一些数据块吗?
如果是这样的话,将stream程更接近数据可能更有效,而不是将数据提供给stream程。 这并不难,但是需要一个与构build服务器不同的思维过程。
首先,在每个节点上放一些驱动器。 也许不是RAID,只是每个文件系统。 拆分所有节点上所有磁盘上的数据,并在保存任务所需数据的节点上启动任务。 尽量减less节点间传输。
当然,如果你的任务需要不可预测的数据部分,这些都不会起作用。
通常这种处理是关于从数据中提取信息 – 但是你的输出比input要大几个数量级?
首先要看的是如何使用数据? 大多数遗传分析和一定程度上,使用有限元分析的蛋白质折叠依赖于顺序访问大数据文件 – 与随机访问相比。 所以等待时间不像磁带带宽那么重要。
因此,就组织磁盘而言,您可能需要尽可能多的磁盘分区,例如RAID 5或6。
如何将其连接到处理节点取决于您的预算。 如果你有很多钱,那么在一个交换架构的SAN中设置多个虚拟磁盘,并直接连接处理节点是一个很好的select。
对于一个便宜的解决scheme(即在您的预算),每个处理节点的本地存储是要走的路。 重要的是,您将处理I / O保持在networking之外(如果有必要,如果没有SAN,则使用networking在节点之间复制数据)。 如果你可以在本地映射数据,那么在处理节点上有大量的内存将有助于caching。
当然,如果你的预算非常严格,那么你需要将这些本地磁盘安装在RAID 5中。 另外,如果可能的话,在处理时将输出缓冲到本地磁盘,而不是直接写回服务器。
HTH
如果可以避免的话,我认为你不太可能不想使用ATAoE,iScsi或FC。 这些都是块存储技术,并且更好地从公用磁盘池向单个服务器提供磁盘空间。 它们不是为了在客户端机器间轻松共享数据而devise的,除非您运行一些特殊的软件来处理与元数据pipe理器等共享的文件系统。
NFS是基于文件的,旨在为您在多个服务器之间共享文件系统,并且是免费的。 Aleksandr正在向正确的方向发送你,如果你需要做什么Javier说,把数据移动到进程进行计算。 如果你想要任何工作能够去任何节点,那么NFS是要走的路。 如果您可以预先将数据填充到节点并将需要特定数据的作业发送到具有该数据的节点,则吞吐量可能会更好。 这就是hadoop,map / reduce的方式。 例如,如果您将鼠标基因组预先加载到其中一个节点上,并且某人对该基因组进行了爆炸处理,则会将该作业发送到已有数据的节点。 没有实际的数据移动。 然而,这可能会在该节点上产生瓶颈,如果它所拥有的数据集是stream行的,并且在其他节点闲置时可以备份作业。
我最近一直在研究的一些研究人员已经去了一些“胖”的节点,或集群在一个盒子里。 一个买了一个48核心(4 12核心处理器)基于AMD的系统,其中128公斤的RAM约15000美元。 他的algorithm是高度平行的,所以更大的核心数量对他来说是有意义的。 有了这么多的内存,Linux就有很大的空间用于文件caching,所以后续读取该机器上的multigig数据文件的速度非常快。 而且,他用他的raid卡,他获得了大约300兆每秒的本地存储。 我并不是说这台机器可以适用于所有人,但是对他来说是有效的。 在我们给他使用之前,为了好玩,我在该机器上testing了一个并行bzip作业,它将一个3gig文本文件压缩到165meg,大约需要4秒。 (文件被caching在RAM中)。 相当活泼。
仅供参考,您将会看到我们之前称之为高芯数机器的疯狂加载平均数。 在这台机器上平均负载20+是相当常见的,它的交互式性能还是相当不错的。