Linux RAID技术实现

RAID从诞生开始便是为了服务器服务的,它的超大容量,良好的容错能力(冗余),以及极致的性能都是优点,面对服务器的高压环境,它便是卓越的选择。

简单的说,RAID是把多块独立的物理硬盘按照不同的方式组合起来,形成一个逻辑大硬盘,从而提供比单个硬盘更高的存储性能和提供数据备份技术。在我们用户看起来,多个硬盘组合起来就像是一个硬盘,在用户层面,我们根本在使用中感觉不到,用户可以对它进行分区,格式化等等。总之,对磁盘阵列的操作与单个硬盘一模一样。不同的是,磁盘阵列的存储速度要比单个硬盘高很多,而且可以提供自动数据备份。数据备份的功能是在用户数据一旦发生损坏后,利用备份信息可以使损坏数据得以恢复,从而保障了用户数据的安全性。

而RAID主要有以下几种,它们各有优势,让我们来一起看一下:

RAID 0
Linux RAID技术实现
RAID 0的性能优秀,但是没有容错性,这便是它的弊端,我们又把它叫做条带集,它是把大块数据切分成小块后 ,在每个物理硬盘中按次序存放,意思就是第一个物理硬盘放A1,第二个物理硬盘便放A2 ,A3又回放在第一个物理硬盘里,但是只要你的硬盘数量大于等于2块硬盘就可以使用RAID 0。

  • 优点:
    读写性能是所有RAID级别中最高的。

  • 缺点:
    无法提供数据的冗余,一旦用户数据损坏,损坏的数据将无法得到恢复。RAID 0运行时只要其中任一块硬盘出现问题就会导致整个硬盘的故障,不能在继续使用。

总结:

  • 磁盘空间使用率:100%,成本最低。
  • 读性能:N*单块磁盘的读性能。
  • 写性能:N*单块磁盘的写性能。
  • 冗余:毫无冗余能力,只要有一块磁盘损坏,将导致整个阵列的不可用。

RAID 1
Linux RAID技术实现
RAID 1 是通过镜像原理来实现的,对于物理硬盘1和物理硬盘2来说,它们存放的数据是一份一模一样的,物理硬盘2通过拷贝物理硬盘1得来的,对于物理硬盘1中数据的增删改操作,物理硬盘2都会复制一边,所以一边的数据丢了,另一边也会丢。至少需要两块硬盘

  • 优点:
    RAID 1会在两块物理硬盘上产生相互为对方的备份数据,在数据读取负载比较大的时候,可直接从镜像备份中读取数据,因此RAID 1可以提供读取性能。
  • RAID 1是硬盘中单位成本最高的,但提供了很高的数据安全性和可用性,当一个硬盘失效时,系统可以自动切换到镜像硬盘上读/写,并且不需要来进行回复损坏硬盘的数据。

总结:

  • 磁盘空间使用率:50%,成本最高。
  • 读性能:只能在一个磁盘上读取,取决于磁盘中较快的那块盘。
  • 写性能:两块磁盘都要写入,因为是并行写入,所以要比对,取决于磁盘中较慢的那块盘。
  • 冗余:只要系统中任何一对镜像盘中有一块磁盘可以使用,甚至可以在一半数量的硬盘出现问题时系统都可以正常运行。

RAID 4

**RAID 4 增加了校验位 **
有一块物理硬盘存放了异或校验位,是老旧版的RAID 5,已经快被淘汰了,具体在RAID 5中细说。至少三块硬盘。

  • 优点:
    有了一定的容错性,在一块物理硬盘损坏之后可以通过异或运算求出被损坏的数据,从而保证硬盘的继续运行。
  • 缺点
    不过存放校验位的硬盘因为压力比较大老坏。

总结:

  • 磁盘空间使用率:N-1/N。
  • 读性能:在存放数据的硬盘中读取,均匀读取,压力变小
  • 写性能:两块磁盘都要写入均匀写入,速度更快。
  • 冗余:任何一块物理硬盘损坏之后,都可以使用,校验位硬盘损坏不影响数据读取写入,其他硬盘损坏之后,可以通过校验位进行异或运算求出损坏的数据,只不过在运算是系统压力比较大

RAID 5
Linux RAID技术实现
RAID 5也含有校验位,它是RAID 4的升级版,因为在RAID 4中所有的校验位存在在一块物理硬盘中,它的压力较大,容易坏,所以便有了这种做法,四块物理硬盘都有校验位存在,实现了RAID的负载均匀,这样存放异或校验位,让每一块硬盘扮演角色都一样,牺牲空间换取容错性。
做RAID 5阵列的所有磁盘容量必须一样大,当容量不同时,会以最小的容量为准。 最好硬盘转速一样,否则会影响性能,而且可用空间=磁盘数N-1,RAID 5没有独立的奇偶校验盘,所有校验信息分散放在所有磁盘上, 只占用一个磁盘的容量。

