我正在寻找一个分布式的,容错的networking存储系统,它暴露了客户端上的块设备(而不是文件系统)。
因此,理想情况下,这个架构与moosefs( http://www.moosefs.org/ )非常相似,但不是公开使用熔丝客户端装载的真实文件系统,而是暴露客户端上的块设备。
我知道iscsi和drbd,但似乎并没有提供我正在寻找的东西。 还是我错过了什么?
基于上述要求, Ceph可能就是你以后的事情。 http://ceph.newdream.net/
Ceph提供分布式,符合POSIX的文件系统,您可以使用Rados块设备作为块设备进行安装。 这是直接在现代Linux内核(2.6.37 +)中实现的。
甚至还有一个Qemu / KVM存储驱动程序 ,这意味着您可以将Ceph文件系统安装为虚拟机磁盘。
主要的networking托pipe公司Dreamhost ( http://dreamhost.com/ )依靠Ceph。
首先我要说的是,您可能需要重置对复杂性的期望。 单独针对你的问题的主题包括:
其中的每一个通常都是一个至less适度复杂的话题。 把他们三人结合在一起,而你没有一点工作就不能完成。
我认为你所缺less的东西是可以实现你所有要求的东西,而且简单易行。 如果不是完全矛盾的话,你们的一些要求很难一起实施。 个别可以完成没有太多的困难,但把它们放在一起就是棘手的地方。
我将贯穿每个要求并提供意见:
客户端的块设备应该同时写入多个存储节点
这可以通过在引擎盖下使用冗余存储来完成。 冗余可以在“存储节点”级别使用冗余本地存储(RAID等)完成,或者在networking级别通过将数据复制到多个节点来完成。
只要不是所有支持它的存储节点都closures,客户端的块设备就不应该失效
与以前一样,这很容易在存储冗余的情况下完成。 这部分将需要在“networkingRAID1”types设置中实现存储。
当存储节点失败或被添加/移除时,主服务器应自动重新分配存储的数据
这是事情变得困难的地方。 你特别说明你想要一个块设备输出。 这使得这个function在后面更难,除非你正在复制整个块设备。 使用块设备时,服务器端function不能查看文件并复制构成该文件的块,就像它提供文件系统接口时一样。 这使得服务器端将整个块设备作为一个整体进行处理,并且需要将每个块全部复制到一个单独的位置,或者需要实现许多古怪的智能来获得良好的可靠性,一致性和性能。 很less有系统现在就实现这样的function。
一个主(仅用于元数据)是好的
作为一个概念,当处理文件系统中的文件块时,这比块设备更有效。 大多数实现类似这样的系统都是通过文件系统接口或伪文件系统接口来实现的。
一般来说,你正在做出决定。 您将远程存储作为文件系统,在这种情况下,您将访问高级界面,并允许存储方为您做出决策并处理底层细节,或者将存储作为块设备,在这种情况下, 你要负责这些function ,或者至less大部分function。 您将存储级别降低,并为您实现这些低级function(分布式,容错等)留下了更多的工作。
此外,您还需要记住,一般来说,容错和高性能是与给定的一组硬件相同频谱的两端。 在增加冗余时,会降低性能。 最简单的例子是如果你有4个磁盘。 您可以将所有4个磁盘分成RAID0以获得最佳性能,也可以在所有磁盘上复制相同的数据4次。 前者会给你最大的性能,后者最大的冗余。 在这之间有各种各样的权衡,比如4个磁盘RAID5,或者我个人的偏好,4个磁盘RAID10。
如果我把一些符合要求的东西放在一起,我可能会导出所有带有iSCSI或ATA以太网(AoE)的磁盘,并使用MD软件RAID或LVM镜像(或两者结合)来获得冗余级别我需要。
是的,有一些手动的工作来设置和维护它,但它可以让你精确地控制事物达到容错和性能要求的水平。 DRBD是另一个可以融入其中的select,但是如果你要处理的不仅仅是一些“存储节点”,我可能会把它传递下去。
更新:上面假设你想要build立你自己的解决scheme。 如果您的预算足够大,可以购买SAN / NAS解决scheme,虽然可能不会像上面所描述的那样,但可以将其视为具有相同function的黑匣子。
您正在描述一个SAN。 如果你想自己构build它,你可能可以,但是我不能帮助你,而不是指向ZFS的方向。 如果您最终从存储供应商那里购买一个,您将需要改变您描述的方式。 以下是你所要求的细节:
如果我更了解您的环境,我会将其添加到您的列表中,但这将能够帮助您入门。