使用 RAID 与 LVM 磁盘阵列技术
RAID(独立冗余磁盘阵列)
RAID 技术 通过把多个硬盘设备组合成一个容量更大、安全性更好的磁盘阵列,并把数据切割成多个区 段后分别存放在各个不同的物理硬盘设备上,然后利用分散读写技术来提升磁盘阵列整体的 性能,同时把多个重要数据的副本同步到不同的物理硬盘设备上,从而起到了非常好的数据 冗余备份效果。
现代 企业更看重的则是 RAID 技术所具备的冗余备份机制以及带来的硬盘吞吐量的提升。也就是 说,RAID 不仅降低了硬盘设备损坏后丢失数据的几率,还提升了硬盘设备的读写速度,所以 它在绝大多数运营商或大中型企业中得以广泛部署和应用
RAID 0
RAID 0 技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成 一个大的卷组,并将数据依次写入到各个物理硬盘中。这样一来,在最理想的状态下,硬盘设 备的读写性能会提升数倍,但是若任意一块硬盘发生故障将导致整个系统的数据都受到破坏。 通俗来说,RAID 0 技术能够有效地提升硬盘数据的吞吐速度,但是不具备数据备份和错误修 复能力。如图 7-1 所示,数据被分别写入到不同的硬盘设备中,即 disk1 和 disk2 硬盘设备会 分别保存数据资料,最终实现提升读取、写入速度的效果。
RAID 1
尽管 RAID 0 技术提升了硬盘设备的读写速度,但是它是将数据依次写入到各个物理硬 盘中,也就是说,它的数据是分开存放的,其中任何一块硬盘发生故障都会损坏整个系统的 数据。因此,如果生产环境对硬盘设备的读写速度没有要求,而是希望增加数据的安全性时, 就需要用到 RAID 1 技术了。 在图 7-2 所示的 RAID 1 技术示意图中可以看到,它是把两块以上的硬盘设备进行绑 定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备 份)。当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常 使用。
RAID 1 技术虽然十分注重数据的安全性,但是因为是在多块硬盘设备中写入了相同的数据,因此硬盘设备的利用率得以下降,从理论上来说,图 7-2 所示的硬盘空间的真实可用率只 有 50%,由三块硬盘设备组成的 RAID 1 磁盘阵列的可用率只有 33%左右,以此类推。而且, 由于需要把数据同时写入到两块以上的硬盘设备,这无疑也在一定程度上增大了系统计算功 能的负载
RAID 5
RAID 10
顾名思义,RAID 10 技术是 RAID 1+RAID 0 技术的一个“组合体”。如图 7-4 所示, RAID 10 技术需要至少 4 块硬盘来组建,其中先分别两两制作成 RAID 1 磁盘阵列,以保 证数据的安全性;然后再对两个 RAID 1 磁盘阵列实施 RAID 0 技术,进一步提高硬盘设 备的读写速度。这样从理论上来讲,只要坏的不是同一组中的所有硬盘,那么最多可以损 坏 50%的硬盘设备而不丢失数据。由于 RAID 10 技术继承了 RAID 0 的高读写速度和 RAID 1 的数据安全性,在不考虑成本的情况下 RAID 10 的性能都超过了 RAID 5,因此当前成 为广泛使用的一种存储技术
部署磁盘阵列
在具备了上一章的硬盘设备管理基础之后,再来部署 RAID 和 LVM 就变得十分轻松了。首 先,需要在虚拟机中添加 4 块硬盘设备来制作一个 RAID 10 磁盘阵列,如图 7-5 所示。
这几块硬盘设备是模拟出来的,不需要特意去买几块真实的物理硬盘插到电脑上。需要 注意的是,一定要记得在关闭系统之后,再在虚拟机中添加硬盘设备,否则可能会因为计算 机架构的不同而导致虚拟机系统无法识别添加的硬盘设备
mdadm
命令用于管理 Linux 系统中的软件 RAID 硬盘阵列,格式为mdadm [模式] <RAID 设备名称> [选项] [成员设备名称]
。
生产环境中用到的服务器一般都配备 RAID 阵列卡,我们可以学会用 mdadm 命令在 Linux 系统中创建和管理软件RAID 磁盘阵列
,而且它涉及的理论知识的操作过程与生产环境中的完全一致。
其中,-C
参数代表创建一个 RAID 阵列卡;-v
参 数显示创建的过程,同时在后面追加一个设备名称/dev/md0
,这样/dev/md0就是创建后的RAID 磁盘阵列的名称;-a yes 参数代表自动创建设备文件;-n 4
参数代表使用 4 块硬盘来部署这个 RAID 磁盘阵列;而-l 10
参数则代表 RAID 10 方案;最后再加上 4 块硬盘设备的名称就搞定 了。
其次,把制作好的 RAID 磁盘阵列格式化为 ext4 格式
[root@linuxprobe ~]# mkfs.ext4 /dev/md0
再次,创建挂载点然后把硬盘设备进行挂载操作。挂载成功后可看到可用空间为 40GB
[root@linuxprobe ~]# mkdir /RAID
[root@linuxprobe ~]# mount /dev/md0 /RAID
[root@linuxprobe ~]# df -h
最后,查看/dev/md0 磁盘阵列的详细信息,并把挂载信息写入到配置文件中,使其永久有效
[root@linuxprobe ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
损坏磁盘阵列及修复
在确认有一块物理硬盘设备出现损坏而不能继续正常使用后,应该使用 mdadm 命令将其 移除,然后查看 RAID 磁盘阵列的状态,可以发现状态已经改变。
在 RAID 10 级别的磁盘阵列中,当 RAID 1 磁盘阵列中存在一个故障盘时并不影响 RAID 10 磁盘阵列的使用。当购买了新的硬盘设备后再使用 mdadm 命令来予以替换即可,在此期间 我们可以在/RAID 目录中正常地创建或删除文件
。由于我们是在虚拟机中模拟硬盘,所以先重启系统,然后再把新的硬盘添加到 RAID 磁盘阵列中
磁盘阵列+备份盘
现在创建一个 RAID 5 磁盘阵列+备份盘。在下面的命令中,参数-n 3
代表创建这个 RAID 5 磁盘阵列所需的硬盘数,参数-l 5
代表 RAID 的级别,而参数-x 1
则代表有一块备 份盘。当查看/dev/md0
(即 RAID 5 磁盘阵列的名称)磁盘阵列的时候就能看到有一块备份盘在等待中了
现在将部署好的 RAID 5 磁盘阵列格式化为 ext4 文件格式,然后挂载到目录上,之后就 可以使用了。
[root@linuxprobe ~]# mkfs.ext4 /dev/md0
[root@linuxprobe ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
[root@linuxprobe ~]# mkdir /RAID
[root@linuxprobe ~]# mount -a
最后是见证奇迹的时刻!我们再次把硬盘设备/dev/sdb 移出磁盘阵列,然后迅速查看 /dev/md0 磁盘阵列的状态,就会发现备份盘已经被自动顶替上去并开始了数据同步。RAID 中 的这种备份盘技术非常实用,可以在保证 RAID 磁盘阵列数据安全性的基础上进一步提高数 据可靠性,所以,如果公司不差钱的话还是再买上一块备份盘以防万一
LVM(逻辑卷管理器)
逻辑卷管理器是 Linux 系统用于对硬盘分区进行管理的一种机制,理论性较强,其创建初衷是为了解决硬盘设备在创建分区后不易修改分区
大小的缺陷。尽管对传统的硬盘分区进行强制扩容或缩容从理论上来讲是可行的,但是却可能造成数据的丢失。而 LVM 技术是在硬 盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组
,可以把多块硬盘进行 卷组合并
。这样一来,用户不必关心物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整。LVM 的技术架构如图 7-7 所示。
物理卷处于 LVM 中的最底层,可以将其理解为物理硬盘、硬盘分区或者 RAID 磁盘阵列,这都可以。卷组建立在物理卷之上,一个卷组可以包含多个物理卷,而且在卷组创建之后 也可以继续向其中添加新的物理卷。逻辑卷是用卷组中空闲的资源建立的,并且逻辑卷在建 立后可以动态地扩展或缩小空间。这就是 LVM 的核心理念
部署逻辑卷
部署 LVM 时,需要逐个配置物理卷、卷组和逻辑卷
先对这两块新硬盘进行创建物理卷的操作,可以将该操 作简单理解成让硬盘设备支持 LVM 技术,或者理解成是把硬盘设备加入到 LVM 技术可 用的硬件资源池中,然后对这两块硬盘进行卷组合并,卷组的名称可以由用户来自定义。 接下来,根据需求把合并后的卷组切割出一个约为 150MB 的逻辑卷设备,最后把这个逻 辑卷设备格式化成 EXT4 文件系统后挂载使用。在下文中,刘遄老师将对每一个步骤再作 一些简单的描述。
第一步:让新添加的两块硬盘设备支持 LVM 技术
第二步:把两块硬盘设备加入到 storage 卷组中,然后查看卷组的状态
第三步:切割出一个约为 150MB 的逻辑卷设备。
这里需要注意切割单位的问题。在对逻辑卷进行切割时有两种计量单位。第一种是以容 量为单位,所使用的参数为-L。例如,使用-L 150M
生成一个大小为 150MB 的逻辑卷。另外 一种是以基本单元的个数为单位,所使用的参数为-l。每个基本单元的大小默认为 4MB
。例 如,使用-l 37
可以生成一个大小为 37×4MB=148MB 的逻辑卷
第四步:把生成好的逻辑卷进行格式化,然后挂载使用。
Linux 系统会把 LVM 中的逻辑卷设备存放在/dev 设备目录中(实际上是做了一个符号链接),同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件(即/dev/卷组名称/逻辑卷名称)
[root@linuxprobe ~]# mkfs.ext4 /dev/storage/vo
[root@linuxprobe ~]# mkdir /linuxprobe
[root@linuxprobe ~]# mount /dev/storage/vo /linuxprobe
扩容逻辑卷
在前面的实验中,卷组是由两块硬盘设备共同组成的。用户在使用存储设备时感知不到设备底层的架构和布局,更不用关心底层是由多少块硬盘组成的,只要卷组中有足够的资源,就可以一直为逻辑卷扩容。扩展前请一定要记得卸载设备和挂载点的关联
mount -a
的意思是将/etc/fstab的所有内容重新加载。
mount
是可以显示/etc/fstab的内容。
缩小逻辑卷
逻辑卷快照
LVM 还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。例如,可 以对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快 照卷进行覆盖还原。LVM 的快照卷功能有两个特点:
➢ 快照卷的容量必须等同于逻辑卷的容量;
➢ 快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。
通过卷组的输出信息可以清晰看到,卷组中已经使用了 120MB 的容量,空闲容量还有39.88GB。接下来用重定向往逻辑卷设备所挂载的目录中写入一个文件。
使用-s 参数生成一个快照卷,使用-L 参数指定切割的大小。另外,还需要在命令后面写上是针对哪个逻辑卷执行的快照操作。
在逻辑卷所挂载的目录中创建一个 100MB 的垃圾文件,然后再查看快照卷的状态。可以发现存储空间占的用量上升了
为了校验 SNAP 快照卷的效果,需要对逻辑卷进行快照还原操作。在此之前记得先卸载掉逻辑卷设备与目录的挂载
删除逻辑卷
取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数。
[root@linuxprobe ~]# umount /linuxprobe
[root@linuxprobe ~]# vim /etc/fstab
删除逻辑卷设备,需要输入 y 来确认操作
[root@linuxprobe ~]# lvremove /dev/storage/vo
Do you really want to remove active logical volume vo? [y/n]: y
Logical volume "vo" successfully removed
删除卷组,此处只写卷组名称即可,不需要设备的绝对路径
[root@linuxprobe ~]# vgremove storage
Volume group "storage" successfully removed
删除物理卷组
[root@linuxprobe ~]# pvremove /dev/sdb /dev/sdc
Labels on physical volume "/dev/sdb" successfully wiped
Labels on physical volume "/dev/sdc" successfully wiped
在上述操作执行完毕之后,再执行 lvdisplay、vgdisplay、pvdisplay 命令来查看 LVM 的信 息时就不会再看到信息了(前提是上述步骤的操作是正确的)
复习题
1. RAID 技术主要是为了解决什么问题呢?
RAID 技术可以解决存储设备的读写速度问题及数据的冗余备份问题。
2. RAID 0 和 RAID 5 哪个更安全?
RAID 0 没有数据冗余功能,因此 RAID 5 更安全。
3.假设使用 4 块硬盘来部署 RAID 10 方案,外加一块备份盘,最多可以允许几块硬盘同时损坏呢?
最多允许 5 块硬盘设备中的 3 块设备同时损坏。
4.位于 LVM 最底层的是物理卷还是卷组?
最底层的是物理卷,然后在通过物理卷组成卷组。
5. LVM 对逻辑卷的扩容和缩容操作有何异同点呢?
扩容和缩容操作都需要先取消逻辑卷与目录的挂载关联;扩容操作是先扩容后检查文件系统完整性,而缩容操作为了保证数据的安全,需要先检查文件系统完整性再缩容。
6. LVM 的快照卷能使用几次?
只可使用一次,而且使用后即自动删除。
7. LVM 的删除顺序是怎么样的?
依次移除逻辑卷、卷组和物理卷。