服务器存储之Raid技术详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了服务器存储之Raid技术详解相关的知识,希望对你有一定的参考价值。

(服务器存储之Raid技术详解)

一、RAID介绍

1.RAID理解

RAID:独立磁盘冗余阵列(Redundant Array of Independent Drives),磁盘阵列是由很多块独立的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。

2.RAID优点

RAID技术主要有以下三个基本功能: (1)通过对磁盘上的数据进行条带化,实现对数据成块存取,减少磁盘的机械寻道时间,提高了数据存取速度。 (2)通过对一个阵列中的几块磁盘同时读取,减少了磁盘的机械寻道时间,提高数据存取速度。 (3)通过镜像或者存储奇偶校验信息的方式,实现了对数据的冗余保护。

3.RAID分类

①软件 RAID 软件 RAID 的性能较低,因为其使用主机的资源。 需要加载 RAID 软件以从软件 RAID 卷中读取数据。在加载 RAID 软件前,操作系统需要引导起来才能加载 RAID 软件。在软件 RAID 中无需物理硬件。零成本投资。 ②硬件 RAID 硬件 RAID 的性能较高,他们采用 PCI Express 卡物理地提供有专用的 RAID 控制器。它不会使用主机资源。他们有 NVRAM 用于缓存的读取和写入。缓存用于 RAID 重建时,即使出现电源故障,它会使用后备的电池电源保持缓存。对于大规模使用是非常昂贵的投资。

二、RAID0

1.RAID0介绍

基于striping方式(data striping是一种切割逻辑上连续数据的技术,例如切割文件,使得连续的片段可以被存储在不同的物理存储设备上。)来组织数据,不具备镜像(mirror,即数据冗余)和校验的功能。

2.RAID0图示

3.RAID0特点

①高性能。 ②RAID 0 中容量零损失。 ③零容错。 ④写和读有很高的性能。

三、RAID1

1.RAID1介绍

基于镜像(mirroring)的方式,当写入数据的时候,会同时写入每个磁盘设备。

2.RAID1图解

3.RAID1特点

①良好的性能。 ②总容量丢失一半可用空间。 ③完全容错。 ④重建会更快。 ⑤写性能变慢。 ⑥读性能变好。 ⑦能用于操作系统和小规模的数据库。

四、RAID5

1.RAID5介绍

RAID5(分布式奇偶校验的独立磁盘结构),RAID 5 多用于企业级, RAID 5 的以分布式奇偶校验的方式工作。奇偶校验信息将被用于重建数据。它从剩下的正常驱动器上的信息来重建。在驱动器发生故障时,这可以保护我们的数据。

2.RAID5图示

3.RAID5特点

优点: ①性能卓越 ②读速度将非常好。 ③写速度处于平均水准,如果我们不使用硬件 RAID 控制器,写速度缓慢。 ④从所有驱动器的奇偶校验信息中重建。 ⑤完全容错。 ⑥1个磁盘空间将用于奇偶校验。 ⑦可以被用在文件服务器,Web服务器,非常重要的备份中。 缺点:

①无镜像能力,虽然存在数据恢复能力,但是数据盘损坏后,基于校验码恢复数据会有额外的计算开销。 ②单校验问题,此前的所有具备校验能力的RAID亦均有此问题。

五、RAID6

1.RAID6介绍

类似于RAID 5,RAID 6基于块(block)级别切割数据至多个磁盘,具备分布式校验码。只不过是使用了双校验码(double-parity)机制。双校验支持损坏至多2块磁盘。这使得更大的RAID阵列更加实用,尤其对于高可用系统,因为大容量的阵列需要更长的时间重建。至少需要4块磁盘。和RAID 5一样,单块磁盘故障会降低整体阵列性能,直到故障盘被替换。如果磁盘的容量和阵列的容量越大的话,那么越应该考虑使用RAID 6来替代RAID 5。RAID 10同样也最小化了这些问题。

