前言
在工作中,随着项目规模的扩大,对存储空间的需求就变的很高,甚至有时候会遇到磁盘容量不够用的情况,这时候我们是选择换内存更大的还是怎么办呢?其实可以利用一种存储机制,即磁盘阵列(RAID)。
一、RAID磁盘阵列
-
RAID是英文 Redundant Array of Independent Disks的缩写,中文简称为独立冗余磁盘阵列 -
简单的来说就是把多块独立的物理硬盘按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术 -
组成磁盘阵列的不同方式称为RAID级别(RAID Levels) -
常用的RAID级别: RAID 0,RAID 1,RAID 5,RAID 6,RAID 1 0等
1. RAID 0 (条带化存储)
- RAID 0连续以位或字节为单位分隔数据,并行读/写于多个磁盘上,因此有很高的数据传输率,但没有数据冗余
- RAID 0只是单纯地提高性能,并没有为数据的可靠性提供保证,而且其中的一个磁盘失效将影响到所有数据
- RAID 0不能应用于数据安全性要求高的场合
2.RAID 1 (镜像存储)
- 通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据
- 当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID 1可以提高读取性能
- RAID1是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。
- 当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据
3.RAID 5
- N(N≥3)块盘组成阵列,一份数据产生N-1个条带,同时还有1份校验数据,共N份数据在N块盘上循环均衡存储
- N块盘同时读写,读性能很高,但由于有校验机制的问题,写性能相对不高
- 磁盘利用率为(N-1)/N,可靠性高,允许坏1块盘,不影响所有数据
4.RAID 6
- RAID 6由N(N≥4)块盘组成阵列,磁盘利用率为(N-2)/N
- RAID 6采用双重校验技术,在RAID 5的技术上增加了第二个独立的奇偶校验信息块,两个独立的奇偶系统使用不同的算法使得数据的可靠性非常高
- 相对于RAID 5有更大的“写损失”,因此写性能较差
5. RAID 1+0
-
RAID 1+0顾名思义是RAID 1和RAID 0 的组合 -
兼顾了RAID 1的容错能力和RAID 0的条带化读写数据的优点,性能好,可靠性高,属于混合型RAID -
N(偶数,N≥4)块硬盘两两镜像后,再组合成一个RAID 0 ,最多允许所有磁盘基组中的磁盘各损坏一个,不允许同一基组中的磁盘同时损坏 -
磁盘利用率为N/2 ,N/2快块盘同时写入数据,N块盘同时读取数据 -
类似的混合RAID 还有RAID 0+1 ,二个在读写性能上差别不大,但是在安全性上RAID 1+0要比后者更好
6.RAID之间对比表
RAID级别 | 硬盘数量 | 磁盘利用率 | 是否有校验 | 保护能力 | 写性能 |
---|
RAID 0 | N | N | 无 | 无 | 单个硬盘的N倍 | RAID1 | N(偶数) | N/2. | 无 | 允许一个设备故障 | 需写两对存储设备,互为主备 | RAID 5 | N≥3 | (N-1) /N | 有 | 允许一个设备故障 | 需写计算校验 | RAID 6 | N≥4 | (N-2) /N | 有 | 允许两个设备故障 | 需双重写计算校验 | RAID 1+0 | N≥4(偶数) | N/2 | 无 | 允许两个基组中各坏一个 | N/2块盘同时写入 |
二、阵列卡
1.阵列卡介绍
- 阵列卡全称磁盘阵列卡,是用来实现RAID功能的板卡
- 通常是由I/O处理器、硬盘控制器、硬盘连接器和缓存等一系列组件构成的
- 不同的RAID卡支持的RAID功能不同,比如支持RAIDO、RAID1、RAID5、RAID10等
2.接口类型
RAID卡的接口指的是支持的接口,目前有IDE接口、SCSI接口、SATA接口和SAS接口。
3.阵列卡的缓存
- 缓存(Cache)是RAID卡与外部总线交换数据的场所,工作过程中RAID卡先将数据传送到缓存,再由缓存和外边数据总线进行数据交换
- 缓存的大小与速度是直接关系到RAID卡的实际传输速度的重要因素
- 不同的RAID卡出厂时配备的内存容量不同,一般为几兆到数百兆容量不等
三、RAID 5 配置
1.添加硬盘
在虚拟机中添加四块硬盘,每块大小60GB 。 添加完成后查看是否添加成功
[root@localhost ~]#echo "- - -"> /sys/class/scsi_host/host0/scan #刷新(也可以选择重启)
[root@localhost ~]#lsblk #查看是否添加成功
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 59.5G 0 part
├─centos-root 253:0 0 55.5G 0 lvm /
└─centos-swap 253:1 0 4G 0 lvm [SWAP]
sdb 8:16 0 60G 0 disk
sdc 8:32 0 60G 0 disk
sdd 8:48 0 60G 0 disk
sde 8:64 0 60G 0 disk
sr0 11:0 1 1024M 0 rom
[root@localhost ~]#
2.检查是否已安装mdadm软件包
[root@localhost ~]#rpm -q mdadm
mdadm-4.0-5.el7.x86_64
[root@localhost ~]#
3.给新磁盘分区
[root@localhost ~]#fdisk /dev/sdb
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):fd
已将分区“Linux”的类型更改为“Linux raid autodetect”
命令(输入 m 获取帮助):w
以同样的方法对剩下的三个进行分区,分别为sdb1 、sdc1、sdd1、sde1 ,并且把分区ID号改为“fd” 。
4.创建RAID设备
[root@localhost ~]#mdadm -C -v /dev/md5 -l5 -n3 /dev/sd[b-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 62880768K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
- C:表示新建
- -v:显示创建过程中的详细信息
- /dev/md5 :创建RAID5的名称
- -l5:指定RAID的级别,l5表示RAID 5
- -n :指定使用n块硬盘创建RAID
- -x1 :指定使用一块硬盘作为RAID的热备用盘
- /dev/sde1 :指定sde1作为备用的磁盘
5.格式化
创建文件系统(xfs)
[root@localhost ~]#mkfs.xfs /dev/md5
meta-data=/dev/md5 isize=512 agcount=16, agsize=1964928 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=31438848, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=15352, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
创建挂载目录并进行挂载
[root@localhost ~]#mkdir /opt/group_md5
[root@localhost ~]#mount /dev/md5 /opt/group_md5/
[root@localhost ~]#df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 56G 3.7G 52G 7% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 9.1M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 497M 172M 326M 35% /boot
tmpfs tmpfs 378M 40K 378M 1% /run/user/0
/dev/md5 xfs 120G 33M 120G 1% /opt/group_md5
[root@localhost ~]#cd /opt/
[root@localhost /opt]#cd group_md5/
[root@localhost /opt/group_md5]#touch {1..6}.txt
[root@localhost /opt/group_md5]#ls
1.txt 2.txt 3.txt 4.txt 5.txt 6.txt
6.设置故障
[root@localhost /opt]#mdadm /dev/md5 -f /dev/sdc1 #模拟/dev/sdc1故障
mdadm: set /dev/sdc1 faulty in /dev/md5
[root@localhost /opt]#mdadm -D /dev/md5 #查看RAID详细信息
/dev/md5:
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
3 8 65 1 spare rebuilding /dev/sde1 #sde1顶替了sdc1
4 8 49 2 active sync /dev/sdd1
1 8 33 - faulty /dev/sdc1 #这里可以看到sdc1已停用
查看一下之前的数据还在不在:
[root@localhost /opt]#cd group_md5/
[root@localhost /opt/group_md5]#ls
1.txt 2.txt 3.txt 4.txt 5.txt 6.txt #可以看到数据依然存在
[root@localhost /opt/group_md5]#
7.进行恢复
先创建/etc/mdadm.conf 配置文件,方便管理软RAID的配置,比如启动、停止等:
[root@localhost /opt]#echo ' DEVICE /dev/sdc1 /dev/sdb1 /dev/sdd1 /dev/sde1 ' > /etc/mdadm.conf
[root@localhost /opt]#cat /etc/mdadm.conf
DEVICE /dev/sdc1 /dev/sdb1 /dev/sdd1 /dev/sde1
[root@localhost /opt]#mdadm --detail --scan >> /etc/mdadm.conf
[root@localhost /opt]#cat /etc/mdadm.conf
DEVICE /dev/sdc1 /dev/sdb1 /dev/sdd1 /dev/sde1
ARRAY /dev/md5 metadata=1.2 name=localhost.localdomain:5 UUID=85493ab3:7fd3fca0:c0c150fd:675d7e2e
取消挂载并查看
root@localhost /opt]#umount /dev/md5
[root@localhost /opt]#df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 56G 3.7G 52G 7% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 9.1M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 497M 172M 326M 35% /boot
tmpfs 378M 40K 378M 1% /run/user/0
停止RAID5并查看状态
[root@localhost /opt]#mdadm -S /dev/md5
mdadm: stopped /dev/md5
[root@localhost /opt]#mdadm -D /dev/md5
mdadm: cannot open /dev/md5: No such file or directory
启动RAID5并查看
[root@localhost /opt]#mdadm -As /dev/md5
mdadm: /dev/md5 has been started with 3 drives.
[root@localhost /opt]#mdadm -D /dev/md5
/dev/md5:
......省略
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
3 8 65 1 active sync /dev/sde1
4 8 49 2 active sync /dev/sdd1 #这里发现sdc1消失了
添加磁盘sdc1
[root@localhost /opt]#mdadm /dev/md5 -a /dev/sdc1
mdadm: added /dev/sdc1
[root@localhost /opt]#mdadm -D /dev/md5
/dev/md5:
......省略
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
3 8 65 1 active sync /dev/sde1
4 8 49 2 active sync /dev/sdd1
5 8 33 - spare /dev/sdc1 #这里可以看到sdc1变成备份状态了
8.命令详解
选项 | 说明 | 示例 |
---|
-r | 移除设备 | mdadm /dev/md5 -f /dev/sdc1 | -a | 添加设备 | mdadm /dev/md5 -a /dev/ sdc1 | -A | 启动RAID | mdadm /dev/md5 -A /dev/sdc1 | -S | 停止RAID | mdadm /dev/md5 -S /dev/sdc1 |
注意:-s: 是指查找 /etc/mdadm. conf 文件中的配置信息
mdadm -E /dev/sd[b-e] 1
cat /proc/mdstat 或者 mdadm -D /dev/md0
- 用watch命令来每隔-一段时间刷新/proc/mdstat的输出,命令如下:
watch -n 10 ' cat /proc/mdstat '
总结
综合上述的几种RAID,一般推荐使用的是RAID1+0,为什么呢?
- 你可以想象自己拥有20块磁盘组成的系统,每两块组成一个 RAID 1,因此你就有总共10组可以自己恢复的系统了。然后这10组再组成一个新的RAID 0,速度立刻提升了10倍。
- 并且因为每组RAID1是独立存在的,所以任何一块磁盘损坏,数据都是从另一块磁盘直接复制过来重建,并不像RAID 5和RAID6那样必须要整组RAID 的磁盘共同重建一块独立的磁盘系统,性能上差得非常多。
- 而且RAID1与RAID 0是不需要经过计算的,读写性能也比其他的RAID好很多。
|