RAID Redundant Array of Inexpensive Disks 廉价冗余磁盘阵列 /独立冗余磁盘阵列
我们现在常见到的磁盘接口类型:
IDE SCSI SATA SAS
IDE:Integrated Drive Electronics 我们的个人计算机上面常用到的磁盘接口,现在
该技术发展的很成熟、而且很廉价,一般每条线最多可接2IDE设备,所以我们的pc上可能在使用该接口时,分主盘和从盘。16mb/s~33mb/s
SCSI:Small Computer System Interface 这种硬盘的出现是为了提高硬盘的传输速度
,它是独立于总线工作的,系统占用率低,多应用于服务器
SATA:Serial-ATA(串行),150mb/s(1.0),在未来的2.0,3.0可能达到300~600mb/s
我们这里讲到的Raid实际上就是相当于把几块硬盘连接起来当做一块盘来使用的,
Redundant,是因为有些种类的阵列是有容错的功能,当一块盘坏掉的时候,不会影响使用。我们的Raid是有级别的,这些级别是用来表示盘的链接方式
我们比较常见的级别有:0 1 5 6 10
我们多个磁盘的链接方式不同分为:硬件Raid 和软件Raid,其中硬件Raid链接要有专门的Raid卡(或适配器,是一个硬件芯片,我们的内核要想识别Raid 要用硬件驱动,并且硬件Raid在我们的系统上的标示为/dev/sd,也就是要被识别为SCSI口,我们计算机只能看到的就是Raid卡,看不到多块硬盘)而软件Raid,是靠linux自身来实现,linux需要一个在内核中mdadm的软件模块,而且软Raid的设备文件是md0 md1 md2。
我们的Raid是在内核中实现的,要用到mdadm这个工具,这个工具是工作在用户空间程序,他能和工作在内核中的md(Multiple Device)通信,告诉md如何链接这些磁盘。我们的这些磁盘既可以是基于独立硬盘的的,也是可以基于分区的(但是这种意义不大)。我们做Raid就是两个目的要不提高性能performance、要不提高冗余redundant
Raid 0:条带, 当你在存储数据的时候,这些数据是交叉的存贮在不同的磁盘上,这样速度就快了很多(大概有1.5~1.8倍),我们上层用户而言看到的大概是两块硬盘容量之和,写入读取的性能变高了,如果我们任何一块盘坏了,整个就不能用了。主要是为了提高性能用的。
Raid 1: 也是将两块盘连起来,数据分别在两块盘上都存有一份,假如一块盘坏了,不会影响我们的工作,提高了冗余性、容错性能,不过对我们用户来说能用的磁盘大小大概是只有一块盘的容量,与此同时降低我们写入速度,读数据的性能是很高的大概和Raid工作性能一样。
Raid 1 0 / Raid 0 1 :就是我们拿4块硬盘(1,2,3,4)1,2做Raid1---->5 3,4做Raid1 ------->6 然后,5和6做Raid0 ,这种方式准许 1,2之间坏一块盘 3,4之间坏一块盘 而12 34 都做Raid 0 他们的之和做Raid1. 基本上不能提供磁盘的容错的。所以我们通常是使用Raid 1 0 但是空间的利用率只有50%,性能大大提高。
Raid 5 :至少需要三块磁盘(1,2,3) ,我们的数据先分成一块一(m,n,b,v,c……),m先放到1上,n存到2盘上,而m和n的校验码存到3盘上 ……假如我们的1号盘坏了,我们可以根据2号盘上的n和3号盘上的校验码算出m,所以这种Raid是准许我们坏一块盘的。但是要注意的是我们所要存放的校验码是平均分在各个盘上的(Raid 4 是独立出一块盘专门存储校验码,但是这往往会造成系统的瓶颈的),我们用户看到的空间利用率是n-1 /n ,但是要注意的是,假如一块盘坏了,我们的读取速度就会降低。但是要注意的是:假如我们同时坏掉俩个盘,整个阵列就不能用了.所以我们在使用Raid 5时,会多一块盘来做准备,单其中一块盘坏了,就接替它继续工作,但是我们的Raid 5 总归不是特别好,尤其是对一些数据库要求比较高的公司
Raid 6 和 Raid 5 基本上一样,最少要用4块盘要但是是用两块盘存奇偶校验,也是轮流的将校验码存在每个盘上
,这种方式准许坏两块盘,不过记住有钱的公司用Raid 1 0 或网络存储 (IT界有一类工作就是存储工程师)
网络存储:
NAS(网络附加存储,通过网络线缆)
DAS(直接附加存储,直接在机箱柜以外的盘阵,用一根线连到总线上)
SAN
我们这里主讲软Raid
首先要确保工作在内核的md(multiple device)能够工作,
它所支持的模式:Linear(试想,我们的一块硬盘已经存了120G的数据,但是总大小130G,我们的方法就是我们在添加一块硬盘,就是将我们多个硬盘穿起来,对上层来说看到的就是一块硬盘,注意这和我们的Raid 0不同,我们的Raid 0 是将数据交叉存储在不同的盘上,而这种方式是一块存满之后,存另一块) 、Raid 0、Raid 1(要
求两块盘的大小一样)Raid 5 (多块盘的大小也要一样) Raid 1 0等
mdadm
mdadm [mode] <Raid device> [option] <component-devices>
常用模式:
Assemble:装配模式 把一个从别出移出来的Raid放到别的主机上,让我们系统重新读一遍信息。系统会自动扫描
Create 创建Raid,
Follow or Monitor 监控模式 监控一个Raid的工作状态,注意只对Raid 1 4 5 6 10有效,Raid 0和linear不适合
Grow 改变处于
Manage 如添加一个新的冗余盘(space-device)或删除一个坏掉的盘而我们的manage是默认的,只要我们使用--add --fail --remove 一块盘 ,就会自动识别成Manage模式
选项:
-S== --stop 停止我们Raid的使用
-A == --assemble
-C== --create
-F== --follow,--monitor
-G== --grow
-v ==显示更详细的信息 一般和--detail(查看当前处于活动的磁盘个数) --scan(扫描/proc/mdstat 文件) 使用
-n 用来跟增加设备(active -device)的个数(处于活动的个数,注意一般不可为1)
-x 用于跟space-device的个数
]#mdadm -C /dev/md0 -a yes -l 1 -n 2 -x 1 -c 32 /dev/sda5 /dev/sda6 /dev/sda7
-c 指定块大小(字节)的,多少块分给一个磁盘
- l 指定级别的 linear 0 \ 10 \ 1 \5
--add
--remove
--detail
实例:以分区为例(注意在同一块硬盘上是没有意义的!)
创建一个10G的Raid 1 0
我们在我的 /dev/sdb上先创建一个扩展分区,在扩展分区上划分出来4个等大的逻辑卷实现 Raid 10,(这里是为了方便练习)
]#fdisk /dev/sdb
p
n 3
n 489 +2G 在扩展分区中创建新分区(sdb5,sdb6,sdb7,sdb8)
将这些分区的类型变为linux下的Linux raid auto格式的fd(4块分区都要变成fd的格式)
w 保存退出
]# partprobe (注意一定要让我们的系统在读一遍磁盘分区表)
]#cat /proc/mdstat 查看当前系统上Raid的活动状态,我们在使用是要避免这些活动的md设备注意我们的系统上可以使用多个Raid设备的编号md0 md1 md2……等
]#mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sdb5 /dev/sdb6 注意这里的-a表示在我们创建Raid的时候,会自动为我们在/dev/目录下创建/dev/md1这个设备文件
]#mdadm -C /dev/md2 -a yes -l 1 -n 2 /dev/sdb7 /dev/sdb8 创建Raid1
]#mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/md1 /dev/md2 创建Raid0
]#mke2fs -j -L Raid 10 /dev/md0 格式化,创建文件系统
]#mkdir -pv /mnt/Raid10 在/mnt目录下创建挂载点
]#mount /dev/md0 /mnt/Raid10
最后将 /dev/md0 /mnt/Raid10 ext3 defaults 0 0 写入/etc/fstab中,使我们的磁盘能够随计算机的启动而自动挂载
思考题:
我有7块盘,每两块做一个Raid 1 最后一块同时给做好的3个Raid 1 做备份,怎么做?