2.RAID6图示

3.RAIDD6特点

①性能不佳。 ②读的性能很好。 ③如果我们不使用硬件 RAID 控制器写的性能会很差。 ④从两个奇偶校验驱动器上重建。 ⑤完全容错。 ⑥2个磁盘空间将用于奇偶校验。 ⑦可用于大型阵列。 ⑧用于备份和视频流中,用于大规模。

六、RAID10

1.RAID10介绍

也叫作RAID 0+1或者RAID 0&1,先将磁盘制作成RAID 0,再将每个RAID 0组合成RAID 1。

2.RAID10图示

3.RAID10特点

①良好的读写性能。 ②总容量丢失一半的可用空间。 ③容错。 ④从副本数据中快速重建。 ⑤由于其高性能和高可用性,常被用于数据库的存储中。

七、LINUX下的RAID命令

1.检查安装mdadm工具

[root@control ~]# mdadm --help
mdadm is used for building, managing, and monitoring
Linux md devices (aka RAID arrays)
Usage: mdadm --create device options...
            Create a new array from unused devices.
       mdadm --assemble device options...
            Assemble a previously created array.
       mdadm --build device options...
            Create or assemble an array without metadata.
       mdadm --manage device options...
            make changes to an existing array.
       mdadm --misc options... devices
            report on or modify various md related devices.
       mdadm --grow options device
            resize/reshape an active array
       mdadm --incremental device
            add/remove a device to/from an array as appropriate
       mdadm --monitor options...
            Monitor one or more array for significant changes.
       mdadm device options...
            Shorthand for --manage.
Any parameter that does not start with - is treated as a device name
or, for --examine-bitmap, a file name.
The first such name is often the name of an md device.  Subsequent
names are often names of component devices.

 For detailed help on the above major modes use --help after the mode
 e.g.
         mdadm --assemble --help
 For general help on options use
         mdadm --help-options

2.检查系统RAID安装情况

[root@control ~]#  fdisk -l | grep -i "raid"
[root@control ~]# cat /proc/partitions 
major minor  #blocks  name

 259        0   20971520 nvme0n1
 259        1     512000 nvme0n1p1
 259        2    5242880 nvme0n1p2
 259        3    2097152 nvme0n1p3
 259        4          1 nvme0n1p4
 259        5   13117440 nvme0n1p5
  11        0    6936576 sr0
   8        0   20971520 sda
   8       16   20971520 sdb
[root@control ~]# lsblk 
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0   20G  0 disk 
sdb           8:16   0   20G  0 disk 
sr0          11:0    1  6.6G  0 rom  /mnt/cdrom
nvme0n1     259:0    0   20G  0 disk 
├─nvme0n1p1 259:1    0  500M  0 part /boot
├─nvme0n1p2 259:2    0    5G  0 part /home
├─nvme0n1p3 259:3    0    2G  0 part [SWAP]
├─nvme0n1p4 259:4    0    1K  0 part 
└─nvme0n1p5 259:5    0 12.5G  0 part /

3.Mdadm工具使用语法

[root@control ~]# mdadm --manage --help
Usage: mdadm arraydevice options component devices...

This usage is for managing the component devices within an array.
The --manage option is not needed and is assumed if the first argument
is a device name or a management option.
The first device listed will be taken to be an md array device, any
subsequent devices are (potential) components of that array.

Options that are valid with management mode are:
  --add         -a   : hotadd subsequent devices to the array
  --re-add           : subsequent devices are re-added if there were
                     : recent members of the array
  --remove      -r   : remove subsequent devices, which must not be active
  --fail        -f   : mark subsequent devices a faulty
  --set-faulty       : same as --fail
  --replace          : mark device(s) to be replaced by spares.  Once
                     : replacement completes, device will be marked faulty
  --with             : Indicate which spare a previous --replace should
                     : prefer to use
  --run         -R   : start a partially built array
  --stop        -S   : deactivate array, releasing all resources
  --readonly    -o   : mark array as readonly
  --readwrite   -w   : mark array as readwrite
