使用RAID与LVM磁盘阵列技术
RAID磁盘冗余阵列
RAID技术确实具有非常好的数据冗余备份功能,但是它也相应地提高了成本支出
RAID技术的设计初衷是减少因为采购硬盘设备带来的费用支出,但是与数据本身的价值相比较,现代企业更看重的则是RAID技术所具备的冗余备份机制以及带来的硬盘吞吐量的提升。也就是说,RAID不仅降低了硬盘设备损坏后丢失数据的几率,还提升了硬盘设备的读写速度,所以它在绝大多数运营商或大中型企业中得以广泛部署和应用。
出于成本和技术方面的考虑,需要针对不同的需求在数据可靠性及读写性能上作出权衡,制定出满足各自需求的不同方案。目前已有的RAID磁盘阵列的方案至少有十几种,主要有RAID 0、RAID 1、RAID 5与RAID 10这4种最常见的方案。
RAID 0
RAID 0技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入到各个物理硬盘中。这样一来,在最理想的状态下,硬盘设备的读写性能会提升数倍,但是若任意一块硬盘发生故障将导致整个系统的数据都受到破坏。通俗来说,RAID 0技术能够有效地提升硬盘数据的吞吐速度,但是不具备数据备份和错误修复能力。数据被分别写入到不同的硬盘设备中,即disk1和disk2硬盘设备会分别保存数据资料,最终实现提升读取、写入速度的效果。
也就是说:RAID0 是把数据分别写入到两块磁盘上面,来提高磁盘的读写速度但RAID 0 不具备冗余防灾等特性
RAID1
尽管RAID 0技术提升了硬盘设备的读写速度,但是它是将数据依次写入到各个物理硬盘中,也就是说,它的数据是分开存放的,其中任何一块硬盘发生故障都会损坏整个系统的数据。因此,如果生产环境对硬盘设备的读写速度没有要求,而是希望增加数据的安全性时,就需要用到RAID 1技术了。
RAID1 是把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘中,当其中某块硬盘损坏,系统一般会立即自动以热交换的方式来恢复数据的正常使用。
RAID1 相当于为数据做了一个镜像
由于RAID1的出发点是注重数据的安全性,导致磁盘设备的利用率下降。
根据统计,磁盘空间的真实利用率只有50%,又三块磁盘设备组成的RAID1磁盘阵列的可用率只有33%左右。
所以当需要把数据同时写入到两块以上的硬盘设备中,会增大系统计算能力的负载
从数据安全和成本上,不可能在保持原有硬盘设备的利用率且还不增加新设备的情况下,来大幅度提升数据的安全性
总的来说:RAID1就是把数据都写入到每个磁盘,来提高安全性,但损失了读写速度
RAID5
RAID5技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。
RAID 5磁盘阵列组中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中,而是存储到除自身以外的其他每一块硬盘设备上,这样的好处是其中任何一设备损坏后不至于出现致命缺陷;parity部分存放的就是数据的奇偶校验信息,就是RAID 5技术实际上没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。RAID这样的技术特性“妥协”地兼顾了硬盘设备的读写速度、数据安全性与存储成本问题。
RAID10
RAID 5技术是因为硬盘设备的成本问题对读写速度和数据的安全性能而有了相应的妥协,但数据本身的价值更高于硬盘的成本,因此在有些生产环境中主要使用RAID 10技术。
RAID 10技术是RAID 1+RAID0技术的一个“组合体”。RAID10技术需要至少4块硬盘来组建,其中先分别两两制作成RAID1磁盘阵列,以保证数据的安全性;然后再对两个RAID1磁盘阵列实施RAID 0技术,进一步提高硬盘设备的读写速度。这样从理论上来讲,只要坏的不是同一组中的所有硬盘,那么最多可以损坏50%的硬盘设备而不丢失数据。由于RAID 10技术继承了RAID 0的高读写速度和RAID1的数据安全性,在不考虑成本的情况下RAID 10的性能都超过了RAID5。
部署磁盘阵列
制作RAID10磁盘阵列
要求:至少需要4块以上的硬盘
利用虚拟机来进行演示,注意:在需要添加磁盘的时候,一定要先关闭系统。否则将会导致虚拟机系统无法识别添加的虚拟设备
mdadm
命令 用于管理 linux系统
中的软件RAID磁盘阵列。
格式:
mdadm [模式] [选项] [成员设备名称]
生产环境中的服务器一般用的都是RAID阵列卡。此时就不需要使用mdadm命令。
进行简单的实验,就不需要单独购买服务器。使用mdadm
在linux系统中创建和管理软件RAID磁盘阵列。
mdadm设计的理论知识的操作过程与生产环境中完全一致。
参数 | 作用
--- | ---
-a | 检测设备名称
-n | 指定设备数量
-l | 指定RAID级别
-C | 创建
-v | 显示过程
-f | 模拟设备损坏
-r | 移除设备
-Q | 查看摘要信息
-D | 查看详细信息
-S | 停止RAID磁盘阵列
1.使用mdadm命令创建RAID 10;名称命名为:"/dev/md10"
mdadm -Cv /dev/md10 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
# -Cv 表示的是创建RAID阵列卡,并显示创建的过程
# -a yes 表示的是 自动创建设备文件
# -n 4 表示的是 使用4块硬盘来部署这个RAID磁盘阵列
# -l 10 表示的是 代表RAID10方案
# 最后加上4块硬盘设备的名称
2.对RAID磁盘阵列进行格式化为ext4
将制作好的RAID10 磁盘阵列进行格式化
mkfs.ext4 /dev/md10
3.对磁盘阵列进行挂载
创建挂载点,并把磁盘设备进行挂载操作。
mkdir RAID10
mount /dev/md10 /RAID10
df -Th
4.查看磁盘阵列详细信息
查看磁盘阵列详细信息,并将挂载信息写入到配置文件中,使其永久生效
mdadm -D /dev/md10
echo "/dev/md10 /RAID ext4 defaults 0 0" >> /etc/fstab
损坏磁盘阵列和修复
在生产环境中部署RAID10磁盘阵列,是为了提高硬盘存储设备的读写速度及数据的安全性,但由于我们的硬盘设备是在虚拟机中模拟出来的,因此对读写速度的改善可能并不直观。
模拟:使用mdadm
命令将某块磁盘移除,之后查看RAID磁盘阵列的状态,查看状态是否改变。
首先确认有一块物理硬盘设备出现损坏不能继续正常使用后,使用mdadm命令来予以移除,之后查看RAID磁盘阵列组的状态已经发生改变
mdadm /dev/md10 -f /dev/sdb
mdadm -D /dev/md10
在RAID10磁盘阵列中,RAID1中存在的故障盘不影响RAID10磁盘阵列的使用,当有新的正常的硬盘设备后,使用mdadm命令来进行替换即可,在此期间,我们可以在/RAID 目录中正常地创建或删除文件。但由于是虚拟机中模拟硬盘,所以需要:先重启系统,然后把心的硬盘添加到RAID磁盘阵列中。
umount /RAID10
mdadm /dev/md10 -a /dev/sdb
mdadm -D /dev/md10
mount -a
磁盘阵列 + 备份盘
RAID 10磁盘阵列中最多允许50%的硬盘设备发生故障,但是存在这样一种极端情况,即同一RAID 1磁盘阵列中的硬盘设备若全部损坏,也会导致数据丢失。换句话说,在RAID 10磁盘阵列中,如果RAID1中的某一块硬盘出现了故障,而我们正在前往修复的路上,恰巧该RAID1磁盘阵列中的另一块硬盘设备也出现故障,那么数据就被彻底丢失了。
这种情况下,可以使用RAID备份技术来预防此类事故,核心理念就是:准备一块足够大的硬盘,这块硬盘在平时处于闲置状态,一旦RAID磁盘阵列中硬盘出现故障后立即顶替上去。
由于是虚拟机进行此类实验,为防止冲突,保证每个实验的相对独立性,需要将虚拟机还原到初始状态。
这里来演示一下RAID5的部署效果,RAID5磁盘阵列部署,需要至少3块硬盘,还需要加一块备份硬盘,也就是4块硬盘。
部署RAID5磁盘阵列
mdadm -Cv /dev/md5 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
格式化RAID5磁盘阵列,并挂载
mkfs.ext4 /dev/md5
echo "/dev/md5 /RAID5 ext4 defaults 0 0" >> /etc/fstab
mkdir /RAID5
mount -a
验证备份盘是否自动顶替
把磁盘 /dev/sdb 移除磁盘阵列,然后迅速查看 /dev/md5 磁盘阵列的状态,查看备份盘是否自动顶替并开始同步。
mdadm /dev/md5 -f /dev/sdb
mdadm -D /dev/md5
LVM逻辑卷管理器
磁盘阵列卡虽然能够有效提高硬盘设备的读写速度以及数据的安全性,但是磁盘分好区或者部署为RAID磁盘阵列之后,在修改硬盘分区大小就不容易。
也就是说:当想要随着实际需求的变化调整硬盘分区的大小时,会受到硬盘“灵活性”的限制。
此时就需要--磁盘设备资源管理技术--LVM(逻辑卷管理器)。LVM可以允许随时对硬盘资源进行动态调整。
逻辑卷管理器是Linux系统用于对硬盘分区进行管理的一种机制,理论性较强,其创建初衷是为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬盘分区进行强制扩容或缩容从理论上来讲是可行的,但是却可能造成数据的丢失。而LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整。LVM的技术架构如图所示。
物理卷(PV):处于LVM的最底层,可以将其理解为:物理硬盘,硬盘分区或者RAID磁盘阵列。
卷组(VG):建立在物理卷之上,一个卷组可以包含多个物理卷,而且卷组创建之后也可以继续向其中添加新的物理卷。
逻辑卷(LV):使用卷组中空闲的资源建立的,并且逻辑卷在建立后可以动态的扩展或缩小空间。
以上就是LVM的核心理念
部署逻辑卷
实际环境中,是无法正确评估每个硬盘分区在今后的使用情况,所以可能会导致原先分配的硬盘分区不够用。并且在实际生产环境中,还存在对较大的硬盘分区进行精简缩容的情况出现。
常见的部署命令:
功能/命令 | 物理卷管理(PV) | 卷组管理(VG) | 逻辑卷管理(LV)
--- | --- | --- | ---
扫描 | pvscan | vgscan | lvscan
建立 | pvcreate | vgcreate | lvcreate
显示 | pvdisplay | vgdisplay | lvdisplay
删除 | pvremove | vgremove | lvremove
扩展 | | vgextend | lvextend
缩小 | | vgreduce | lvreduce
注意:使用新的虚拟机进行部署
使用2块虚拟硬盘来进行LVM实验
我们先对这两块新硬盘进行创建物理卷的操作,可以将该操作简单理解成让硬盘设备支持LVM技术,或者理解成是把硬盘设备加入到LVM技术可用的硬件资源池中,然后对这两块硬盘进行卷组合并,卷组的名称可以由用户来自定义。接下来,根据需求把合并后的卷组切割出一个约为150MB的逻辑卷设备,最后把这个逻辑卷设备格式化成EXT4文件系统后挂载使用。
1.添加2块硬盘设备支持LVM技术
pvcreate /dev/sdb /dev/sdc
2.将两块硬盘加入到strong卷组中
vgcreate strong /dev/sdb /dev/sdc
vgdisplay
# strong 表示的是卷组的名字,可以任意
3.切割一个大约 150MB的逻辑卷设备
注意: 单位的问题。
- 1.以容量为单位,所使用的参数为 -L
- 2.以基本单元的个数为单位,使用参数 -l,默认每个基本单元的大小为4MB.所以生成一个150MB的逻辑卷就是 -l 37
# 创建逻辑卷,是以卷组的根据,所需需要接上卷组的名称
# 下面中的vo 表示的是逻辑卷的名称
lvcreate -n vo -l 37 strong
lvdisplay
4.将生成的逻辑卷进行格式化,然后挂载
Linux系统会把LVM中的逻辑卷设备存放在/dev设备目录中。同时会以卷组的名称来建立一个目录,这个目录中保存了逻辑卷的设备映射文件(/dev/卷组名称/逻辑卷名称)
mkfs.ext4 /dev/strong/vo
mkdir /LVM
mount /dev/strong/vo /LVM
5.查看挂载信息,并写入配置文件,永久生效
df -Th
echo "/dev/strong/vo /LVM ext4 defaults 0 0" >> /etc/fstab
扩容逻辑卷
在进行扩展前,需要卸载设备和挂载点的关联
umount /LVM
1.将vo扩展到290MB
lvextend -L 290M /dev/strong/vo
2.检查磁盘完整性,重置硬盘容量
e2fsck -f /dev/strong/vo
resize2fs /dev/strong/vo
3.重新挂载硬盘设备
mount -a
df -Th
缩小逻辑卷
相较于扩容逻辑卷,在对逻辑卷进行缩容操作时,其丢失数据的风险更大。所以在生产环境中执行相应操作时,一定要提前备份好数据。另外Linux系统规定,在对LVM逻辑卷进行缩容操作之前,要先检查文件系统的完整性(当然这也是为了保证我们的数据安全)。在执行缩容操作前记得先把文件系统卸载掉。
umount /LVM
1.检查文件系统的完整性
e2fsck -f /dev/strong/ov
2.把逻辑卷压缩到120MB
resize2fs /dev/strong/vo 120M
3.重新挂载并查看系统状态
mount -a
df -Th
逻辑卷快照
LVM还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。例如,可以对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原。LVM的快照卷功能有两个特点:
- 1.快照卷的容量必须等同于逻辑卷的容量
- 2.快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除
查看卷组的信息
lvdisplay
用重定向往逻辑卷设备所挂载的目录中写入一个文件
echo "Welcome to my blog" > /LVM/readme.txt
ls -l /LVM
1.使用-s参数生成一个快照。使用-L参数指定切割的大小,还需要在命令后面写上针对那个逻辑卷执行快照操作
# -n SNAP表示的是快照的名称
lvcreate -L 120M -s -n SNAP /dev/strong/vo
lvdisplay
2.在逻辑卷所挂载的目录中创建一个100M的垃圾文件,然后查看快照卷的状态,来查看存储空间占的用量是否上升
dd if=/dev/zero of=/LVM/files count=1 bs=100M
lvdisplay
3.检验SNAP快照卷的效果,需要对逻辑卷进行快照还原操作
注意:对快照进行还原操作前,需要先卸载逻辑卷设备与目录的挂载
umount /LVM
lvconvert --marge /dev/strong/SNAP
4.快照卷会被自动删除掉,刚才在逻辑卷设备被执行快照操作后在创建出来的100M垃圾文件也被清除
mount -a
ls /LVM
删除逻辑卷
当生产环境中想要重新部署LVM或者不再需要使用LVM时,则需要执行LVM的删除操作。为此,需要提前备份好重要的数据信息.
注意:删除的顺序依次为:删除逻辑卷、卷组、物理卷设备,这个顺序不可颠倒。
1.取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的配置
umount /LVM
vim /etc/fstab
~~/dev/strong/vo /LVM ext4 defaults 0 0~~
2.删除逻辑卷设备,需要交互输入y来确定
lvremove /dev/strong/vo
y
3.删除卷组
删除卷组的时候,只需要写卷组名称即可,不需要设备的绝对路径
vgremove strong
4.删除物理卷设备
pvremove /dev/sdb /dev/sdc
5.最后检查物理卷 逻辑卷 卷组等LVM信息是否还存在
lvdisplay
vgdisplay
pvdisplay
总结
在实际部署一个项目中,需要根据实际的项目需求,来选择是让的磁盘阵列。
同时,为了项目之后能够正常,简便的扩容,需要在上线各具体项目之前,利用LVM逻辑卷管理器来配置磁盘相关信息。
希望能够帮助正在翻阅西文章的各位。
链接:可否博客