介绍:
RAID(RedundantArry of Independent Disks)独立冗余阵列,旧称(Redundant Arry of Inexpensive Disks)廉价冗余阵列,其主要目的是将多个硬盘组成在一起来达到提高I/O、读写、冗余性
RAID实现方式:
硬RAID
1、硬件RAID通过RAID卡提供适配能力从而连接多个硬盘
2、主板中集成了RAID控制器来实现RAID的相关功能
软RAID
软件RAID则通过软件层面模拟实现RAID的相关功能。
RAID的优势:
RAID在容量和管理上的优势
易于灵活的进行容量扩展
“虚拟化”使可管理性极大的增强
RAID在性能上的优势
“磁盘分块”技术带来性能的提高
RAID在可靠性和可用性上的优势
通过冗余技术和热备、热换提升了可靠性
RAID级别:
组成RAID阵列的不同方式称为RAID级别
不同的RAID级别
不同的存储性能
不同的数据可靠性
不同的存储成本
什么是镜像冗余:
镜像冗余使用了磁盘镜像技术
磁盘镜像是一个简单的设备虚拟化技术,每个I/O操作都会在两个磁盘上执行,两个磁盘看起来就像一个磁盘一样
镜像冗余可以提高磁盘的读性能
什么是校验冗余:
根据冗余算法计算阵列中成员磁盘上数据的校验信息,将校验信息保存在其他的磁盘资源上
保证数据可靠性
和镜像冗余相比较,校验冗余的开销更小
什么是XOR算法:
相同为假,不同为真
XOR的逆操作是XOR
操作数1 |
操作数2 | 结果 |
假 |
假 | 假 |
假 | 真 | 真 |
真 |
假 | 真 |
真 |
真 | 假 |
常见Raid级别:
Raid-0
将多块硬盘以条带的形式将数据均匀分布在阵列的各个磁盘上
简单来说就是将要处理的数据块(chunk)分别在两个硬盘上同时处理, Disk0处理A1,Disk1处理A2,从而实现提高硬盘性能,但是这样的话硬盘性能虽然提高了但是可靠性大大降低,由于RAID-0的特性,只要有一块硬盘损坏,这个磁盘阵列上的所有数据都可能会丢失,生产环境中一般不会使用
图示:
使用领域:视频生成和编辑、图像编辑其他需要大的传输带宽的操作
总结:
1. 提高了磁盘的读,写IO性能,理论为硬盘的原速度*硬盘数
2. 无容错能力,不存在校验,不会占用太多的CPU资源,设计使用和配置的比较简单,不能对数据安全性要求更高的环境
3. 最少使用2块硬盘
4. 硬盘可用空间为所有硬盘中空间最小的硬盘空间乘以硬盘总数,公式 N*min(Disk0..DiskN)
Raid-1
介绍:
将多个硬盘相互做成镜像提高冗余能力,读取速度[对虚拟磁盘上的数据做多份拷贝,放在成员磁盘上]
简单的来说就是两个(一般情况下RAID-1都是两个硬盘组成)或多个硬盘做成镜像,例如:给Disk0写入数据的时候,Disk1也写入数据,当Disk0损坏,Disk1的数据还保存着。这样极大提高了冗余能力,读取时两个硬盘也可以并行读取来提高读取性能,但是写入速度略有下降
图示:
使用领域:
财务、金融等高可用、高安全的数据存储环境
总结:
1. 提高了读性能,写性能下降
2. 具有100%数据冗余,提供最高的数据安全保障
3. 理论上可以实现2倍的读取效率设计和使用比较简单
4. 最少使用2块硬盘
5. 开销大,空格键利用率只有50%在写性能上提升不大
6. 硬盘可用空间为所有硬盘空间最小硬盘的空间大小公式为:1*min(disk0,disk1,disk2…diskn)
Raid-3
介绍:
在RAID3中,数据块被分为更小的块并行传输到各个成员磁盘上,同时计算XOR校验数据存放到专用的校验磁盘上
Raid-3总结:
1. 读写性能表较好,当有磁盘损坏时,对整体吞吐量影响较小,较少了开销
2. 至少需要三个磁盘,三个或者多个为好
3. 控制器设计复杂
4. 采用并行存取方式,主轴同步时吞吐量没有提高
5. 校验磁盘的写性能有瓶颈
Raid-4
介绍:
由三块或三块以上设备组成,并行处理磁盘性能,一个硬盘存储冗余校验码,通过异或运算还原数据
简单来说就是三个或三个以上的硬盘组成一组设备可以实现当某一个硬盘损坏可以使其数据通过异或运算还原,通过读写并行处理提高性能,但是因为冗余校验码都是存放在单一硬盘上,所以此硬盘性能可能会很差,并且易损坏。
图示:
总结:
1. 提高读写性能,IO性能,但是存放校验码的硬盘性能差
2. 提高硬盘的容错能力但是使用一块硬盘存放校验码,要是此硬盘损坏后,后果可想而知的
3. 最少使用三块硬盘
4. 最大磁盘使用空间,为所有硬盘空间中空间最小的硬盘的空间大小乘以硬盘数减去一,公式(N-1)*min(disk1..diskn)
RAID-5
介绍:
相比于RAID-4而言,冗余校验码分别存放在每个硬盘中
简单的来说,RAID-5就是RAID-4的升级版,弥补了RAID-4的缺陷,将RAID-4中被诟病的缺点:“冗余校验码存放在一个硬盘上”得以解决,RAID-5采用将冗余校验码分别存放在每一个磁盘上来达到负载均衡的效果,而且极大的提高了整体性能,但是只能提供一块硬盘的冗余。
图示:
RAID-5总结
1、提高IO性能,读性能比较高,中等的写性能
2、校验信息分布式存储,避免出现写操作的瓶颈
3、最少使用3块硬盘
4、控制器设计复杂,磁盘重建的过程比较复杂
5、最大硬盘使用空间,为所有硬盘中空间最小的硬盘的空间大小乘以硬盘数减去1, 公式(N-1)*min(Disk1..DiskN)
RAID-10/01
简单的来说,RAID-10/01是两种混合型RAID,RAID-10先将所有硬盘分成N组组成RAID-1提高冗余性,然后将其按组组成RAID-0提高硬盘性能,最多可支持半数硬盘损坏而不丢失数据。RAID-01先将所有硬盘分成N组组成RAID0提高性能,然后将其按组组成RAID-1提高冗余性,运气不好两块硬盘损坏就可能导致全部硬盘数据丢失。
Raid-6
总结:
1)读写性能提升
2)有容错1块磁盘的容错能力
3)可用磁盘的数至少为3个
4)可用空间为(N-1)*min(s1,s2,s3…)
RAID-10图示:
适应领域:
多用于要求高可用性和高安全性的数据库应用
RAID-10总结
1、提高了读写、IO性能
2、提高了容错能力,最多支持半数硬盘损坏,空间利用率只有50%
3、最少使用4块硬盘
4、最大硬盘使用空间,为所有硬盘中空间最小的硬盘的空间大小乘以2, 公式(N*min(Disk0..Disk1))/2
RAID-01图示:
RAID-01总结
1、提高了读写、IO性能
2、提高了容错能力,但是效果不是很好,因为先使用不可靠的RAID-0在使用可靠的RAID1,就好像建房子地基偷工减料,而顶层却建的很结实
3、最少使用4块硬盘
4、最大硬盘使用空间,为所有硬盘中空间最小的硬盘的空间大小乘以2, 公式(N*min(Disk0..Disk1))/2
RAID50
RAID50是RAID5和RAID0的结合,先实现RAID5,再条带化
图示:
适应领域:
大型数据库服务器、应用服务器、文件服务器等应用
总结:
1. 最少使用6个磁盘或者更多
2. 比RAID5有更好的读性能,比相同容量的RAID5重建时间更短,可以容许N个磁盘同时失效
3. 设计复杂,比较难实现,同一个RAID5组内的两个磁盘失效会导致整个阵列的失效
常用RAID比较:
【扩展】
JBOD:Just a bunch disks
功能:将多块磁盘的空间连接在一起,形成一个可使用的连续的空间
如何创建软EAID:
命令的语法格式:mdadm [mode] <raiddevice> [options] <component-device>
支持的RAID级别:LINEAR, RAID0, RAID1, RAID4,RAID5,RAID6,RAID10
模式:
创建模式:-C
-n #:使用#个块设备来创建此RAID
-l #:指明要创建的RAID的级别
-a {yes|no}:是否自动创建目标RAID设备的设备文件
-c CHUNK_SIZE:指明块大小
[root@linus ~]# mdadm -C /dev/md0 -ayes -c 128 -n 2 -l 1 /dev/sda{6,7}
-x #:指明空闲盘(热备磁盘)的个数,空闲盘(热备磁盘)能在工作盘损坏后自动顶替
装配模式:-A(软RAID是基于系统的,当原系统损坏了,需要重新装配RAID)
监控模式:-F
停止阵列:-S
增长模式,用于增加磁盘,为阵列扩容:-G
-n 4:表示使用4块工作磁盘
管理模式:
-f 模拟破坏
-r 移除损坏的磁盘
-a 添加系点呢硬盘到已有的阵列
新增加的硬盘需要与原硬盘大小一致
如果原有阵列缺少工作磁盘(如raid1只有一块在工作,raid5只有2块在工作),这时新增加的磁盘直接变为工作磁盘,如果原有阵列工作正常,则新增加的磁盘为热备磁盘。
<raiddevice>:/dev/md#
<component-devices>:任意块设备
-C:创建模式
-D:查看raid的详细信息
mdadm -D /dev/md#
管理模式
-f:当作错误的磁盘来对待
-r:移除
-a:添加磁盘
系统环境:
[root@linus~]# fdisk -l Disk/dev/sda: 214.7 GB, 214748364800 bytes, 419430400 sectors Units= sectors of 1 * 512 = 512 bytes Sectorsize (logical/physical): 512 bytes / 512 bytes I/Osize (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Diskidentifier: 0x0000e6e0 Device Boot Start End Blocks Id System /dev/sda1 * 2048 1026047 512000 83 Linux /dev/sda2 1026048 84912127 41943040 83 Linux /dev/sda3 84912128 126855167 20971520 83 Linux /dev/sda4 126855168 419430399 146287616 5 Extended /dev/sda5 126859264 131055615 2098176 82 Linux swap / Solaris [root@linus~]#
实现目标:创建一个可用空间为8G的RAID1设备, 要求其chunk大小为128K, 文件系统为ext4,开机可自动挂载至/backup目录
(1)创建两个分区
root@linus ~]# fdisk -l Disk /dev/sda: 214.7 GB,214748364800 bytes, 419430400 sectors Units = sectors of 1 * 512 =512 bytes Sector size(logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal):512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x0000e6e0 Device Boot Start End Blocks Id System /dev/sda1 * 2048 1026047 512000 83 Linux /dev/sda2 1026048 84912127 41943040 83 Linux /dev/sda3 84912128 126855167 20971520 83 Linux /dev/sda4 126855168 419430399 146287616 5 Extended /dev/sda5 126859264 131055615 2098176 82 Linux swap / Solaris /dev/sda6 131057664 131262463 102400 83 Linux /dev/sda7 131264512 131469311 102400 83 Linux [root@linus ~]#
(2)调整分区格式:
Command (m for help): t Partition number (1-7,default 7): 6 Hex code (type L to list allcodes): fd Changed type of partition'Linux' to 'Linux raid autodetect' Command (m for help): t Partition number (1-7,default 7): 7 Hex code (type L to list allcodes): fd Changed type of partition'Linux' to 'Linux raid autodetect' Command (m for help): w The partition tablehas been altered! 查看 [root@linus ~]# fdisk -l /dev/sda Disk /dev/sda: 214.7 GB,214748364800 bytes, 419430400 sectors Units = sectors of 1 * 512 =512 bytes Sector size(logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal):512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x0000e6e0 Device Boot Start End Blocks Id System /dev/sda1 * 2048 1026047 512000 83 Linux /dev/sda2 1026048 84912127 41943040 83 Linux /dev/sda3 84912128 126855167 20971520 83 Linux /dev/sda4 126855168 419430399 146287616 5 Extended /dev/sda5 126859264 131055615 2098176 82 Linux swap / Solaris /dev/sda6 131057664 131262463 102400 fd Linux raid autodetect /dev/sda7 131264512 131469311 102400 fd Linux raid autodetect
(3)创建RAID设备
[root@linus ~]# mdadm -C /dev/md0 -ayes -c 128 -n 2 -l 1 /dev/sda{6,7} mdadm: Note: this array has metadata atthe start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 Continue creating array? yes mdadm: Defaulting to version 1.2metadata mdadm: array /dev/md0 started.
(4)查看创建的raid设备
[root@linus ~]# mdadm -D/dev/md0 /dev/md0: Version : 1.2 Creation Time : Thu Mar 17 12:34:59 2016 Raid Level : raid1 Array Size : 102272 (99.89 MiB 104.73 MB) Used Dev Size : 102272 (99.89 MiB 104.73 MB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Thu Mar 17 12:35:02 2016 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Name : linus:0 (local to host linus) UUID : acf16c97:603eed20:4b49c90d:ee2532d8 Events : 17 Number Major Minor RaidDevice State 0 8 6 0 active sync /dev/sda6 1 8 7 1 active sync /dev/sda7 [root@linus ~]#
(5)格式化raid磁盘
[扩展]
在格式化时,可以指定-E选项下的stride参数指定条带是块大小的多少倍,有在一定程度上提高软RAID性能,如块默认大小为4k,而条带大小默认为64k,则stride为16,这样就避免了RAID每次存取数据时都去计算条带大小,如:
Mkfs.ext4 �E stride=16 �b 4096 /dev/md0
其中stride=chunk/block,为2的n次方
[root@linus ~]# mke2fs -text4 /dev/md0 mke2fs 1.42.9 (28-Dec-2013) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) Stride=0 blocks, Stripewidth=0 blocks 25584 inodes, 102272 blocks 5113 blocks (5.00%) reservedfor the super user First data block=1 Maximum filesystemblocks=33685504 13 block groups 8192 blocks per group, 8192fragments per group 1968 inodes per group Superblock backups stored onblocks: 8193, 24577, 40961, 57345, 73729 Allocating group tables:done Writing inode tables:done Creating journal (4096blocks): done Writing superblocksand filesystem accounting information: done
(6)设置开机自启动
[root@linus ~]# ls / bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var [root@linus ~]# mkdir/backup [root@linus ~]# mount/dev/md0 /abckup mount: mount point /abckupdoes not exist [root@linus ~]# mount/dev/md0 /backup [root@linus ~]# cd /backup [root@linus backup]# ls lost+found [root@linus backup]# blkid/dev/md0 /dev/md0:UUID="c8f7730d-979c-4ddc-b4d8-e96848c0b2df" TYPE="ext4" [root@linus backup]# vim/etc/fstab # # /etc/fstab # Created by anaconda on ThuMar 17 14:22:48 2016 # # Accessible filesystems, byreference, are maintained under '/dev/disk' # See man pages fstab(5),findfs(8), mount(8) and/or blkid(8) for more info # UUID=48f42964-5994-4e88-8867-ed119e11ce69/ xfs defaults 0 0 UUID=c6802458-e3c7-4f17-a6b5-d31f21bb29fd/boot xfs defaults 0 0 UUID=a4ecae88-5e04-48e6-8a75-832d4588fc31/usr xfs defaults 0 0 UUID=7e36fd6d-0173-48ca-9352-b83ca572986dswap swap defaults 0 0 UUID="c8f7730d-979c-4ddc-b4d8-e96848c0b2df" /backup ext4 defaults 0 0
(7)查看挂在:
[root@linus backup]# mount-a [root@linus backup]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 41922560 140756 41781804 1% / devtmpfs 486152 0 486152 0% /dev tmpfs 500680 0 500680 0% /dev/shm tmpfs 500680 6904 493776 2% /run tmpfs 500680 0 500680 0% /sys/fs/cgroup /dev/sda3 20961280 2644128 18317152 13% /usr /dev/sda1 508588 141124 367464 28% /boot tmpfs 100136 0 100136 0% /run/user/0 /dev/md0 94939 1550 86231 2% /backup [root@linusbackup]#
(8)测试raid效果.
[root@linus backup]# cd/backup [root@linus backup]# ls lost+found [root@linus backup]# touchraid-linus-test [root@linus backup]# ll total 12 drwx------ 2 root root 12288Mar 17 12:37 lost+found -rw-r--r-- 1 root root 0 Mar 17 12:44 raid-linus-test [root@linus backup]# mdadm-f /dev/md0 /dev/sda6 mdadm: set /dev/sda6 faultyin /dev/md0 [root@linus backup]# mdadm-D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Thu Mar 17 12:34:59 2016 Raid Level : raid1 Array Size : 102272 (99.89 MiB 104.73 MB) Used Dev Size : 102272 (99.89 MiB 104.73 MB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Thu Mar 17 12:44:56 2016 State : clean, degraded Active Devices : 1 Working Devices : 1 Failed Devices : 1 Spare Devices : 0 Name : linus:0 (local to host linus) UUID :acf16c97:603eed20:4b49c90d:ee2532d8 Events : 21 Number Major Minor RaidDevice State 0 0 0 0 removed 1 8 7 1 active sync /dev/sda7 0 8 6 - faulty /dev/sda6 [root@linus backup]# cd/backup [root@linus backup]# ls lost+found raid-linus-test [root@linusbackup]#
仅供参考,谢谢点评