[root@control ~]# 

RAID技术详解以及性能测试

RAID磁盘阵列概述

早在1978年,美国加州大学伯克利分校就提出了RAID (edundant Array of Independen Disk)虚拟存储系统。RAID即独立冗余磁盘阵列,其思想是将多块独立的磁盘按不同的方式组合为一个逻辑磁盘,从而提高存储容量,提升存储性能或提供数据备份功能。
RAID 存储系统的组合方式根据RAID级别定义。

RAID分为软件RAID和硬件RAID两类。在现有的操作系统中,如Windows、Linux、UNIX等已经集成了软RAID的功能。软件RAID可以实现与硬件RAID相同的功能,但由于其没有独立的硬件控制设备,所以性能不如硬件RAID,但软件RAID 实现简单,不需要额外的硬件设备。
硬件RAID通常需要有RAID卡,RAID卡本身会有独立的控制部件和内存,所以不会占有系统资源,效率高、性能强。
当然目前市面上有很多主板已经集成了RAID卡,具体的使用方式可以参考硬件说明书。

  现在RAID存储系统被广泛应用于生产环境作为存储解决方案。
1 RAID 级别

RAID根据组合的方式不同,有多种设计解决方案,以下介绍儿种常见的RAID方案(RAID级别)。

  1. RAIDO (不含校验与冗余的条带存储)
      多块磁盘组合为RAID 0后,数据将被分割并分别存储在每块硬盘中,
      所以能最大地提升存储性能与存储空间,但无法容错,RAID0至少需要两块磁盘
      缺点:因为没有校验与备份,两块硬盘中如果有一块磁盘损坏,
      即磁盘中的任何一个数据块损坏将导致整个文件无法读取。
  1. RAID 1 (不含校验的镜像存储)
      多块磁盘组合为RAID 1后,数据将被同时复制到每块硬盘中,制作这种磁盘阵列至少需要两块硬盘,
      该级别的RAID只要有一块磁盘可用,即可正常工作,
      该级别的阵列安全性是最好的,磁盘利用率是最低的
      缺点: RAID 1的写入效率低下。此外,磁盘的利用率极低,
      如果两块磁盘的存储空间均为120GB,则RaID 1的总存储空间依然为120GB。

  1. RAID 2 (位级别的校验式条带存储)
多块磁盘组合为RAID 2后,数据将以位(bit) 为单位同步式分别存储在不同的硬盘上,
并采用海明码( 海明码是一种 具有纠错功能的校验码)对数据进行校验与恢复。
如果有一个文件要写入RAiD2,则该文件会被分成数据位分别同步写入不同的磁盘中,
DATA1与DATA2进行海明码运算后再写入校验盘中,其他部分依此类推。
拥有校验位的RAID2允许E三块磁盘中的任何一块磁盘损坏,
并能够对未损坏的两块磁盘进行运算后还原已损坏磁盘上的数据,从而实现数据恢复的功能。
RAID 2对大数据量的读写具有很高的性能,但对少量数据的读写时性能反而不好,该磁盘阵列至少需要三块硬盘。


下面还有RAID3(字节级别的校验式条带存储)
RAID4 (数据块级别的校验式条带存储))
RAID5 (数据块级别得到分布式的校验式条带存储))
RAID 10(镜像与条带存储)

