我写的不一定是正确的,但我是这么理解的(知识体量有限,错了望提醒)
RAID 是什么
基本思想就是把多个硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘
简单说就是把多个硬盘组成一个逻辑扇区来使用,在操作系统层面这就是一个硬盘,能够动态的完成硬盘的增大跟缩减通常有硬件RAID跟软件之分
RAID 的优势
- 增大I/O能力
- 更高的数据安全
- 更大的容量
- 高效恢复磁盘数据
- ……
硬件RAID
- 主板上会集成一个RAID控制器,这个控制器连接到外部的一个硬盘组盒来实现硬件RAID
- 类似上面,就好像多个插在STAT口上多块硬盘,主板上有一个RAID控制器,管理这几块连在STAT口上的硬盘组成RAID
软件RAID
- 这就没什么好说的了,就是通过软件来模拟RAID,软件RAID的风险也比较大,生产绝对不建议
为什么要组建RAID
类型接口传输速率
- IDE:3.3MB/s到16.6MB/s不等
- SCSI:160MB/s 最大
商用居多(以前),cpu占用低,它内部有个小控制器,有些也会带缓存,保证数据的持久化 - USB 3:640MB/s
- STAT 3:600MB/s
以上都是理论速度,cpu跟内存的数据交互两都是按GB计算,硬盘的速度有时确实是服务器的瓶颈,不考虑现在的 USB3.1和雷电3接口,这个时候就需要组建RAID了
RAID 的级别
RAID 0 (条带)
基本原理
如上图,有disk0,1两块磁盘,在组建RAID 0 之后,RAID 控制器将一个文件一分为多分,比如1G 大小的文件,分成30MB大小的N个文件,分别放入两个磁盘中,以STAT口最大传输速率为例,单个传输在600M/s,两个一起就是1GB/s 左右每秒的数据传输。同样也可以三块硬盘组建RAID 0,那时这个RAID 0 的速率就是接近单块硬盘的3倍,但至少是2块硬盘组建RAID 0
RAID 0特性
- 性能读写提升N倍(N为磁盘数量)
- 冗余能力(容错能力)没有
- 空间利用率:Ns(N磁盘数量,s磁盘大小)
- 至少两块磁盘
RAID 1 (镜像)
基本原理
如上图:在存储文件的时候在DISK 0 中存储一份,然后还在DISK 1 中存储一份,写速度不变,不过在读取数据的时候可以交叉读取,提高读速度。这种RAID组合通常是为了数据安全性,两块硬盘同时坏的几率肯定比一块硬盘坏的几率小太多了
RAID 1特性
- 写性能下降,读性能提高(相比单块硬盘)
- 有冗余能力
- 空间利用率是1/2
- 至少两块硬盘
RAID 4 (校验码)
基本原理
如上图:在存储数据的时候会被依次分片存入DISK 0,1,2 中,DISK 3 不存放数据,存放DISK 0,1,2的校验码。如一个90M的文件被被分别存入A1,A2,A3位置,Ap就是存放着A1,A2,A3的校验码;在读取数据的时候如果A1,A2,A3的数据取出后校验码不能跟Ap相同,那就数据出现问题。这种情况,校验码盘DISK 3是RAID的瓶颈,所以用的比较少,如果RAID 3 出现问题,就要重新换盘或重新计算校验码,影响线上业务
特性
- 读写性能都有提高
- 有冗余能力
- 空间利用率(N-1)N
- 至少三块硬盘
RAID 5 (循环冗余校验码)
基本原理
如上图:跟RAID 4 差不多,只是每个盘都参与当校验码盘,这种情况如果两块硬盘挂了,那数据就没了
特性
- 读写性能提高
- 有冗余能力
- 空间利用率(N-1)N
- 至少三块硬盘
RAID 01 (条带+镜像)
基本原理
如图:先将4块硬盘分成两个为组共两组,每组各做成RAID 0 然后将每组连接起来在组成RAID 1,也就是先条带(RAID 0),然后镜像(RAID 1),RAID 在存储数据的时候先左右各存一份也就是DISK 0,1跟DISK 2,3存的东西是一模一样的,然后数据到每组的时候在以条带的方式分批存入两个硬盘,如果其中一组RAID 0 挂了,那不会影响业务,因为另一组的跟挂掉的那组数据一样。如果不同组同一个数据位的硬盘挂了那就真挂了
特性
- 读写性能提高
- 有冗余能力
- 空间利用率1/2
- 至少四块硬盘
RAID 10 (镜像+条带)
基本原理
如图:跟上面RAID 01 差不多,不解析了,大概理解下也就是先分组做RAID 1 然后将每组做成RAID 0
JBOD(磁盘簇)
基本原理
如上图:将多个硬盘组成一个逻辑盘,可以自由扩大或缩小,扩大或缩小不损坏数据,RAID就不一定,一般硬盘需要分区、格式化、挂载才能用。JBOD能够动态增减硬盘容量
特性
- 无性能表现
- 无冗余能力
- 利用率100%
- 至少两块硬盘
至于RAID 3、RAID 4、RAID 50啥特性的自行搜索下
RAID 的级别差异
RAID级别 | 读性能 | 写性能 | 冗余能力 | 利用率% | 硬盘数量 |
---|---|---|---|---|---|
RAID 0 | 单盘N倍 | 单盘N倍 | 无 | 100 | 2 |
RAID 1 | 接近单盘N倍 | 低于单盘写能力 | 有 | 50 | 2 |
RAID 4 | (N-1)/N * s倍 | (N-1)/N * s倍 | 有 | (N-1)/N | 3 |
RAID 5 | (N-1)/N * s倍 | (N-1)/N * s倍 | 有 | (N-1)/N | 3 |
RAID 01 | Ns/2倍 | Ns/2倍 | 有 | 50 | 4 |
RAID 10 | Ns/2倍 | Ns/2倍 | 有 | 50 | 4 |
JBOD | 无 | 无 | 无 | 100 | 2 |
Linux RAID实现
内核(kernel)中有个模块叫md(multi disk),这个是用来模拟软件RAID的,这个跟dm是两码事
linux是通过设备文件访问每个硬件的(/dev/目录下),软件RAID在/dev/ 目录下生成/dev/md# 开头的设备(逻辑RAID)让linux来实现软件RAID,实际底层还是存储到各个设备中(/dev/sd#)
- mdadm是上层用户用来管理软件RAID的一个命令工具
- mdadm可以将任何块设备做成RAID
RAID 基本操作
# mdadm
创建模式
-c 设备名
专用选项
-l:RAID级别
-n:#:指定设备个数
-a {yes|no}:自动为其创建设备文件
-c:CHUNK大小,默认是64k,每个条带大小
-x #: 指定空闲盘个数
# mdadm -C /dev/md0 -l 0 -a yes -n 2 /dev/sda{0,1}
管理模式
--add(-a):新增;--remove(-r):移除; --fail(-f):模拟损坏
# mdadm /dev/md# --fail /dev/sda1 : 模拟硬盘损坏
监控模式
-F 设备名
增长模式
-G 设备名 指定块设备
装饰模式
注意:将现有做成RAID 的设备放置到别的主机,通过装配模式进行重新识别
-A
查看RAID阵列的详细信息
# mdadm -D /dev/md#: 显示设备详细信息
# /proc/mdstat: 查看RAID信息
停止阵列
# mdadm -S /dev/md#
将当前RAID信息保存至配置文件,以便以后进行装配
# mdadm -D --scan > /etc/mdadm.conf
由于演示我就一块磁盘来模拟RAID各个级别,只要是块设备都能用来做RAID
Linux RAID实例
这里使用一块20G磁盘进行模拟
RAID 0 实例
RAID 0 要保证至少需要两个设备这里用sdb{1,2}进行模拟
mdadm -C /dev/md0 -l 0 -a yes -n 2 /dev/sdb{1,2}
使用
mdadm -C
指定创建逻辑RAID名称,-l指定RAID级别,-a同意自动为其创建设备文件,-n指定设备数量(不能小于块设备数量)使用mdadm -D /dev/md0 查看详细信息(应该看得懂吧)
mke2fs -j /dev/md0:格式化逻辑RAID
-
挂载(看到lost+found文件就标识成功了)
RAID 1 实例
这里RAID 1 使用sdb{3,5}进行模拟
mdadm -C /dev/md1 -l 1 -a yes -n 2 /dev/sdb{3,5}
第二个红框在查看RAID设备的时候看到红框3的进度条,这是RAID 1的特性,盘1数据跟盘2保持一致也就是sdb3跟sdb5保持一致,之后会显示同步完成
- 之后就是
格式化
,挂载
,看到lost+found
表示可以使用了
模拟磁盘损坏
-
先拷贝文件(我拷贝文件/etc/fstab)到挂载目录,我挂载的是/media目录,模拟
mdadm /dev/md1 -f /dev/sdb5
损坏(/dev/sdb5)
-
查看挂载目录fstab文件内容
这就是RAID 0的特性,允许一块磁盘损坏,依然不影响数据
- 现在添加sdb6至md1(RAID 1)中,在模拟sdb3损坏,查看数据是否可以访问
# mdadm /dev/md1 -r /dev/sdb5:移除损坏盘
# mdadm /dev/md1 -a /dev/sdb6:新增盘
# mdadm /dev/md1 -f /dev/sdb3:模拟sdb3损坏
# cat /media/fstab
cat /media/fstab
文件依然可用
mdadm命令的其他模式的用法自行搜索理解吧
总结
首先只要理解RAID是什么?然后用在什么地方?特性是什么?怎么用,就能大概了解跟理解他了
- 是什么
也就是一个大容量,冗余可伸缩,增大I/O能力的一个逻辑设备(理解成硬盘吧) - 用在什么地方
如果这几个特性是工作或者生产想要实现或体现的那自己就知道要用在什么地方了- 就比如DIY不愿意升级SSD,可以买个RAID盒子里面放两个机械组成一个RAID 0,不过这里注意如果最后I/O接口速度都不能大于你单块机械硬盘的传输那用了也白用,就比如RAID 盒子是通过USB链接到你电脑的,那如果是3.0就白搭了,最好是3.1或者雷电的
- 特性(RAID 级别)
- RAID 0(条带):增大带宽
- RAID 1(镜像):提高安全性
- RAID 5 (循环校验码):提高安全性跟带宽
- ......
- 怎么用?分硬件RAID跟软件RAID
- 硬件RAID 主板自带,自己上BIOS设置或其他地方设置(现在DIY主板应该都有)
- 软件RAID 上文说的使用Linux内核自带的md模块实现软RAID就是一种,方法还有其他,感兴趣自己搜索就好