目录
  1. 1. 环境
  2. 2. RAID介绍
    1. 2.1. RAID0
    2. 2.2. RAID1
    3. 2.3. RAID5
    4. 2.4. RAID6
    5. 2.5. RAID10
    6. 2.6. 热备磁盘
  3. 3. mdadm命令
  4. 4. 虚拟磁盘部署磁盘阵列实验
    1. 4.1. RAID0
    2. 4.2. RADI10
  5. 5. 结语
独立冗余磁盘阵列(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盘,已经作为热备份盘,添加到磁盘阵列当中。

结语

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

文章作者: ZhaoH.T
文章链接: http://www.funful.ink/2019/03/09/2019-3-9_RAID_Description/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 FunfulBlog

评论