独立冗余磁盘阵列(RAID)

独立冗余磁盘阵列,简称RAID,是通过多个磁盘相互组合提高对硬盘设备IO读取速度和数据安全性的一种技术,目前已有的磁盘阵列方案比较多,标准的RAID有:RAID0、RAID1、RAID2、RAID3、RAID4、RAID5、RAID6。本文主要讲解及在VM虚拟机下使用相关命令配置RAID0、RAID1、RAID5、6、10。

环境

  • 系统:RHEL7.6
  • 虚拟机:VM

RAID介绍

RAID0

RAID0是通过硬件或者是软件的方式将其连接在一起,至少需要两块硬盘,数据分段之后依次写入各个物理硬盘上面。RAID的存储速度最快,但是没有备份,空间利用率达到100%,但是硬盘损坏之后,数据无法修复。零容错。

RAID1

RAID0是对数据分开存放的,任何一个硬盘发生故障,那么整个数据都将不可用。RAID1则提高数据安全性,将数据同时存入多个硬盘当中,相当于镜像存储,磁盘阵列无论挂载多少个硬盘,都相当于容量最小的硬盘,写入速度相对于RAID0慢,但是数据安全性大大提高,但是这种读取速度是一个硬盘读取速度乘于硬盘个数。

RAID5

RAID1虽然安全性大大提高,但是硬盘空间利用率大大降低。RAID5兼顾RAID0和RAID1的优点提出来的一种技术方案。RAID5与RAID3和RAID4不同的是RAID4是使用固定盘来存储奇偶校验位,而RAID5是将数据和数据对应的校验位在分散存储在各个硬盘上面。RAID5的数据和RAID0数据分布相似,都是把数据以块为单位分布到各个评判上面。上面这两个RAID5技术方案特点,使得RAID至少需要3块磁盘。RAID5没有备份数据,只保存数据的校验位,在硬盘损坏之后通过奇偶校验位进行数据恢复。RAID5受到系统故障之后,重建时间比较长。

RAID6

RAID5可以知道,如果某一个盘故障之后,可以通过其他盘的校验位和其余的数据记性数据恢复,但是如果同时有两个盘故障的话,则不能完全进行数据恢复(假如上图的Disk1和Disk2同时损坏,A的数据可以通过A1和ParityA恢复,D的数据可以通过D3和ParityD恢复,而B,C的数据由于校验位数据丢失不能恢复)。所以这是出现RAID6,RAID6是在RAID5增加一个安全等级,就是RIAD6在RAID5的基础上,在其他盘又增加XOR校验区,这两个XOR校验使用不同的算法,这个阵列需要至少4块硬盘。这样磁盘阵列允许同时两个硬盘故障,容错功能提高。但是在写入数据的时候需要计算两个XOR区,速度大大降低,空间利用率也降低。

RAID10

由于RAID磁盘阵列的读写速度和数据安全性是相互制约,RAID10通过将RAID0和RAID1进行组合,他利用RAID0的快速读写和RAID1的安全性。性能超过RAID6和RAID5.只要同一组的硬盘不全部损坏,那么数据就不会丢失。RAID10至少需要4块硬盘。如图 :

热备磁盘

针对磁盘阵列,不同的方案容错成都也不一样,一般都会有热备磁盘,也就是在磁盘阵列中某个磁盘挂了,热备磁盘可以立刻代替损坏磁盘的位置,这时候,我们的磁盘阵列就会重建,一个磁盘阵列可以包含多个热备磁盘。

mdadm命令

mdadm命令是Linux下创建和管理磁盘阵列的命令,具体参数如下:

参数 作用
-a 检测设备名称
-n 指定设备数量
-l 设定RAID级别
-C 创建磁盘阵列名称
-v 显示创建过程
-f 模拟设备损坏
-r 移除设备
-Q 查看摘要信息
-D 查看详细信息
-S 停止磁盘阵列

虚拟磁盘部署磁盘阵列实验

RAID0

  • 步骤一(添加磁盘)

在虚拟机系统关机状态下,添加两个SCSI磁盘。(虚拟机->设置->添加->硬盘->SCSI->创建新虚拟磁盘->容量20G,完成),按照这个步骤添加两个硬盘。

  • 步骤二(查看磁盘)

虚拟机下开机(打开系统),进入终端(桌面版),使用lsblk或者“fdisk -l”命令,可以看到我们添加的两个硬盘,如图:

  • 步骤三(分区)

