您的位置:首页 > 大数据 > 人工智能

RAID及软RAID的实现,包括各级别RAID的原理及各级别RAID的实现

2016-11-22 19:05 393 查看

计算机内部的核心部件

对于计算机来讲,核心部件有cpu 内存其中:cpu从内存中取得数据从而进行运算,由于内存是易失性设备,若是做成非易失性设备,代价是非常高昂的。但是由于cpu内部具有各级缓存,寄存器等等,所以内存的速度与cpu相比较是极其慢的。为了解决这一问题,我们只好通过IO设备将外部硬盘连接进来。

在内存中,一部分用来运行内核,而另外一部分是内核调用磁盘中存储的应用发起进程而占用的。不妨讲讲进程的运行过程,在应用发起进程后先被内核调用读取至内存中,由于内核本身就是一个应用程序,所以在其他进程读取至cpu之前,内核会先一步作为进程读取至cpu,而后读取需要运行某个进程的指令,此时,内核会从cpu退出到内存中,将此时需要运行的进程尝试装载至cpu。此时内核会与cpu保持连接,直至不需要运行这一进程,内核会把此进程从cpu中取出。以此内推,其余进程运行原理也如上述一致。当然,这只是比较简单的描述方式,真正的进程运行的机制远比上述的要复杂。

在计算机主板上,能与外部存储设备连接的总线大概有以下几种:
接口类型              速率
IDE                  133Mbps
SATA                 300Mbps
SATA2                600Mbps
SATA3                6Gps
USB2.0               40Mbps
USB3.0               480Mbs


#          1M=8Mbps


还有一种比较特殊的设备接口SCSI (Small computer System Interface),这种控制器内部装载的有cpu,所以当机械上的cpu需要读取磁盘中的文件时,会发送指令到SCSI中的cpu,此时机械上的cpu可以忽略这个工作,由SCSI中的cpu来完成此项工作,读取到目标文件后将此文件发送至内存中。再由内核发送至机械上的cpu,这种机制大大的加快了机械cpu的工作效率。

但无论何种方式,对于一个非常繁忙的服务器来讲,都无法满足这种需求,此时,我们应该提供更大、更快的IO存取设备,但一个设备无论如何也突破不了物理速率上限,这时候,我们就需要将多个设备组合起来并行使用,这样一来,速率就会大大的提升。这种方式叫做设备集群

设备集群(RAID)

事实上并不是集群,只是组合多个设备来更快的完成同一个工作,简单来讲,这种方式就好像在主板上又加了一个连接硬盘的控制器,只不过这个控制器并不是用来连接SCSI、SATA等接口的硬盘,而是通过这个控制器连接另外一个设备,这个设备可以将一个接口转换为多个接口,这里的多个接口可以接多个SATA设备,SCSI设备等,而在主机看来,主板只是识别连接了一个外部设备。这种控制器的与在设备之间的通信法则与其他控制器也不尽相同,这种控制器叫做RAID控制器。

事实上在RAID之前有一种更昂贵的控制器芯片(SLED)速度比较快,存储能力也比较强,但是由于高昂的价格,一直处于一个尴尬的地位。1987年,美国加州大学伯克利分校一个教授研究出来一种更为廉价的磁盘存取阵列。用的是当时的IDE磁盘被称为廉价冗余磁盘阵列(RAID)。

现在RAID更多的被称为独立冗余磁盘阵列,要想了解RAID机制,必须先要了解条带化,我们先举个例子,假如有120M的数据需要存取进磁盘中,数据在经过cpu处理过后,经过控制器分别分为4个30M的数据存进控制器连接的SATA设备等,而每一个30M的数据连接在一起就好像形成了一个条带,条带化就是这样形成的。

这样一来,一块磁盘所能完成的工作一下提高了四倍,而这样将多个磁盘组合起来,组合成一个阵列,当作一个逻辑设备来使用的机制,我们将这种机制称为RAID。

RAID级别

常用的级别主要有以下几种:

0:仅条带化,性能提升读写能力提升,不提供冗余能力(备份)利用率  (ns)
1: 镜像模式,两块盘作为一块盘使用,储存相同的内容性能提升,(读写) 提供冗余能力利用率ns/2
4:校检码模式
5:轮流作为校检盘,性能提升(读写) 提供冗余能力 利用率(n-1/n)ns
50:轮流作为校检盘,且提供镜像盘,


事实上,真正的RAID是集成在主板上的一个控制器,有时候为了保证数据安全性,甚至在RAID加入小型cpu,电池等等,但这样极大的增加了成本,所以可以使用软件来模拟硬件的方式来实现软RAID。

软RAID的实现

实现软RAID要用到*mdadm*这个命令,具体使用如下:
# mdadm [mode] <raiddevice> [options] <component-devices>

其中常用的mode(模式化的命令):
**创建模式:**
—C:专用选项
-l:指定RAID级别
-n:指定设备个数
-a:自动为其创建其设备文件
-c:指定chunk(数据块)大小
-x:指定空闲盘个数

**管理模式:**常用的有:
--add:往RAID阵列加入新的设备
--remove:移除磁盘
--fail:模拟磁盘损坏
监控模式:
-F
增长模式:
—G
装配模式:
—A
查看RAID阵列的详细信息
mdadm -D /dev/md#
停止RAID阵列
mdadm -S /dev/md#


一、

示例:用两块磁盘创建一个RAID0

①(准备工作):首先准备两块空闲的磁盘 使用#fdisk -l 查看磁盘列表



我们发现有一个 sdb5 和 sdb6 分区 但是文件系统类型却是linux LVM 我们需要将其更改为linux raid auto类型。

使用# fdisk /dev/sdb 使用t选项修改其文件系统类型结果如下:



此时/dev/sdb下面的sdb5和sdb6类型已经修改为linux raid auto文件系统了

务必让系统重读一下文件系统列表执行命令 # partprobe /dev/sdb

#cat /pro/partitions 查看列表



此时sdb5和sdb6已经被内核识别。

②:正式创建RAID
#mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb{5,6}
#在/dev下创建名为md0的RAID设备,-l指定RAID级别为RAID0,-n指定由2个设备(sdb5,sdb6)创建。执行如下:




此时RAID0创建成功。

③:格式化RAID设备(创建文件系统),此处为ext2,使用#mke2fs




④:挂载文件系统(将其挂载到/mnt目录下面),使用命令#mount  /dev/md0 /mnt


二、

查看详细的RAID设备信息:

#mdadm -D(–detail) /dev/# #表示设备名称



附加:

模拟磁盘损坏:

#mdadm /dev/md# –fail /dev/# (#表示模拟损坏的是哪个磁盘)

移除损坏磁盘:

#mdadm /dev/md# –remove(-r) /dev/# (#表示移除的是哪个磁盘)

加入新盘

#mdadm /dev/md# –add(-a) /dev/# (#表示新加的是哪个磁盘)

如果创建的RAID模式为RAID1时,当某一个RAID阵列中的磁盘不能正常工作后,如果系统中有空闲的的磁盘块的话,空闲的磁盘块会自动的顶替已损坏的磁盘块。

设置自动装配:

# mdadm -D –scan > /etc/mdadm.conf

当我们使用#mdadm -S /dev/md# 时停用当前RAID阵列,保存自动装配的配置文件后直接使用#mdadm -A /dev/md# 即可再次启用该RAID阵列。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息