使用RAID与LVM磁盘阵列技术
RAID(独立磁盘冗余阵列): 磁盘阵列是把多个磁盘组成一个阵列,当作单一磁盘使用,它将数据以分段(striping)的方式储存在不同的磁盘中,存取数据时,阵列中的相关磁盘一起动作,大幅减低数据的存取时间,同时有更佳的空间利用率。磁盘阵列利用的不同的技术,称为RAID level,不同的level针对不同的系统及应用,以解决数据安全的问题。简单来说,RAID把多个硬盘组合成为一个逻辑扇区,因此,操作系统只会把它当作一个硬盘
一般高性能的磁盘阵列都是以硬件的形式来达成,进一步的把磁盘存取控制及磁盘阵列结合在一个控制器(RAID controler)或控制卡上,针对不同的用户解决人们对磁盘输输入输出系统的四大要求:
(1)增加存取速度,
(2)容错(fault tolerance),即安全性
(3)有效的利用磁盘利用率;
(4)尽量的平衡CPU,内存及磁盘的性能差异,提高主机的整体工作性能
可提供的功能:
1.冗余(容错)
2.性能提升
RAID分类:
- 硬件RAID:用RAId接口卡来实现;需要内核支持其驱动,并且该类设备设备显示为SCSI设备,代号为/dev/sd*
- 软件RAID:用内核中的MD(multiple devices)模块实现,该类设备在/etc/下表示为:md*;在现在的RH 5版本中使用mdadm工具管理软RAID;(虽然来说可以用软件模拟实现raid,但是相对对磁盘控制的功能及性能不如硬件实现的好,生产环境中最好使用硬件raid
几种常见RAID类型描述:
图示:
- RAID-0 :striping(条带模式),至少需要两块磁盘,做RAID分区的大小最好是相同的(可以充分发挥并优势);而数据分散存储于不同的磁盘上,在读写的时候可以实现并发,所以相对其读写性能最好;但是没有容错功能,任何一个磁盘的损坏将损坏全部数据;
- RAID-1 :mirroring(镜像卷),至少需要两块硬盘,raid大小等于两个raid分区中最小的容量(最好将分区大小分为一样),可增加热备盘提供一定的备份能力;数据有冗余,在存储时同时写入两块硬盘,实现了数据备份;但相对降低了写入性能,但是读取数据时可以并发,几乎类似于raid-0的读取效率;
-
RAID-5 :需要三块或以上硬盘,可以提供热备盘实现故障的恢复;采用奇偶效验,可靠性强,且只有同时损坏两块硬盘时数据才会完全损坏,只损坏一块硬盘时,系统会根据存储的奇偶校验位重建数据,临时提供服务;此时如果有热备盘,系统还会自动在热备盘上重建故障磁盘上的数据;
存储方式:简单来说就是,磁盘阵列的第一个磁盘分段是校验值,第二个磁盘至后一个磁盘再折回第一个磁盘的分段是数据,然后第二个磁盘的分段是校验值,从第三个磁盘再折回第二个磁盘的分段是数据,以此类推,直到放完数据为止。这样数据与校验值的循环分离存储就可以达到一定的故障重建功能;但是raid-5的控制较为复杂,且计算大量的校验码,可能给系统造成额外计算的负担(软raid来说,硬件有自己的数据处理能力)注:RAID中的容错表示即使磁盘故障,数据仍能保持完整,可让系统存取到正确的数据,而SCSI的磁盘阵列更可在工作中抽换磁盘,并可自动重建故障磁盘的数据。
热备份(hot spare or hot standby driver):为了加强容错的功能以及使系统在磁盘故障的情况下能迅速的重建数据,以维持系统的性能,一般的磁盘阵列系统都可使用热备份(hot spare or hot standby driver)的功能,所谓热备份是在建立(configure) 磁盘阵列系统的时候,将其中一磁盘指定为后备磁盘,该磁盘在平常并不操作,但若阵列中某一磁盘发生故障时,磁盘阵列即以后备磁盘取代故障磁盘,并自动将故障磁盘的数据重建(rebuild)在后备磁盘之上,因为反应快速,加上快取内存减少了磁盘的存取, 所以数据重建很快即可完成,对系统的性能影响很小。
在任何时候都不要用同一个硬盘上的多个区来做RAID,那样不仅不能提高系统的性能,反而会大大降低整体系统的系能;
对上面几种常用的RAID类型分析后,可知,RAID-0主要可以提高磁盘性能,RAID-1主要可以实现备份容错(RAID-5由于控制机制复杂在此暂不使用),所以可以在实际生产环境下考虑结合RAID-0和RAID-1来实现磁盘存储系统的高性能、高容错。
下面图示的两种raid结合方式解析:
对于一:底层分别用有两块硬盘的raid0实现高并发,再集合两个raid0组实现冗余;下层的任意一个raid0组中有任意一块硬盘会使改组失效,但是两外一个组仍能提供全部数据;
对于二:底层用raid-1实现数冗余,上层用raid-2实现高并发,该种结构中任意一个硬盘的故障,不对本组整体数据工作构成破坏性影响;所以感觉该种方案更优异,在实际生产中有部分应用(具体配置过程再文章最后附);
mdadm命令用于管理Linux系统中的软件RAID硬盘阵列,格式为“mdadm [模式] <RAID设备名称> [选项] [成员设备名称]”。
表7-1 mdadm命令的常用参数和作用
参数 | 作用 |
-a | 检测设备名称 |
-n | 指定设备数量 |
-l | 指定RAID级别 |
-C | 创建 |
-v | 显示过程 |
-f | 模拟设备损坏 |
-r | 移除设备 |
-Q | 查看摘要信息 |
-D | 查看详细信息 |
-S | 停止RAID磁盘阵列 |
mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
,-C参数代表创建一个RAID阵列卡;-v参数显示创建的过程,同时在后面追加一个设备名称/dev/md0,这样/dev/md0就是创建后的RAID磁盘阵列的名称;-a yes参数代表自动创建设备文件;-n 4参数代表使用4块硬盘来部署这个RAID磁盘阵列;而-l 10参数则代表RAID 10方案;最后再加上4块硬盘设备的名称就搞定了
mkfs.ext4 /dev/md0
其次,把制作好的RAID磁盘阵列格式化为ext4格式。
再次,创建挂载点然后把硬盘设备进行挂载操作。挂载成功后可看到可用空间为40GB
mkdir /RAID
mount /dev/md0 /RAID
df -h
最后,查看/dev/md0磁盘阵列的详细信息,并把挂载信息写入到配置文件中,使其永久生效
在确认有一块物理硬盘设备出现损坏而不能继续正常使用后,应该使用mdadm命令将其移除,然后查看RAID磁盘阵列的状态,可以发现状态已经改变。
mdadm /dev/md0 -f /dev/sdb
mdadm -D /dev/md0
逻辑卷管理器是Linux系统用于对硬盘分区进行管理的一种机制,理论性较强,其创建初衷是为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬盘分区进行强制扩容或缩容从理论上来讲是可行的,但是却可能造成数据的丢失。而LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整
表7-2 常用的LVM部署命令
功能/命令 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
扫描 | pvscan | vgscan | lvscan |
建立 | pvcreate | vgcreate | lvcreate |
显示 | pvdisplay | vgdisplay | lvdisplay |
删除 | pvremove | vgremove | lvremove |
扩展 | vgextend | lvextend | |
缩小 | vgreduce | lvreduce |
1.pvcreate /dev/sdb /dev/sdc --让新添加的两块硬盘设备支持LVM技术
2.vgcreate storage /dev/sdb /dev/sdc --把两块硬盘设备加入到storage卷组中,然后查看卷组的状态。
3.lvcreate -n vo -l 37 storage --切割出一个约为150MB的逻辑卷设备(使用-l 37可以生成一个大小为37×4MB=148MB的逻辑卷)
4.mkfs.ext4 /dev/storage/vo --把生成好的逻辑卷进行格式化,然后挂载使用
5.df -h --查看挂载状态
6.echo "/dev/storage/vo /linuxprobe ext4 defaults 0 0" >> /etc/fstab --并写入到配置文件,使其永久生效
扩容
7.umount /linuxprobe --扩展前请一定要记得卸载设备和挂载点的关联
8.lvextend -L 290M /dev/storage/vo --把上一个实验中的逻辑卷vo扩展至290MB
9.e2fsck -f /dev/storage/vo --检查硬盘完整性
10.resize2fs /dev/storage/vo --重置硬盘容量
11.mount -a --重新挂载硬盘设备
缩容
umount /linuxprobe
e2fsck -f /dev/storage/vo --检查硬盘完整性
resize2fs /dev/storage/vo 120M --把逻辑卷vo的容量减小到120MB。
LVM还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。例如,可以对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原。LVM的快照卷功能有两个特点
1.快照卷的容量必须等同于逻辑卷的容量;
2.快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除
echo "Welcome to Linuxprobe.com" > /linuxprobe/readme.txt --接下来用重定向往逻辑卷设备所挂载的目录中写入一个文件
ls -l /linuxprobe
lvcreate -L 120M -s -n SNAP /dev/storage/vo 使用-s参数生成一个快照卷,使用-L参数指定切割的大小。另外,还需要在命令后面写上是针对哪个逻辑卷执行的快照操作。
dd if=/dev/zero of=/linuxprobe/files count=1 bs=100M --在逻辑卷所挂载的目录中创建一个100MB的垃圾文件,然后再查看快照卷的状态。可以发现存储空间占的用量上升了
umount /linuxprobe --先卸载掉逻辑卷设备与目录的挂载
lvconvert --merge /dev/storage/SNAP --为了校验SNAP快照卷的效果,需要对逻辑卷进行快照还原操作。
mount -a --> ls /linuxprobe/ --快照卷会被自动删除掉,并且刚刚在逻辑卷设备被执行快照操作后再创建出来的100MB的垃圾文件也被清除了
删除LVM(去LVM)