如何使用 LVM + Raid5 提高数据安全性?

作者: 王炳明 分类: Linux 教程 发布时间: 2021-07-06 10:24 热度:1,912

如何 LVM + Raid5 ?

有两种方式:

  1. 先对多个盘做 raid5,再用 raid 盘做 VG ,最后创建LV
  2. 先对多个盘做 VG ,先创建 raid5 类型的 LV

第一种方法

创建 raid5 盘

$ mdadm -Cv /dev/md0 -a yes -n 3 -x 1 -l 5 /dev/sd{ c,d,e,f }
  • -C:创建 /dev/md0 的 Raid 设备
  • -a:采用标准格式建立磁阵列
  • -n:指定工作设备数
  • -x:指定空闲设备数,即热备盘
  • -l:使用 raid 级别,5 表示使用 raid5

查看 raid 状态

$ mdadm -D /dev/md1
$ cat /proc/mdstat 

第二种方法

基于 lvm 创建 raid5

$ lvcreate --type raid5 -i 3 -L 1G -n lv1 wbm-vg
  • -i:指定条带数
  • -L:VG 大小
  • -n:lv 的名字

做RAID5必须要3块以上的硬盘,其使用率是N-1的存储空间,1 表示冗余盘,用来存储奇偶校验码。

以一台机器为例,上面有5个hdd盘,-i 表示用几个盘来做条带,存储的全量数据。i 必须至少为 3。

  • -i 4 ,就是4个盘存数据,剩余一个盘存校验码。
  • -i 5,命令会报错,会创建不了。

如何模拟掉盘?

使用如下这条命令可以模拟掉盘

# sd? 换成具体的硬盘标识
echo 1 > /sys/block/sd?/device/delete 

执行完成后,lsblk 就看不到这块盘了。

但是这种应该是在软件层面屏蔽掉该盘,并不是真正的禁止掉数据的读写。

下面做个实验可以验证这一猜想

先创建普通的两个 lv,每个 lv 占用一个盘。

  1. 往第一个lv里写入数据后,不取消挂载,模拟掉盘后,仍然可以读写数据。
  2. 往第二个lv里写入数据后,取消挂载,模拟掉盘,无法再挂载。

意思是,如果磁盘仍然在使用中,这种模拟掉盘的方式并不会影响读写,但如果这块盘取消挂载后,再挂就挂载不上了。

如果这块盘是虚拟机在使用,那么模拟掉盘,不影响虚拟机的正常使用,但如果虚拟机发生重启了?那就没办法再用了。

安全性与读写性能对比

安全性

拿三个对照组来说明 raid5 的效果:

场景 读写情况
普通的 LV,占用单独的硬盘 掉盘后,可读不可写
strip(条带数为 3) 掉盘后,可读不可写
strip(条带数为 3) + raid5 掉一块盘后,可读可写,掉两块盘后,可读不可写

性能验证

验证方法使用 dd 这个命令,往 lv 写满 100G的数据,以所耗的时间长短作为依据

场景 时间
普通LV 9m45
strip (条带数3)的LV 3m36s
raid5+strip (条带数3)的LV 5m7s

综合以上两个表格:

  • strip 条带 –> 保证了读写的最高性能,但无法提高数据的安全性
  • raid5 –> 保证了数据的安全性,但是并不能提高读写的性能
  • strip + raid5 –> 综合二者的优先,作了一个折中,既能提高读写性能,也能提高数据安全性。

遗留问题

  1. 掉了两个盘后,重启机器,发现lv无法使用,在 /dev/ 目录下看不到
    $ lvscan
     WARNING: Device for PV L3twus-E6cD-eFs1-Ij6e-cvSe-kMga-jzTojt not found or rejected by a filter.
     Couldn't find device with uuid L3twus-E6cD-eFs1-Ij6e-cvSe-kMga-jzTojt.
     inactive          '/dev/hdd-volumes/lv-test' [<10.01 GiB] inherit
    $ lvchange -a y hdd-volumes/lv-test
     Activation of logical volume hdd-volumes/lv-test is prohibited while logical volume hdd-volumes/lv-test_rimage_0 is active.
    

参考阅读

文章有帮助,请作者喝杯咖啡?

发表评论