lvmraid vs. mdadm

我在改进 Gluster存储底层文件系统 ,对原有 CentOS 7 部署Gluster 11 改进为 LVM on Software RAID,以实现清晰的GlusterFS brick ,支持GlusterFS的Scale out。

这里有一个 Linux 软RAID 方案的选择问题: 究竟应该直接选择 LVM RAID( lvmraid ) 来完成一个软件层包含RAID+LVM ,还是采用 mdadm 软RAID构建 构建稳定的 Linux 软RAID 再在其上构建LVM ?

一句话概括

备注

我在生产环境采用 mdadm 软RAID构建 构建稳定的 mdadm构建RAID10 ,然后在软RAID之上使用 Linux LVM逻辑卷管理 构建卷管理,最终部署 在软RAID10 + LVM上CentOS 7 部署Gluster 11

个人的实验室环境,我将模拟测试 LVM RAID( lvmraid ) 进行对比和学习

LVM和mdadm差异

LVM和 mdadm 软RAID构建 都是操作系统级别提供的存储管理软件:

  • LVM是磁盘控制器和操作系统之间的抽象层: 将多个磁盘空间合并为一个卷,然后划分为多个逻辑磁盘

  • LVM可以提供动态添加磁盘容量功能,但是LVM自身不提供任何数据冗余

    • LVM使用DM (Device Mapper)驱动程序来实现RAID,

    • LVM也支持绕过DM来创建RAID,但是通常性能较差

    • 虽然LVM通过 条带化逻辑卷管理(LVM) 可以实现类似 RAID 0 的条代化性能优化(数据直接分发到多个磁盘),但是也带来了限制: 不得不使用正在使用磁盘数量的倍数来扩展磁盘,并且添加新磁盘组是,条代化不会同时在所有磁盘上进行,而是在每个磁盘组内部进行

    • 不过 LVM RAID( lvmraid ) 提供了统一的命令行接口,使用较为方便

  • mdadm 软RAID构建 主要就是提供冗余,直接和磁盘通信并且在物理层面上在磁盘之间分发数据

    • 多个磁盘组成 mdadm 软RAID构建 RAID阵列在操作系统中显示为单独的磁盘驱动器

    • 可以按照常规磁盘驱动器相同方式进行操作

    • mdadm 在内核级别添加了RAID支持(而LVM是使用MD驱动程序来处理磁盘)

    • mdadm 软RAID构建 构建的软RAID具有最高的性能,因为它们没有任何其他驱动程序和实用程序形式的“中间人”来向驱动器发送命令

    • 通常应该使用 mdadm 来构建软件RAID,更快,更可靠

结合LVM和mdadm

../../../_images/mdadm-lvm.webp

推荐方案是采用 LVM on software RAID :

  • 物理磁盘首先通过 mdadm 软RAID构建 构建出 Linux 软RAID

  • 在软RAID之上,采用 Linux LVM逻辑卷管理 实现逻辑卷的划分和调整,可以充分使用磁盘空间并实现quota

  • 注意: 当结合 软RAID + LVM ,必须将软RAID建立在底层,在软RAID之上构建LVM卷,否则会导致性能问题,并且非常难以维护(磁盘替换困难)

参考