★RAID 简介

◇啥是 RAID?


  RAID 是洋文“Redundant Array of Inexpensive Disks”的缩写,中文称之为“磁盘冗余阵列”。
  搞这个玩意儿的好处包括两方面:
其一,通过增加数据的【冗余度】来提升其【可靠性】(RAID 有好几种类型;除了 RAID0,其它各种类型都可以不同程度地提高可靠性)
其二,提升“读性能”或“写性能”或“读写性能”(取决于你具体使用哪种 RAID 类型)
 

◇RAID 的类型


  RAID 有很多种类型,详细解释参见维基百科的“这个链接”。LVM 已经支持如下几种:

RAID 0
RAID 1
RAID 4
RAID 5
RAID 6
RAID 10

  考虑到篇幅,俺挑几种常用的 RAID 类型,在下一个章节介绍。介绍的时候,会顺便说说该 RAID 类型的【原理】。
 

◇“软 RAID”与“硬 RAID”


  硬 RAID
  “硬 RAID”需要在电脑主板上插一个“RAID 硬件”(RAID 控制器)。然后由这个“RAID 硬件”来控制多块磁盘——RAID 功能全靠该“RAID 硬件”来完成。
  操作系统通过该“RAID 硬件”的驱动来与之打交道。在这种模式下,操作系统【看不到】具体的每一个磁盘。因此,这种这种模式的 RAID 对操作系统来说是【透明】滴。

  软 RAID
  在这种模式下,每个磁盘都直接连到主板上,操作系统可以看到每个磁盘,RAID 功能由操作系统层面(软件层面)实现。故称之为“软 RAID”。
  本文讨论的就是这种。
 

◇哪些同学需要考虑 RAID?


  使用 RAID 的【前提】是——你的电脑上同时装了【多个】物理磁盘。如果没有这个前提,搞 RAID 是没意义滴。

LVM 自带的 RAID 功能

◇RAID 0 的玩法


  原理
  RAID0 有时候也称作“带区集 or 条纹集”。通俗地说就是:把 N 个设备凑成一个大的逻辑设备。每次要写入数据时,先拆分为 N 等份,平均写入每个设备。

空间利用率
  完全不浪费(利用率接近 100%)。在所有 RAID 类型中,这种的空间利用率最高。

  可靠性
  虽然利用率最高,但可靠性最差(无冗余)——任何一个设备坏掉,全完蛋。

  操作步骤
  先创建 N 个大小一样的 PV(此处假设 N = 2),并加入到同一个 VG 里面(假设 VG 名称叫做 vg_raid)。具体如何做,前面已经聊过。
  用如下命令可以创建一个名叫 lv_xxxx 的逻辑卷,并设定以 RAID0 方式存储数据。

lvcreate --type raid0 --stripes 2 --extents 100%FREE -n lv_xxxx vg_raid

  上述命令的参数说明:

参数说明
--type raid0采用 RAID 0 的方式存储数据
--stripes 2用来创建“带区集”的设备数,在本示例中是 2
对于 RAID0,该参数的最大值为 64
--extents 100%FREE创建一个 LV,把 VG 的剩余空间都用掉


  最后,在这个新创建的 LV 之上创建文件系统。
 

◇RAID 1 的玩法


  原理
  RAID1 有时候也称作“镜像”。也就是说,用 N 块【大小一样】的存储空间,存储相同的数据,以达到冗余的目的。

 

空间利用率
  在常见的 RAID 类型中,RAID1 的【空间利用率】最低(只有 1/N)。

  可靠性
  可靠性最高(哪怕 N-1 个设备【同时】坏掉,数据都还在)。

  操作步骤
  先创建 N 个大小一样的 PV(此处假设 N = 2),并加入到同一个 VG 里面(假设 VG 名称叫做 vg_raid)。具体如何做,前面已经聊过。
  用如下命令可以创建一个名叫 lv_xxxx 的逻辑卷,并设定以 RAID1 方式存储数据。

lvcreate --type raid1 --mirrors 1 --nosync --extents 100%FREE -n lv_xxxx vg_raid

  上述命令的参数说明:

