独立冗余磁盘阵列(RAID)
磁盘阵列:原理是利用数组方式来作磁盘组,配合数据分散排列的设计,提升数据的安全性。磁盘阵列是由很多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。磁盘阵列还能利用同位检查的观念,在数组中任一颗磁盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中。
独立磁盘冗余阵列(RAID)是把相同的数据存储在多个硬盘的不同的地方(因此,冗余地)的方法。通过把数据放在多个硬盘上,输入输出操作能以平衡的方式交叠,改良性能。因为多个硬盘增加了平均故障间隔时间(MTBF),储存冗余数据也增加了容错。
我们来说一下RAID的级别,RAID的级别没有明确的上下级关系,它只不过是磁盘的不同组成方式而已。RAID分为硬件RAID,软件RAID;硬件顾名思义就是硬件设备通过RAID的组成方式来实现数据存储的,而软件则是通过软件模拟出来的。
RAID的磁盘组成方式主要有RAID 0~RAID 50,它们的侧重点和组成方式各有不同。
RAID 0:又称条带,它是通过连续的位或字节来分割一个数据,再分别存放在多个硬盘上,实现数据的存储和访问,它提高了数据的读、写能力,但是它没有数据的冗余能力,如果一个磁盘坏了,将影响所有数据,如图:
将数据A分割为等同数据块A1、A2、A3、A4...,分别存放在两个不同的磁盘中,实现数据的性能的提升,当其中一个数据丢失,比如一个磁盘坏了,那么这个数据A就不完整了,不能被读出来,所以它没有冗余能力,两个磁盘都被有效的使用了,RAID 0空间利用率为100%。
RAID 1:又称为镜像,在成对的磁盘上通过互为备份的方法实现数据的冗余能力,当原数据繁忙时,可以从备份的磁盘中读取数据,提高了数据的读能力,因为同个数据要存放两次,所以它的写能力下降,空间利用率只有50%,如图:
A数据存储在disk 0上,但又通过镜像备份由备份了一份放在了disk 1上,所以当disk 0 坏了,disk 1上还有数据,不会影响其A数据。
RAID 4:又称为校验码技术,它是在RAID 0的基础上实现了改进,因为RAID 0没有数据冗余能力,所以在存储数据时,在每个数据块上存放一个特殊的标识来标记,然后在在用一个磁盘来存储这些标记,如图:
Disk 2就是用于磁盘标识符的盘,它被称为奇偶校验盘,当数据块A2丢失时,它可以通过计算得出A2 (1+2-1=2),实现了数据冗余能力,但是每次写操作都需要访问奇偶盘,这时奇偶校验盘会成为写操作的瓶颈,写能力就下降了,空间利用率为(n-1)/n,至少需要3块磁盘。
RAID 5:是再RAID 4的基础上改进的,它是让每个磁盘轮流做奇偶校验盘,如图:
在读写是可同时对磁盘进行操作,读写性能提高,有数据冗余能力,空间利用率为(n-1)/n,至少3块磁盘。
RAID 01:是RAID 0和RAID 1的组合产物,先是实现数据的条带,然后进行镜像备份,如图:
先对数据A在连续地以位或字节为单位分割数据并且并行读/写多个磁盘的同时,为每一块磁盘作磁盘镜像,它的优点是同时拥有RAID 0的超凡速度和RAID 1的数据高可靠性,但是CPU占用率同样也更高,而且磁盘的利用率比较低,读写性能都提高了,有数据冗余能力,空间利用率50%,至少4块磁盘组建。
RAID 10:它和RAID 01刚好一反,先镜像再分区数据,再将所有硬盘分为两组,如图
它是先将每组的数据块进行镜像备份,在进行数据的条带,当其中的一个磁盘坏了,也不会影响数据,读写性能提高,有数据冗余能力,空间利用率为50%,至少4块磁盘组建。
RAID 50:具备更高的容错能力,因为它允许某个组内有一个磁盘出现故障,而不会造成数据丢失。而且因为奇偶位分部于RAID5子磁盘组上,故重建速度有很大提高。优势:更高的容错能力,具备更快数据读取速率的潜力。需要注意的是:磁盘故障会影响吞吐量。故障后重建信息的时间比镜像配置情况下要长。
jbod:看中容量,实现将多个小盘组合成一个大盘来用,读写性能无提高,也无数据冗余能力,空间利用率100%,至少2块磁盘组合而成。
由于条件限制我们无法实现硬RAID,所以只能通过软件来实现仿真效果,那么我们来说一下,软RAID的具体用法及其注意事项;
我们在linux中,想实现RAID的操作,命令是比不可少的;
Mdadm命令就是我们要用到的命令,它能帮助我们实现磁盘阵列的创建,模拟磁盘故障等一些现实中常常出现的问题。
Mdadm是将任何块设备做成RAID,它具有一些模式化命令;
创建模式:
mdadm -C /dev/md# .....
专用选项:
-l:级别 -a {yes|no}:自动为其创建设备文件
-n:设备个数 -c:条带大小,默认为64K
在此之前我们现创建两个分区,分别为sda5,sda6,因为RAID 1的磁盘空间利用率为50%,一个用于存储数据,一个用于镜像备份数据。其格式为fd(linux raid auto),其创建分区不在演示说明;然后用命令mdadm 来创建RAID 1,命令mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sda{5,6},命令结束后可以用cat /proc/mdstat查看是否创建成功,如图:
管理模式:
--add|-a:添加磁盘 --remove|-r:移除磁盘 --fail|-f:模拟磁盘损坏
创建RAID 1成功后,要将其挂起才能用,挂起前还要对md1进行格式化mke2fs -j /dev/md1,然后挂起,成功后我们将一个文件拷贝到挂起点,挂起命令mount /dev/md1 /abc/sd5我选择的挂起点为/abc/sd5,用查看是否挂起的命令为mount,如图
我们用命令mdadm /dev/md1 -f /dev/sda6来模拟sd6盘损坏,看看是否影响拷贝的文件,让我们思考一下结果怎样?
那我们此时访问拷贝过来的文件,会访问成功吗?会成功,因为在拷贝过去的同时,也在另一个盘上镜像的有一份,所以一盘损坏不影响数据。
mdadm /dev/md1 -a /dev/sda7此命令是加载一个磁盘,当RAID 1中某个盘损坏了可以用sda7替换。
监控模式:-F 增长模式:-G 装备模式:-A
查看RAID阵列的详细信息,管理工具
mdadm --D /dev/md#
--detail
停止阵列:
mdadm -S /dev/md# (停止RAID阵列)
--stop
当要停止RAID时,可用此命令。