3 创建与管理raid实例
 1.查看磁盘信息

      [root@localhost ~]# fdisk -l..部分内容省略...

      Disk /dev/sdb: 2147 MB, 2147483648 bytes255 heads, 63 sectors/track, 261 cylinders

      Units = cylinders of 16065512 = 8225280 bytes

      Disk /dev/sdb doesn't contain a valid partition table

      Disk /dev/sdc: 2147 MB, 2147483648 bytes255 heads, 63 sectors/track, 261 cylinders

      Units = cylinders of 16065 * 512 = 8225280 bytes

      Disk /dev/sdc doesn't contain a valid partition table

      Disk /dev/sdd: 2147 MB, 214 7483648 bytes255 heads, 63 sectors/ track, 261 cyl inders 

      Units = cyl inders of 16065512 = 8225280 bytes

      Disk /dev/sdd doesn't contain a valid partition table 

从以上输出信息可以看出,本机有sdb、sdc、 sdd三块硬盘未分区,如果需要在Linux中实现软RAID,可以将每块硬盘分-一个区组建RAID,也可以对硬盘分多个区实现软RAID,这里我们将每块硬盘分两个区。

3.1 创建硬盘分区
 [root@localhost ~]# fdisk /dev/sdb
 划分两个分区 sd1 sd2后  其他两块磁盘执行相同的操作,这里就不在赘述
 [root@localhost ~]# partprobe -a
 
3.2创建RAID (本例将分别创建RAIDO与RAID5)

Linux中创建磁盘阵列可以使用mdadm命令,在CentOS 7中,目前支持的RAID级别RAIDO、RAID1、 RAID4、RAIDS、RAID6、 RAID10。
下面我们看看该命令的使用方法。

名称: mdadm
描述:管理Linux软件RAID设备。
用法: mdadm [模式]选项<raid 设备>
创建软件RAID (create)-1  指定RAID级别(level)。
指定磁盘个数。
指定备用设备个数。
[root@localhost ~]# mdadm -C /dev/md0 -1 0 -n 3 /dev/sdb1 /dev/sdc1 , dev/sdd1 
mdadm: array /dev/md0 started.
[ root@ localhost ~] # mdadm  -C  /dev/md1 -1 5 -n 3-x 1 \\ 
> /dev/sdb2  /dev/sdc2  /dev/sdd2 /dev/sde2
> mdadm: array /dev/md1 started.
以上两条命令分别创建了名称为md0的RAID0设备以及名称为md1的RAID5设备,这里的名称可以根据自己的习惯自行指定。
刚刚创建的RAIDO及RAID 5的详细信息如下。
[root@localhost ~]# mdadm --detail /dev/md0/dev/md0:
Version : 0. 90
Creation Time :  Thu May 17 03:46:55 2012
Raid Level : raid0
Arrav size : 2963520 12.83 GiB 3.03 GB)

#查看md0信息
#创建时间#RAID级别
#RAID磁盘空间
Etecetec

Preferred Minor : O
Persistence : superblock is persistent IUpdate Time : Thu May 17 03:46:55 2012
State : cleanActive Devices : 3Working Devices : 3Failed Devices : CSpare Devices : 0
Chunk Size : 64K
UUID : 62e9bd3e: f4dcf02d: 31 9e2a62: 8099eb72 ix 1 UUIDEvents : 0.1Numbe r  Major
0  8  01  82  8
/dev/md1 :

Number  Major
0  81  8



/dev/ sdb1/dev/ sdc1/dev/ sdd1#*~ md1 íTï ÉA

Minor1834

RaidDevice State
0  active sync1  active sync

/dev/ sdb2/dev/ sdc2

3.3 格式化与挂载
[root@localhost ~]# mkfs. xfs /dev/md0[root@localhost ~]# mkdir /raid0
[ root@localhost ~]# mount  /dev/md0 /raid0[root@localhost ~]# mkfs.xfs /dev/md1[root@localhost ~]# mkdir /raid5
[root@localhost ~]# mount /dev/md1 /raid5

将磁盘阵列设备设置为开机自动挂载项,CeniOS 系统开机会读取磁盘阵列的配置文件/etc/mdadm.conf以启动RAID设备。下面两条命令可以帮助我们快速创建这样的配置文件,DEVICE行代表填写所有磁盘阵列的设备成员名称,ARRAY 行描述磁盘阵列具体的基本信息,包括名称、级别、UUID等信息。

