Redundant Arrays of Inexpensive(Independent) Disks
1988年由加利福尼亚大学伯克利分校的一个教授所提出的。
注:RAID级别的不同,所能提升的方面各有所不不同, 且成本也不同在试验中软RAID生成的磁盘名可能是/dev/mdN,但是在实际的生产环境中,生成的磁盘名是/dev/sdN,可能你正在使用的那块硬盘就是通过RAID阵列生成的。
常见的RAID level :
RAID-0:0, 条带卷,strip;
RAID-1: 1, 镜像卷,mirror;
RAID-2
..
RAID-5
RAID-6
RAID10
RAID01
RAID50
..
读、写性能提升;
可用空间:N*min(S1,S2,…)
无容错能力
最少磁盘数:2, 2+
在企业中基本被淘汰,就不过多描述了。
读性能提升、写性能略有下降;
可用空间:1*min(S1,S2,…)
有冗余能力
最少磁盘数:2, 2N
在企业中基本被淘汰,就不过多描述了。
多块数据盘异或运算值,存于专用校验盘
读、写性能提升
可用空间:(N-1)*min(S1,S2,…)
有容错能力:允许最多1块磁盘损坏
最少磁盘数:3, 3+
读、写性能提升
可用空间:(N-2)*min(S1,S2,…)
有容错能力:允许最多2块磁盘损坏
最少磁盘数:4, 4+
读、写性能提升
可用空间:N*min(S1,S2,…)/2
有容错能力:每组镜像最多只能坏一块
最少磁盘数:4, 4+
还有
RAID-01
RAID-50
…
注:在一些小型的公司,对硬盘要求不是太高的,一般是使用raid5或是raid10这两种,我下面重点介绍一下raid5这种阵列。
详细过程:全程用VM ContOS6软件raid模拟真实阵列。
echo '- - -' > /sys/class/scsi_host/host2/scan
[ root@centos6 ~ ]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 5.8G 0 rom /media/cdrom
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1000M 0 part /boot
├─sda2 8:2 0 48.8G 0 part /
├─sda3 8:3 0 39.1G 0 part /app
├─sda4 8:4 0 1K 0 part
├─sda5 8:5 0 2G 0 part [SWAP]
└─sda6 8:6 0 10G 0 part /home
sdb 8:16 0 20G 0 disk
sdc 8:32 0 21G 0 disk
sdd 8:48 0 22G 0 disk
sde 8:64 0 23G 0 disk
[ root@centos6 ~ ]# fdisk /dev/sdb(首先对/dev/sdb分区)
Command (m for help): n
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2610, default 1):
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +1G
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)
Command (m for help): w
The partition table has been altered!
sdb 8:16 0 20G 0 disk
└sdb1 8:17 0 1G 0 part
sdc 8:32 0 21G 0 disk
sdd 8:48 0 22G 0 disk
sde 8:64 0 23G 0 disk
可能有的朋友会发现sdb上并没有出现新的分区,那是因为不是是有那个的干净的新磁盘,那么可以使用命令同步。比如:
partx -a /dev/sdb
接下来有两种方法来实现分出接下来的3个分区
其一是按照上面的过程重复sdb1的分区过程,但是这样稍显麻烦。
其二则是使用dd命令,复制前512个字节,覆盖c,d,e的前512个字节。但是这样,只能分出来的区都是一样的大小。如要求所分区的大小不一样,使用第一种方法继续分区。
而我接下来使用dd命令来对sdc,d,e来分区:
dd if=/dev/sdb of=/dev/sdc bs=1 count=512
dd if=/dev/sdb of=/dev/sdd bs=1 count=512
dd if=/dev/sdb of=/dev/sde bs=1 count=512
partx -a /dev/sdc
partx -a /dev/sdd
partx -a /dev/sde
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 1G 0 part
sdc 8:32 0 21G 0 disk
└─sdc1 8:33 0 1G 0 part
sdd 8:48 0 22G 0 disk
└─sdd1 8:49 0 1G 0 part
sde 8:64 0 23G 0 disk
└─sde1 8:65 0 1G 0 part
mdadm这个模式化工具可以帮助我们实现阵列的创建。
顺便介绍一下mdadm的选项:
###模式:
创建:-C
装配:-A
监控:-F
管理:-f, -r, -a
###-C: 创建模式
-n #: 使用#个块设备来创建此RAID;
-l #:指明要创建的RAID的级别;
-a {yes|no}:自动创建目标RAID设备的设备文件;
-c CHUNK_SIZE: 指明块大小;
-x #: 指明空闲盘的个数;
###-D:显示raid的详细信息;
mdadm -D /dev/md#
###管理模式:
-f: 标记指定磁盘为损坏;
-a: 添加磁盘
-r: 移除磁盘
[ root@centos6 ~ ]# mdadm -C /dev/md5 -l 5 -n3 -x 1 /dev/sd{b,c,d,e}1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
4 8 49 2 active sync /dev/sdd1
3 8 65 - spare /dev/sde1
(我们可以很清楚的看到,sd{bcd}1在使用中,而sde1作为空闲备用盘放在一旁。)
[ root@centos6 ~ ]# mdadm -Ds /dev/md5
ARRAY /dev/md5 metadata=1.2 spares=1 name=centos6.9.magedu.com:5 UUID=fe8be162:1edb9d6d:e5df979b:e7be14bd
[ root@centos6 ~ ]# mdadm -Ds /dev/md5 > /etc/mdadm.conf
[ root@centos6 ~ ]# mkfs.ext4 /dev/md5
[ root@centos6 ~ ]# mkdir /mnt/raid5
[ root@centos6 ~ ]# mount /dev/md5 /mnt/raid5/
(这样我们就可以愉快的在这块raid上输入输出了…)
[ root@centos6 /mnt/raid5 ]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 50264772 5270400 42434372 12% /
tmpfs 502056 76 501980 1% /dev/shm
/dev/sda3 40185208 76504 38060704 1% /app
/dev/sda1 991512 34904 905408 4% /boot
/dev/sda6 10192924 123080 9545412 2% /home
/dev/sr0 6048356 6048356 0 100% /media/cdrom
/dev/md5 2018796 51728 1861188 3% /mnt/raid5
(很明显,我们可以在最后面看到/dev/md5已经挂载了)
- 假如现在,sdd1硬盘坏掉了,我们模拟出这种情况下,看raid5阵列的应对方式。
[ root@centos6 /mnt/raid5 ]# mdadm /dev/md5 -f /dev/sdd1
mdadm: set /dev/sdd1 faulty in /dev/md5
[ root@centos6 /mnt/raid5 ]# mdadm -D /dev/md5
Update Time : Sun Aug 13 03:49:38 2017
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 3
Failed Devices : 1
Spare Devices : 1
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
3 8 65 2 spare rebuilding /dev/sde1
4 8 49 - faulty /dev/sdd1
(我们现在可以看到,state里面出现了degraded, recovering,Working Devices少了1,且,空闲盘/dev/sde1已经顶替了之前的/dev/sdd1的位子,而/dev/sdd1则进入了faulty状态。)
[ root@centos6 /mnt/raid5 ]# mdadm /dev/md5 -f /dev/sde1
mdadm: set /dev/sde1 faulty in /dev/md5
[ root@centos6 /mnt/raid5 ]# mdadm -D /dev/md5
Update Time : Sun Aug 13 03:53:48 2017
State : clean, degraded
Active Devices : 2
Working Devices : 2
Failed Devices : 2
Spare Devices : 0
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
4 0 0 4 removed
3 8 65 - faulty /dev/sde1
4 8 49 - faulty /dev/sdd1
(这下工作盘又减少了1,/dev/sde1也进入了faulty状态,虽然上面的级别还是raid5显示,但是实际上已经进入了降级状态,且存储读取速度大大降低)
[ root@centos6 /mnt/raid5 ]# mdadm /dev/md5 -r /dev/sde1
mdadm: hot removed /dev/sde1 from /dev/md5
[ root@centos6 /mnt/raid5 ]# mdadm /dev/md5 -r /dev/sdd1
mdadm: hot removed /dev/sdd1 from /dev/md5
[ root@centos6 /mnt/raid5 ]# mdadm /dev/md5 -a /dev/sdd1
mdadm: added /dev/sdd1
[ root@centos6 /mnt/raid5 ]# mdadm /dev/md5 -a /dev/sde1
mdadm: added /dev/sde1
[ root@centos6 /mnt/raid5 ]# mdadm -D /dev/md5
Update Time : Sun Aug 13 04:06:32 2017
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
3 8 49 2 active sync /dev/sdd1
4 8 65 - spare /dev/sde1
(可以看出,state又恢复了clean状态,工作盘也是4个了,sde1又变成了之前的空闲备用盘了)
[ root@centos6 /mnt/raid5 ]# dd if=/dev/zero of=f1 bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 3.65511 s, 287 MB/s
(可以很清楚的看出,写速度是287MB/s的速度)
[ root@centos6 /mnt/raid5 ]# dd if=f1 of=/dev/null
2048000+0 records in
2048000+0 records out
1048576000 bytes (1.0 GB) copied, 1.57253 s, 667 MB/s
(读性能在我这破本本上达到了惊人的667MBMB/s,感觉不科学…)
写速度
[ root@centos6 ~ ]# dd if=/dev/zero of=f1 bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 17.3834 s, 60.3 MB/s
读速度
[ root@centos6 ~ ]# dd if=f1 of=/dev/null
2048000+0 records in
2048000+0 records out
1048576000 bytes (1.0 GB) copied, 16.4121 s, 63.9 MB/s
(我的本本是机械硬盘,可以很明显的看到读写都是在60MB左右。)
对于使用软件raid5阵列模拟生产所测验出的数据,我持怀疑态度,
第一,我使用的是机械硬盘,根本不可能出现600+MB/s这种不科学的速度
第二,不管怎么样,我终究其实还是在一块硬盘上在操作,这种数据,可能只是模拟出来的假象。
第三,就算是在真实环境中,使用raid5这个阵列,在一切最理想的的条件下,使用3块工作硬盘,应该也只能达到2倍的速度。
但是,这只是模拟出来,让我们学习原理,以及怎么使用的。以上只是吐槽….
以上的信息只是个人观点,欢迎各位大神指出小白的错误之处,感激不尽。