一、RAID简介
对于会进行大量磁盘数据读写的应用,需要磁盘拥有较高的IO能力
固态硬盘及一些专业的存储设备能提供较大的IO能力,但价格昂贵
RAID(Redundant Arrays of Independent Disks):独立磁盘冗余阵列,是一种将多块磁盘组合成一块以提高其I/O能力(并行读写)、冗余能力及耐用能力的技术
二、RAID的实现方式
外接式磁盘阵列:通过服务器外接扩展适配器连接至专用的外接式磁盘阵列设备的方式
内接式磁盘阵列:主板自身集成了RAID控制器
Software RAID:通过软件的形式实现RAID
结合内核中的md模块(multi disk)实现
mdadm:用户面向md内核模块的工具
三、RAID级别
RAID-0(条带卷,strip):
将数据通过RAID控制器分块存储到多块磁盘中,提高了磁盘的I/O吞吐能力
可用磁盘空间为所有磁盘空间总和;
无冗余能力,任何一块盘损坏,则该组数据损坏;
RAID-1(镜像卷,mirror):
将数据复制为多组储存在多块磁盘上
提高了读取能力,但是写速率会下降;
可用磁盘空间为最小磁盘的空间;
有冗余能力;
RAID-4:
将一组数据分为多个块存储到多个磁盘上,其中一块磁盘专门存储数据块1和数据块2的校验码(即块1和块2的ASCII异或运算),若其中储存数据块的磁盘损坏,可以通过校验磁盘和其它磁盘反推(异或运算)出损坏磁盘的数据
RAID-5:
将数据分为多个块存循环储存到储到多个磁盘上,每块磁盘做循环作为某个块的校验储存盘
提高了I/O性能;
可用空间:(N-1)*min(S1,S2...);
有冗余能力:允许坏一块盘;
RAID-6:
和RAID类似,但是使用两块校验盘做循环校验
提高了I/O性能;
可用空间:(N-2)*min(S1,S2...);
有冗余能力:允许坏两块磁盘;
RAID-10:主流技术
将多块磁盘分为n组,每组m个磁盘,组内做磁盘RAID-1镜像卷(提供冗余),各个组做RAID-0(提高I/O性能及磁盘可用空间)
读写性能好;
可用空间N*min(S1、S2...)
有冗余能力
RAID-01:不太常用
将多块磁盘分为n组,每组m个磁盘,组内做磁盘RAID-0条带卷(提供I/O性能及磁盘可用空间),各个组做RAID-1(提高冗余)
其它RAID技术:RAID-50
RAID7:厂家私有技术,性能强大,价格高昂)
JBOD:将多个磁盘空间合并为一个大的连续空间使用(储存较大的单个文件)
注意:
挂载RAID设备md时,建议用UUID挂载(重启后,挂载名可能会改变)
四、mdadm RAID管理工具
mdadm用户面向md内核模块的工具:
支持:LINEAR
RAID0
RAID1
RAID4
RAID5
RAUD6
RAID10
mdadm --version #查看mdadm的版本
mdadm -C /dev/mdn创建模式
-n n:使用n个块设备来创建该RAID;
-l n:指明要创建的RAID级别;
-a {yes|no}:自动创建目标RAID的设备文件;
-c :指明块大小
-x :指明冗余空闲盘的个数
注意:
若使用软RAID,需要将分区改为fd:Linux raid aut,并使用partx -a将分区加载到内核
mdadm -D /dev/mdn #查看md设备详细情况
mdadm -f /dev/md设备 /dev/sdn设备 #标记md设备中RAID中的某块sd磁盘为损坏
mdadm -a /dev/mdn设备 /dev/sdn设备 #将sdn设备添加到mdn中
(补充:添加的这块磁盘为RAID的空闲盘)
mdadm -r /dev/mdn设备 /dev/sdn设备 #将sdn设备(RAID中的某块磁盘)从mdn中移除
mdadm -S /dev/mdn #关闭mdn设备
cat /proc/mdstat #看md设备
watch -n1 'cat /proc/mdstat' #每一秒钟执信一次md设备查看
软RAID的使用示例:
查看md设备
[root@localhost ~]# cat /proc/mdstat
Personalities :
unused devices: <none>
创建RADI设备:
[root@localhost ~]# mdadm -C /dev/md0 -a yes -n 3 -x 1 -l 5 /dev/sde{5,6,7,8}
mdadm: largest drive (/dev/sde6) exceeds size (26624K) by more than 1%
Continue creating array?
Continue creating array? (y/n) y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
/dev/md0 #设备名称
-a #自动创建
-n 3 #使用3块设备创建
-x 1 #空闲盘个数为1个
-l 5 #RAID级别为5
/dev/sde{5,6,7,8} #使用/dev/sde{5,6,7,8}创建RAID
查看md设备
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sde7[4] sde8[3](S) sde6[1] sde5[0]
53248 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
格式化RAID设备:
[root@localhost ~]# mke2fs -t ext4 /dev/md0
挂载RAID设备:
[root@localhost ~]# mount /dev/md0 /mddata/
[root@localhost ~]# df -lh
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 19G 261M 18G 2% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/sda1 976M 30M 896M 4% /boot
/dev/sdf1 9.8G 23M 9.2G 1% /opt
/dev/sde1 9.8G 23M 9.2G 1% /tmp
/dev/sdd1 9.8G 651M 8.6G 7% /usr
/dev/sdc1 9.8G 23M 9.2G 1% /usr/local
/dev/sdb1 9.8G 53M 9.2G 1% /var
/dev/md0 47M 842K 43M 2% /mddata
标记md设备中RAID中的sde6磁盘为损坏盘
[root@localhost ~]# mdadm -f /dev/md0 /dev/sde6
mdadm: set /dev/sde6 faulty in /dev/md0
查看md设备详细情况
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Jan 11 20:23:52 2018
Raid Level : raid5
Array Size : 53248 (52.01 MiB 54.53 MB)
Used Dev Size : 26624 (26.00 MiB 27.26 MB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Jan 11 20:50:12 2018
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 1
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : 50372175:600997e2:797249e8:2e336149
Events : 37
Number Major Minor RaidDevice State
0 8 69 0 active sync /dev/sde5
3 8 72 1 active sync /dev/sde8
4 8 71 2 active sync /dev/sde7
1 8 70 - faulty /dev/sde6
将sde6设备添加到mdn中
[root@localhost ~]# mdadm -a /dev/md0 /dev/sde6
将sde8设备(RAID中的某块磁盘)从mdn中移除
[root@localhost ~]# mdadm -r /dev/md0 /dev/sde8