[root@localhost ~] #echo "DEVICE /dev/sdb1 /dev/sdb2 \\
/dev/sdc1 /dev/sdc2 /dev/sdd1 /dev/sdd2 /dev/sde2" > /etc/mdadm . conf
[root@localhost ~]# mdadm -Evs > > / dev/ mdadm. conf
ARRAY /dev/md/0  level=raid0 metadata=1.2 num-devices=32591cc4d:a588f799:88123b79 name=centos7 . example. com:0
devices=/dev/ sddl, /dev/ sdcl, /dev/ sdb1
ARRAY /dev/md/1 level=raid5 metadata=1.2 num-devices= 3 6bc3a 612: 969239d8: 7a78a301 name=centos7. example. com: 1
spares=1 devices=/dev/sde2, /dev/sdd2, /dev/ sdc2, /dev/sdb2 
[root@localhost ~]# echo "/dev/md0 /raid0 xfs defaults 0 0" >> /etc/fstab
[root@localhost ~]# echo "/dev/md1 /raid5 xfs defaults 0 0" >> /etc/fstab

UUID=4282a2c2:
UUID=d6cc7bdc:

3.4 RAID性能模拟
**************************
★*  普通磁盘:写入模拟  ★★
**************************


[root@localhost ~]# time dd if=/dev/zero of=txt   bs=1M  count=1000
1000+0 records in1000+0 records out
1048576000 bytes (1.0 GB) copied, 21. 7965
real  0m23.262s
user  0m0.001s
sys  0m2.209s


seconds, 48.1 MB/s
可以看出,对普通磁盘写入1GB的数据所需总时间为23.262s.

 **  RAID 0:写入模拟  ★*********
  [root@localhost raid0]# time dd if=/dev/zero of=txt bs=1M count =1000
  1000+0 records in1000+0 records out

      1048576000 bytes (1.0 GB) copied, 3. 87193 seconds, 271 MB/s
      real    0m4.308s
      user  0m0.001s 
      sys  0ml.604s

      可以看出,对RAIDO写入1GB数据所需总时间为4.308s。

      ★★★★★*★★★****************

      工件  ★★  RAID 5:写入模拟★*

      ★★★★★★★★****************

      [root@localhost raid5]# time dd if=/dev/zero of=txt bs=1M count= 1000

      1000+0 records in1000+0 records out

      1048576000 bytes (1.0 GB) copied, 12. 5047 seconds, 83.9 MB/s
     
       real   0m12.614s
       use r  0m0.004s
       sys  0m3.705s

      可以看出,由于RAID 5需要生成校验位数据,
      所以写入数据的速度比RAIDO慢,但比普通磁盘快,写入1GB数据所需总时间为12.614s。 


5RAID 故障模拟
[root@localhost raid5]# mdadm /dev/md1 -f /dev/sdb2
mdadm :  set /dev/sdb2 faulty in /dev /md1
注释:使用-f选项( failed)模拟磁盘sdb2的损坏。
由于上面做性能测试时已经往RAID5中写入了1GB的数据,所以使用命令模拟磁盘损坏后,快速查看Rald详细信息可以看出正在使用/dev/sde2重建数据(还原数据),而原来的/dev/sdb2成了损坏的空闲设备。
[root@localhost ~]# mdadm --detail /dev/md1

Numbe r
Major
Minor
RaidDevice State

以上是关于服务器存储之Raid技术详解的主要内容,如果未能解决你的问题,请参考以下文章

liunx磁盘阵列raid详解

Linux之RAID的介绍

RAID磁盘阵列详解之RAID 6的配置与无人值守(带双重分散校验的数据条带),企业常用,必学!!!

磁盘阵列 RAID 技术原理详解

RAID技术详解以及性能测试

Linux之磁盘阵列技术详解--raid0创建