什么是RAID
"RAID"一词是由David Patterson, Garth A. Gibson, Randy Katz 于1987年在加州大学伯克利分校发明的。在1988年6月SIGMOD会议上提交的论文"A Case for Redundant Arrays of Inexpensive Disks”"中提出,当时性能最好的大型机不断增长的个人电脑市场开发的一系列廉价驱动器的性能所击败。尽管故障与驱动器数量的比例会上升,但通过配置冗余,阵列的可靠性可能远远超过任何大型单个驱动器的可靠性。
独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks),简称磁盘阵列。利用虚拟化存储技术把多个硬盘组合起来,成为一个或多个硬盘阵列组,目的为提升性能或数据冗余,或是两者同时提升。RAID 层级不同,数据会以多种模式分散于各个硬盘,RAID 层级的命名会以 RAID 开头并带数字,例如:RAID 0、RAID 1、RAID 5、RAID 6、RAID 7、RAID 01、RAID 10、RAID 50、RAID 60。每种等级都有其理论上的优缺点,不同的等级在两个目标间获取平衡,分别是增加数据可靠性以及增加存储器群)读写性能。
简单来说,RAID把多个硬盘组合成为一个逻辑硬盘,因此,操作系统只会把它当作一个实体硬盘。RAID常被用在服务器电脑上,并且常使用完全相同的硬盘作为组合。由于硬盘价格的不断下降与RAID功能更加有效地与主板集成,它也成为普通用户的一个选择,特别是需要大容量存储空间的工作,如:视频与音频制作。
RAID功能实现
-
提高IO能力
-
提高耐用性,
-
磁盘冗余备份
RAID实现的方式
-
外接式磁盘阵列:通过扩展卡提供适配能力
-
内接式RAID:主板集成RAID控制器,安装OS前在BIOS里配置
-
软件RAID:通过OS实现,比如:群晖的NAS存储
raid级别
RAID-0:条带卷,strip
RAID-1:镜像卷,mirror
RAID-2
......
RAID-5
RAID-6
RAID-7
RAID-10
RAID-01
RAID-50
RAID-0
因为读写时都可以并行处理,所以在所有的级别中,RAID 0的速度是最快的。但是RAID 0既没有冗余功能,也不具备容错能力,如果一个磁盘(物理)损坏,所有数据都会丢失。
读、写性能提升可用空间:N*min(S1,S2,...)
无容错能力
最少磁盘数:1+() 2+ 才有效果
RAID-1
也称为镜像, 两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,理论上读取速度等于硬盘数量的倍数,与RAID 0相同。另外写入速度有微小的降低。
读性能提升、写性能略有下降
磁盘利用率 50%
有冗余能力
最少磁盘数:2n n>=1
RAID-5
读、性能提升
写的性能略微降低
利用率: n-1
有容错能力:允许最多1块磁盘损坏
最少磁盘数:3, 3+
RAID-10
读、写性能提升
可用空间:n/2
有容错能力:每组镜像最多只能坏一块
最少磁盘数:4, 4+(偶数)
实现软raid
mdadm工具:为软RAID提供管理界面,为空余磁盘添加冗余,结合内核中的md(multi devices)RAID设备可命名 为/dev/md0、/dev/md1、/dev/md2、/dev/md3等
做raid(分区)
建立文件系统
挂载
mdadm [mode] <raiddevice> [options] <component-devices>
命令 模式 阵列名字(md0) 选项 选择/dev/sdb /dev/sdd
mdadm -Cv /dev/md0 -l 10(raid) -n 4 -x 1 /dev/sd[bcde] {b,c,d,e,f}
常用选项说明
模式:
创建:-C
装配:-A
监控:-F
管理:-f, -r, -a
<raiddevice>: /dev/md#
<component-devices>: 任意块设备
-C: 创建模式
-n #: 使用#个块设备来创建此RAID
-l #:指明要创建的RAID的级别 0 1 5 10
-c CHUNK_SIZE: 指明块大小,单位k
-x #: 指明空闲盘的个数 热备 盘 -x 1 /dev/sd#
-D:显示raid的详细信息
mdadm -D /dev/md#
软raid名字
管理模式:
-f: 标记指定磁盘为损坏
-a: 添加磁盘
-r: 移除磁盘
观察md的状态: cat /proc/mdstat
#使用mdadm创建并定义RAID设备
mdadm -C /dev/md0 -l 5 -n 3 -x 1 /dev/sd{b,c,d,e}1
命令 raid名 级别 盘数 热备
#用文件系统对每个RAID设备进行格式化
mkfs.xfs /dev/md0
#使用mdadm检查RAID设备的状况
mdadm --detail /dev/md0
mdadm -D /dev/md0
#增加新的成员
mdadm -G /dev/md0 -n4 -a /dev/sdf1
#模拟磁盘故障
mdadm /dev/md0 -f /dev/sda1
#移除磁盘
mdadm /dev/md0 -r /dev/sda1
#在备用驱动器上重建分区
mdadm /dev/md0 -a /dev/sda1
#系统日志信息
cat /proc/mdstat
生成配置文件:
mdadm -D -s >> /etc/mdadm.conf
停止设备:
mdadm -S /dev/md0
要先解挂载
激活设备:
mdadm -A -s /dev/md0
强制启动:
mdadm -R /dev/md0
删除raid信息:
mdadm --zero-superblock /dev/sdb1
建立raid5
建立raid5
[root@localhost ~]#mdadm -Cv /dev/md0 -l 5 -n 3 /dev/sd{b,c,d}1 -x1 /dev/sde1
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@localhost ~]#cat /proc/mdstat
#查看状态
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[4] sde1[3](S) sdc1[1] sdb1[0]
41908224 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
[==>..................] recovery = 11.4% (2403328/20954112) finish=1.4min speed=218484K/sec
unused devices: <none>
[root@localhost ~]#watch -n 5 'cat /proc/mdstat'
#每5秒看一次
[root@localhost ~]#mdadm -D /dev/md0
#查看状态
[root@localhost ~]#mdadm /dev/md0 -r /dev/sdb
mdadm: hot remove failed for /dev/sdb: Device or resource busy
[root@localhost ~]#mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
[root@localhost ~]#mdadm /dev/md0 -r /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md0
[root@localhost ~]#mdadm -D /dev/md0
建立raid 10
#创建RAID10 (先做镜象,再做条带)
mdadm -Cv /dev/md0 -l1 -n2 /dev/sd[bc]1
mdadm -Cv /dev/md1 -l1 -n2 /dev/sd[de]1
mdadm -Cv /dev/md10 -l10 -n2 /dev/md0/dev/md1
raid级别 | 是否提高读性能 | 是否提高写性能 | 最少使用几块盘 | 是否拥有冗余备份功能 | 实际磁盘容量 | 能坏几块盘 |
---|---|---|---|---|---|---|
0 | 是 | 是 | 2块 1 | 无(不单独使用) | 100% | 0 |
1 | 是 | 否 | 2n (n>=1) 2 | 有 | 50% | 1 |
5 | 是 | 否 | 3+ 3 | 有 | n-1 | 1 |
1+0 | 是 | 是 | 2n >= 4 | 有 | 50% | 最多两块,不在同一个raid1组 |