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