我正在运行一个存储系统。容错是在应用程序级别处理的(文件存储在多个服务器甚至数据中心上)。
因此,我不需要甚至不想要一台服务器内的冗余(Raid 5 就可以了,但我运行的是商品预算服务器,所以任何资源密集型或需要昂贵硬件的东西都是不好的)。
目前,我正在使用 LVM 在服务器的所有驱动器中创建一个卷组,然后在其上放置一个大卷。
到目前为止,一切运行良好。
问题是我希望将来能够使用包含多达 40 多个驱动器的更大的服务器。
一个驱动器发生故障并因此破坏整个卷组的可能性高得令人无法接受。数据确实存储在其他地方,可以通过应用程序恢复,但通过互联网对等恢复 100+ TB 的数据非常昂贵,而且需要很长时间。
如果一个驱动器发生故障,我只会丢失存储在该磁盘上的文件。
如果文件可以作为一个整体存储在磁盘上,并且均匀地分布在多个磁盘上(出于性能原因并减少一个驱动器发生故障时需要恢复的数据量),那也将是完美的。
有什么东西能满足我的需要吗?
我认为这是大型 lvm 卷组中一个非常普遍的问题。
一个可以呈现“合并视图”并通过保险丝安装的小程序将是完美的。
不幸的是,我的应用程序不够灵活,无法处理一台服务器内的多个卷。
我知道 lvm 有恢复方法,但说实话,我真的不想在生产系统中运行它们……
另外:lvm 如何在卷组中的多个设备上“传播”数据?它会将数据添加到第一个设备直到其已满,然后再启动第二个设备吗?还是更像是随机地在某个地方?
编辑:
这怎么不是一个真正的问题???这个问题不是关于“什么是好的方法......”这个问题也不是关于容错冗余。
我的问题非常具体。只是有点不寻常。这就是为什么我需要提出问题而不是将其输入到谷歌中。
我可以使用什么程序将多个驱动器合并为一个大卷,并且如果一个驱动器发生故障,只会丢失存储在一个驱动器上的文件。
Raid -> 不会这样做。Raid 可以存储冗余信息以防止丢失。Raid 还可以将多个驱动器合并为一个。
想象一下,一个小秘书拿到一个文件,把它放在有空闲空间的驱动器上。如果你请求它,他会搜索它或记住它在哪里,并从那个驱动器把它给你。
如果一个驱动器不见了,小秘书就会道歉并说他不再有该设备上的文件,但他可以将所有其他文件给你。
答案1
答案2
这可能有点牵强,但既然你只关心特定存储单元上文件的完整性,那就看看此处提到了 ZFS 文件系统复制选项并在 Oracle 网站上进行了详细说明(作为“副本块”)这里和这里。这主要侧重于文件级保护,但可能与您的要求一致。
如今,一些 Linux 发行版已支持 ZFS,因此 Solaris 衍生的操作系统不再是严格的要求。
答案3
没有如果,没有但是——您需要在实际的机器上使用某种形式的 RAID,我知道您正在进行整个复制工作,但您不能指望它能够处理单个驱动器故障——即使您只有大量的 R6 阵列,也比没有好。
除此之外,听起来你只需要一个集群文件系统,类似于 gluster、hadoop dfs 或类似的东西。
答案4
如果您在应用程序级别处理容错问题,我会改用更便宜/更小的服务器。如果应用程序分布正确,这意味着它将运行得更快。
另一种选择(不确定是否可行)可能是运行指向每个磁盘的多个应用程序实例。
我认为 Raid 阵列不太适合您的使用情况。
问候。