分区,上面步骤已经添加两个磁盘,下面使用fdisk对磁盘进行分区。1. “fdisk /dev/sdb” (关于fdisk分区自行根据提示进行就可以,这里我们只分一个主分区,默认编号是1,大小是上限值就即可,设置完成之后,切记分区表同步到磁盘(w write table to disk and exit))。重复操作对/dev/sdc进行分区 。(不对磁盘分区,应该也可以直接构建磁盘阵列也就是不需要第三步骤也可以)

  • 步骤四(创建磁盘阵列)

使用mdadm命令创建磁盘阵列,

1
mdadm  -C  /dev/md0  -a yes   -l0   -n2   /dev/sdb1  /dev/sdc1

参数说明: -C 创建阵列 ; -a yes 自动创建设备文件; -l +数字 是阵列模式-l0就是说RAD0;-n2 是指连个磁盘创建磁盘阵列;

  • 步骤五(格式化)

格式化磁盘阵列 “mkfs.xfs /dev/md0”; 这个mkfs格式工具很强大,mkfs.ext3、mkfs.ext4.都比较方便。

  • 步骤六(查看磁盘阵列信息)

查看我们创建的磁盘阵列:终端命令“cat /proc/mdstat”或者使用“mdadm -D /dev/md0”详细查看RAID0 配置,如图:

  • 步骤七(挂载)

使用mount挂在磁盘阵列只能在本次开机有效,要想开机自动挂载可以将磁盘阵列信息写入到/etc/fstab。这里只使用mount挂载。“sudo mkdir /RAID/raid0” ; “mount /dev/md0 /RAID/raid0”。到此为止我们就可以正常使用磁盘阵列。

  • 步骤八(读取写入速度测试)
  1. 写入测试

    先给磁盘阵列写入,使用dd和time命令,dd有复制功能,time可以计时,写入1GB。

    1
    time dd  if=/dev/zero  of=/RAID/raid0/iointest bs=8k count=131072

    在直接写入本地:

    1
    sudo time dd  if=/dev/zero  of=/home/funful/iointest bs=8k count=131072

    如图可以看出来,虽然是虚拟磁盘模拟出来的,但是写入速度与时间还是有差距的(忽略数值,电脑配置比较低)。

  2. 读取测试

    先读取磁盘阵列数据,命令如下:

    1
    sudo time dd  if=/RAID/raid0/iointest   of=/dev/null  bs=8k count=131072

    再测试读取本地数据,命令如下:

    1
    sudo time dd  if=/home/funful/iointest   of=/dev/null  bs=8k count=131072

由于各个磁盘阵列的方案实施过程相似,所以就不一一进行实验,下面只对RAID10进行创建

RADI10

  • 步骤一(添加磁盘)

    和RAID0的过程相似,在虚拟机系统关机状态下添加5个虚拟磁盘(每个20GB),4个数据盘,一个热备份盘。如图:

  • 步骤二(创建磁盘阵列+备份盘 )

    使用命令创建磁盘阵列:

    1
    sudo mdadm -C /dev/md0 -n 4  -l 10 -x 1 /dev/sdb /dev/sdc /dev/sdd  /dev/sde  /dev/sdf

    使用命令查看磁盘阵列信息:“mdadm -D /dev/md0” 如图:

    从上图可以看出来,总共有5个磁盘,四个活动磁盘,一个备份磁盘。/dev/sdf作为备份盘。

  • 步骤三(格式化磁盘阵列)

    1
    mkfs.xfs   /dev/md0
  • 步骤四(主动破坏某个数据盘)

    使用mdadm的-f命令主动从磁盘阵列移除一个磁盘,命令

    1
    mdadm /dev/md0 -f /dev/sdb

    可以从图中可以看到,/dev/sdb已经挂了,而之前的备份盘正在顶替sdb的位置,而且正在rebuilding,所以此时活动盘只有3个。过一会再使用这个命令可以看到,rebuilding完毕之后,顶替之前位置。

  • 步骤五(添加热备磁盘)

    下面我们将模拟损坏的磁盘,作为热备磁盘加进磁盘阵列,命令如下:

    1
    2
    3
    4
    #移除损坏磁盘
    sudo mdadm /dev/md0 -r /dev/sdb
    #添加备份磁盘
    sudo mdadm /dev/md0 -a /dev/sdb

    从上图可以看到我们刚才模拟损坏的sdb盘,已经作为热备份盘,添加到磁盘阵列当中。

结语

由于是使用虚拟磁盘来创建磁盘阵列,所以性能对比差距不是那么明显。但是我们可以通过软件的方式使用命令来管理磁盘阵列。

-------------本文结束感谢您的阅读-------------