总结:

  • 磁盘空间利用率:(N-1)/N,即只浪费一块磁盘用于奇偶校验。
  • 读性能:(N-1)*单块磁盘的读性能,接近RAID 0的读性能
  • 写性能:比单块磁盘的写性能要高
  • 冗余:只允许一块磁盘损坏。

RAID 6
和RAID 5一样的结构,只不过拥有两个校验位,更加稳定,但是价格相对更高

RAID 10
Linux RAID技术实现
将RAID 0与RAID 1巧妙的结合在了一起,实现了相互融合。先将物理硬盘1和2组合成RAID 1结构,把硬盘3和4也组合成RAID 1结构,最后把两个逻辑硬盘用RAID 0结构组合在一起,就形成了这种结构。

  • 优点:
    它提供了200%的速度和单磁盘损坏的数据安全性,并且当同时损坏的磁盘不在同一RAID 1中,就能保证数据安全性。假如磁盘中的某一块盘坏了,整个逻辑磁盘仍能正常工作的。
    当我们需要恢复RAID10中损坏的磁盘时,只需要更换新的硬盘,按照RAID10的工作原理来进行数据恢复,恢复数据过程中系统仍能正常工作。原先的数据会同步恢复到更换的硬盘中。
  • 缺点:
    RAID 10方案造成了50%的磁盘浪费

总结:
磁盘空间利用率:50%。
读性能:N/2*单块硬盘的读性能
写性能:N/2*单块硬盘的写性能
冗余:只要一对镜像盘中有一块磁盘可以使用就没问题。
这种结构。RAID 10 系统不能运行的几率为1/5

RAID 10
Linux RAID技术实现
既然有RAID 10就肯定会有RAID 01,它是先将物理硬盘1和2组合成RAID 0结构,把硬盘3和4也组合成RAID 0结构,最后把两个逻辑硬盘用RAID 1结构组合在一起,就形成了这种结构。
不过因为RAID 01系统不能运行的几率为3/5,所以不如RAID 10结构稳定。

软RAID 5 实现

  • 1.下载mdadm模式化工具
    yum install -y mdadm
  • 2.分区,大小相同
    先使用fdisk工具进行分区,需要注意的是每个分区的大小应该相同,而且需要把分区格式修改为Linux raid格式,按t键之后,代码为fd。
  • 3.使用dd if=/dev/sdb of=/dev/sdc bs=1 count=66 skip=446 seek=446把磁盘阵列中区域分区,备用硬盘分区,全部分区。
  • 4.创建RAID
    mdadm -C /dev/md0 -a yes -l5 -n 3 -x1 /dev/sd{b,c,d,e}1
  • 5.查询RAID是否创建成功
    mdadm -D /dev/md0
  • 6.统一创建文件系统
    mkfs.ext4 /dev/md0 -L raid5
  • 7.写入配置文件/etc/fstab
    UUID=5f22970a-91ec-43ea-af62-357864186b7c /mnt/raid5 xfs defaults 0 0
  • 8.创建挂载目录
    mkdir /mnt/raid5
  • 9.生成RAID的配置文件
    mdadm -Ds /dev/md0 > /etc/mdadm.conf
    这样做是为了可以随时停用RAID
  • 10.停用RAID
    先取消挂载
    umount /mnt/raid
    输入
    mdadm -S /dev/md0 停用
  • 11.再次**
    mdadm -A /dev/md0
  • 其余命令用来模拟软RAID的使用:
    mdadm /dev/md0 -f /dev/sdb1 模拟sdb1损坏
    mdadm /dev/md0 -r /dev/sdb1 移除损坏的sdb1
    mdadm /dev/md0 -a /dev/sdb1 添加新换的sdb1

在添加新硬盘时,使用以下命令格式化分区:

  • ext4文件系统
    resizefs /dev/md0 同步文件系统 ,在新增加磁盘的时候可以使用
  • xfs文件系
    xfs_growfs raid挂载点

需要注意的是:
在创建RAID时候
mdadm -C /dev/md0 -a yes -l5 -n 3 -x1 /dev/sd{b,c,d,e}1

  • -C :创建模式
    -n :使用几个块设备来创建此RAID
    -l :指明要创建的RAID类型
    -a :{yes|no} 是否自动创建目标RAID设备的设备文件
    -c :指明块大小,单位k
    -x :指明备用盘个数

  • -D:显示RAID的详细信息
    mdadm -D /dev/md0

在/proc/mdstat查看md0的状态

新增硬盘成员
mdadm -G /dev/md0 -n4 -a /dev/sdf1

如果想卸载RAID使用以下命令:

  • 1.先取消挂载
    umount /mnt/raid
  • 2.停用RAID
    mdadm -S /dev/md0 停用
  • 3.清除成员磁盘当中阵列的超级块信息
    mdadm --zero-superblock /dev/sdb
  • 4.删除或注释/etc/fstab上的挂载信息
    vim /etc/fstab
  • 删除RAID配置文件
    rm /etc/mdadm.conf