共计 4203 个字符,预计需要花费 11 分钟才能阅读完成。
RAID,一般翻译为磁盘阵列,全称是 Redundant Arrays of Inexpensive Disk,最初的构想是源于加州大学伯克利分校的一个研究小组的项目,他们希望通过大量廉价的硬盘来组建价格便宜,可用性高的磁盘阵列。但是 RAID 发展到今天,已经背离了当初价格便宜的初衷。但是 RAID 也带来了另外的好处,如何合理选择 RAID 的级别,可以构建出具有更高可用性,更好地容错的磁盘。
RAID 主要分为软件 RAID 和硬件 RAID,软件 RAID 主要是通过操作系统来实现,这样会增加 CPU 的负担,所以在实际场景中极少使用。硬件 RAID 使用独立的硬件设备和控制芯片,整体性能优于软件 RAID。RAID 有不同的规范,但是总体上可以分为两种:标准 RAID 和混合 RAID。虽然现在的 RAID 有很多不同的规范,但是很多规范只是一种过渡性的实验产品,在实际的生产环境中几乎不使用。
1、标准 RAID
1.1 RAID 0
RAID 0 也称为条带(strping),它将两个以上的硬盘串联起来,成为一个大容量的磁盘。在存储数据时,数据分散存储在这些磁盘中。因为数据读写都可以并行的进行,所以在所有的级别中,RIID 的速度是最快的。但是 RAID 既没有冗余功能,也不提供容错能力。如果有一个物理磁盘损坏,所有的数据都会丢失。所以,RAID 只是在一些对数据安全性要求不高,但是速度要求较高的场景下使用,比如视频,图像等工作站。
1.2 RAID 1
RAID 1 称为镜像技术,需要两块以上的硬盘互作镜像。也就是说,主盘上的数据和镜像盘上的数据完全一样。因此,在多线程的操作系统会大大提高数据的读取速度。RAID 1 的可靠性非常高,只要有一块硬盘正常就可以保证数据的完整性。但是 RAID 的缺点是浪费了大量的存储空间。
RAID2-RAID4 属于实验性的产品实际生产环境很少使用。
1.3 RAID 5
RAID 5 引入了数据校验的功能,并且校验的数据是分散的存储在各块硬盘上。RAID 5 实际上是速度与可靠性的一种折衷方案,在实际场景中应用较多。与 RAID 相比,存储成本比较便宜。RAID 5 至少需要 3 块磁盘来实现。
1.4 RAID 6
与 RAID 5 相比,RAID 增加了第二个独立的信息校验块。两个独立的奇偶系统使用不同的算法,数据的可靠性非常高,即使两块磁盘同时失效也不会影响数据的使用。RAID 6 至少需要 4 块以上的磁盘。
2、混合 RAID
2.1 JBOD
严格来讲 JBOD(Just a Bunch Of Disks)并不属于 RAID 的等级,JBOD 并没有严格的规范,主要是用于实现将各个独立的硬盘空间在逻辑上组合成一个大的硬盘。如果硬盘损毁,则存在上面的数据将无法救回。若第一块硬盘损坏,将丢失所有的数据,危险程度与 RAID 0 相比有过之无不及。但是 JBOD 也有它的应用场景,例如 Hadoop 就鼓励使用 JBOD,因为 Hadoop 由自己的一套容灾方案。
2.2 RAID 01
RAID 01 是 RAID 0 与 RAID 1 的一种组合。主要实现方案是先将数据分成两组,然后再对数据进行镜像映射。即先实现 RAID 0,再实现 RAID 1。
2.3 RAID 10
RAID 10 与 RAID 01 恰好相反,是先进行数据镜像,然后才对数据进行分组。
2.4 RAID 50
RAID 5 与 RAID 0 的结合,先作 RAID 5,在作 RAID 0,也就是对多组 RAID 5 构成条带化的访问。RAID 50 以 RAID 5 为基础,而 RAID 5 至少需要 3 块硬盘,要以多组 RAID 5 构成 RAID 50,因此 RAID 至少需要 6 块硬盘。RAID 50 在底层任意一组或多组 RAID 5 中出现一块硬盘损坏时,仍然可以维持运作,不过任意一组同时出现两块硬盘损坏时,整组 RAID 50 就会失效。
通过 Linux 实现软 RAID:
在 Linux 实现 RAID 主要是通过 mdadm 来实现。
mdadm 属于模式化的命令,主要模式有:
创建模式
管理模式
监控模式
增长模式
装配模式
mdadm 的基本格式为:
#mdadm [mode] [options]
装配模式 RAID 的选项有:
-l:指定 RAID 的级别;
-n:指定设备数,即磁盘的个数;
-a:自动为其创建设备文件;
-c,–chunk 指定分割数据块的大小
1. 实现 RAID 0:
准备工作:
两个 1G 大小的磁盘分区。
[root@local ~]# mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb{1,2}
mdadm: /dev/sdb1 appears to contain an ext2fs file system
size=104388K mtime=Thu Jan 1 08:00:00 1970
Continue creating array? (y/n) y
为其创建文件系统:
[root@local ~]# mke2fs -j /dev/md0
挂载文件系统:
[root@local mnt]# mount /dev/md0 /mnt/raid
查看挂载文件系统的信息:
[root@local mnt]# df -h
文件系统 容量 已用 可用 已用 % 挂载点
/dev/mapper/VolGroup00-LogVol00
18G 3.3G 14G 20% /
/dev/sda1 99M 13M 82M 13% /boot
tmpfs 252M 0 252M 0% /dev/shm
/dev/sr0 3.3G 3.3G 0 100% /mnt/cdrom
.host:/ 56G 44G 12G 79% /mnt/hgfs
/dev/md0 1.9G 35M 1.8G 2% /mnt/raid
这里显示文件并没有 2G 是正常显现,因为 RAID 本身也有一些元数据需要保存。
2. 实现 RAID 1:
准备工作:
两块 1G 大小的磁盘分区。
[root@local ~]# mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sdb{5,6}
查看状态信息
[root@local ~]# cat /proc/mdstat
Personalities : [raid0] [raid1]
md1 : active raid1 sdb6[1] sdb5[0]
987840 blocks [2/2] [UU]
md0 : active raid0 sdb2[1] sdb1[0]
1975744 blocks 64k chunks
unused devices: <none>
创建文件系统
[root@local ~]# mke2fs -j /dev/md1
查看指定 RAID 设备的详细信息
[root@local ~]# mdadm -D /dev/md1
/dev/md1:
Version : 0.90
Creation Time : Tue Mar 3 17:26:24 2015
Raid Level : raid1
Array Size : 987840 (964.85 MiB 1011.55 MB)
Used Dev Size : 987840 (964.85 MiB 1011.55 MB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 1
Persistence : Superblock is persistent
Update Time : Tue Mar 3 17:30:22 2015
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
UUID : f6a3844f:282828af:45d573d8:5f0aa269
Events : 0.4
Number Major Minor RaidDevice State
0 8 21 0 active sync /dev/sdb5
1 8 22 1 active sync /dev/sdb6
模拟一块硬盘损坏(管理模式)
[root@local ~]# mdadm /dev/md1 –fail /dev/sdb5
mdadm: set /dev/sdb5 faulty in /dev/md1
移除损坏的硬盘:(-r = –remove)
[root@local ~]# mdadm /dev/md1 -r /dev/sdb5
mdadm: hot removed /dev/sdb5
更换新盘(和坏掉的盘的分区应保持一致)
[root@local ~]# mdadm /dev/md1 -a /dev/sdb7
mdadm: added /dev/sdb7
停止磁盘阵列
[root@local ~]# mdadm -S /dev/md1
mdadm: stopped /dev/md1
重新装配磁盘阵列
[root@local ~]# mdadm -A –run /dev/md1 /dev/sdb5 /dev/sdb6
mdadm: /dev/md1 has been started with 1 drive (out of 2).
扫描磁盘阵列的信息,以后可以实现自动装配:
[root@local ~]# mdadm -D –scan > /etc/mdadm.conf
3. 实现 RAID 5:
准备工作:
3 块 512M 大小的磁盘
[root@local ~]# mdadm -C /dev/md5 -l5 -n3 /dev/sdb{8,9,10}
如何在 Linux 上构建 RAID 10 阵列 http://www.linuxidc.com/Linux/2014-12/110318.htm
Debian 软 RAID 安装笔记 – 使用 mdadm 安装 RAID1 http://www.linuxidc.com/Linux/2013-06/86487.htm
常用 RAID 技术介绍以及示例演示 (多图) http://www.linuxidc.com/Linux/2013-03/81481.htm
Linux 实现最常用的磁盘阵列 – RAID5 http://www.linuxidc.com/Linux/2013-01/77880.htm
RAID0+ 1 和 RAID5 的性能测试结果 http://www.linuxidc.com/Linux/2012-07/65567.htm
Linux 入门教程:磁盘阵列(RAID)http://www.linuxidc.com/Linux/2014-07/104444.htm