参数说明
--type raid1采用 RAID 1 的方式存储数据
--mirrors 1镜像设备的数量。
在本示例中用了两个存储设备,其中一个用作镜像;
如果是3个设备搞 RAID1,该参数就是 2(以此类推)
(对于 RAID1,该参数的最大值为 9
--nosync创建 LV 的过程中【不】在几个 PV 之间同步数据,
可缩短该命令的执行时间。


  最后,在这个新创建的 LV 之上创建文件系统(具体命令,前面已经聊过)。
 

◇RAID 5 的玩法


  原理
  RAID5 是针对 RAID4 的改良。这2款的存储风格与前面所说的 RAID0 类似(都用了 stripes 方式拆分数据);为了做到“可靠性”,RAID4 & RAID5 引入了校验码。它至少需要 N 个设备(N ≥ 3),数据写入前,先拆分为 N-1 份,写入其中 N-1 个设备,多出来的那个设备用来保存【校验码】。
  俺用下面这张示意图表示 RAID4 & RAID5 的存储差异。RAID4 把校验值全部放到同一个磁盘,会大大增加该磁盘的写操作——每次有数据块被修改,都要更新校验值,都得写这块磁盘。这块磁盘就会成为“写操作”的瓶颈。
  (由于 RAID4 明显不如 RAID5,如今用的很少,所以俺就不聊 RAID4 了)
 

空间利用率
  空间利用率 (N-1)/N,明显高于 RAID1(1/N),但低于 RAID0(100%)。

  可靠性
  可靠性也不差,N 块设备随便坏一块,都可以恢复。同时坏两块,数据会完蛋(但同时坏两块的概率很低)。

  操作步骤
  先创建 N 个大小一样的 PV(此处假设 N = 3),并加入到同一个 VG 里面(假设 VG 名称叫做 vg_raid)。


  用如下命令可以创建一个名叫 lv_xxxx 的逻辑卷,并设定以 RAID5 方式存储数据。

lvcreate --type raid5 --stripes 2 --nosync --extents 100%FREE -n lv_xxxx vg_raid

  上述命令的参数说明:

参数说明
--type raid5采用 RAID 5 的方式存储数据
--stripes 2表示数据拆分为几份。
对于 RAID5 模式的 N 个设备,该数字是【N-1】(参见上述示意图)
(对于 RAID5,该参数的最大值为 63
--nosync创建 LV 的过程中【不】在几个 PV 之间同步数据,
可缩短该命令的执行时间。


  最后,在这个新创建的 LV 之上创建文件系统(具体命令,前面已经聊过)。
 

◇LVM 使用 RAID 存储的注意事项


  一旦你在某个 VG 上创建了 RAID 方式的 LV,之后你就【无法】再从该 VG 中移除 PV 了(这是由 RAID 本身的特点决定的)。这种情况下,如果你非要移除该 VG 中的 PV,除非你先把该 VG 上涉及 RAID 存储的那些 LV 先全部删除,然后才能移除 PV。
  一般来说,如果你要采用 RAID 的方式,应该为此单独创建一个新的 VG,该 VG 中的 PV 只用于 RAID 方式。

实战

1、在虚拟机上实现 软raid5.

主要步骤:

  • 添加三块scsi硬盘
[root@localhost ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0   20G  0 disk 
├─sda1          8:1    0    1G  0 part /boot
└─sda2          8:2    0   19G  0 part 
  ├─rhel-root 253:0    0   17G  0 lvm  /
  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]
sdb             8:16   0    5G  0 disk 
sdc             8:32   0    5G  0 disk 
sdd             8:48   0    5G  0 disk 
  • 创建三个大小一样的pv
[root@localhost ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.
[root@localhost ~]# pvcreate /dev/sdc
  Physical volume "/dev/sdc" successfully created.
[root@localhost ~]# pvcreate /dev/sdd
  Physical volume "/dev/sdd" successfully created.
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sda2  rhel lvm2 a--  <19.00g    0 
  /dev/sdb        lvm2 ---    5.00g 5.00g
  /dev/sdc        lvm2 ---    5.00g 5.00g
  /dev/sdd        lvm2 ---    5.00g 5.00g
  • 将三个pv放一个vg逻辑池
[root@localhost ~]# vgcreate vg_raid /dev/sdb
  Volume group "vg_raid" successfully created
[root@localhost ~]# vgextend vg_raid /dev/sdc
  Volume group "vg_raid" successfully extended
[root@localhost ~]# vgextend vg_raid /dev/sdd
  Volume group "vg_raid" successfully extended
[root@localhost ~]# vgs
  VG      #PV #LV #SN Attr   VSize   VFree  
  rhel      1   2   0 wz--n- <19.00g      0 
  vg_raid   3   0   0 wz--n- <14.99g <14.99g
[root@localhost ~]# 
  • 创建lv逻辑卷并以raid5方式存储数据。
[root@localhost ~]# lvcreate --type raid5 --stripes 2 --nosync --extents 100%FREE -n lv_raid5 vg_raid
  Using default stripesize 64.00 KiB.
  Rounding size (3837 extents) down to stripe boundary size (3836 extents)
  WARNING: New raid5 won't be synchronised. Don't read what you didn't write!
  Logical volume "lv_raid5" created.
[root@localhost ~]# lvs
  LV       VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root     rhel    -wi-ao---- <17.00g                                                    
  swap     rhel    -wi-ao----   2.00g                                                    
  lv_raid5 vg_raid Rwi-a-r---   9.98g                                    100.00          
[root@localhost ~]# 

可以看到三快盘一共是15GB ,做完raid变成了9.8GB

利用率刚好是66.7%

做了raid5还需要热备盘吗?

uodate 2022年11月2日17:35:44

今天infra同事给服务器做了raid5,并开启了热备盘。整个过程看了一遍在这里总结一下:

12块10TB的SAS盘

1、做raid5 容量少一块

2、热备需要一块

剩余10块  10/12 = 83%.

但问题是为啥是11/12 = 91%的利用率呢?

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