个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈
前一篇文章学习了磁盘分区、格式化、挂载等相关知识,本文将讲解RAID和LVM技术。
磁盘管理操作主要是运维人员用的较多,如果只是单纯的开发人员,可以先略过本文。但是在很多小公司里往往都是一人多用,运维、开发通常都是同一个人,因此对个人的技能要求更高。即便不是如此,多了解下相关概念也是有利而无害的。
本文将先讲解RAID技术方案相关理论知识并通过案例演示RAID操作,然后演示LVM技术以解决存储资源动态调整问题。
一、独立冗余磁盘阵列(RAID)
RAID(Redundant Array of Independent Disk)技术把多个硬盘设备组合成一个容量更大、安全性更好的磁盘阵列,并把数据切割成多个区段后分别存放在各个不同的物理硬盘设备上,利用分散读写技术提升磁盘阵列整体的性能,同时把多个重要数据的副本同步到不同的物理硬盘设备上,从而起到了非常好的数据冗余备份效果。
简单说就是通过RAID技术可以提升磁盘读写性能,同时可以冗余备份数据保证数据可靠性。但是性能和可靠性不可能同时满足的非常好,因此在二者之间作出权衡就产生了不同的RAID方案。
1.1 RAID方案及特点
据说目前RAID磁盘阵列的方案至少有十几种,然而万变不离其宗,都是在读写性能和可靠性之间权衡,因此只介绍几种比较有代表性的方案。
方案 | 特点 |
---|---|
RAID0 | 磁盘读写性能高,但数据可靠性低 |
RAID1 | 磁盘设备利用率低,但数据可靠性高 |
RAID5 | 兼顾成本、读写性能和数据安全的折中方案 |
RAID10 | 相对于成本,更看重数据安全可靠 |
1.1.1 RAID0
把多块物理硬盘设备通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入到各个物理硬盘中。
最理想情况下,磁盘读写性能将提高数倍,但如果其中任意一块磁盘损坏将导致整个系统数据被破坏。也就是说虽然RAID0有效提高磁盘数据的吞吐速度,但是不具备数据备份和错误修复能力。
其示意图如下:
1.1.2 RAID1
如上所述,虽然RAID0提升了磁盘读写速度,但是由于它将数据依次写入各个磁盘中,把数据分开存储,如果其中一块磁盘发生故障将会导致整个系统数据损坏。因此如果对数据要求性要求较高,但对磁盘读写速度没有要求的话,这种方案就不合适,需要用到RAID1方案。
RAID1示意图如下:
RAID1是把多块硬盘绑定,数据同时写入多块磁盘,这样就会有多份数据副本,当其中某一块硬盘发生故障后,立即自动以热交换的方式来恢复数据的正常使用。
虽然通过副本的形式保证了数据的安全性,但是磁盘设备利用率不高,从示意图可以看出,如果是2块磁盘则利用率只有50%,因此增加了成本开销。
1.1.3 RAID5
前面两种方案分别偏向于磁盘速度和数据安全,而RAID5则是在读写性能、数据安全和成本之间的一个相互妥协方案。
示意图如下:
RAID5技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。这样的好处是其中任何一设备损坏后不至于出现致命缺陷,图中的parity部分存放的就是数据的奇偶校验信息。
简单说就是RAID5方案实际上没有备份硬盘中的真实数据信息(数据只有一份),而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。
这种方案兼顾了了硬盘设备的读写速度、数据安全性与存储成本问题。
1.1.4 RAID10
虽然RAID5看起来在成本问题、磁盘读写以及数据安全性有了一个相互妥协的方案,但实际上很多企业,尤其是金融企业数据本身的价值远比磁盘价格高,因此成本并不是第一考虑要素,在这种场景下,一般是采用RAID10技术。
RAID10方案实际就是把RAID0和RAID1两种方案进行组合而来,示意图如下:
如图所示,需要至少4块硬盘来组建RAID10,先两两组合制作为RAID1确保数据有副本来保证安全性,然后在将组合后的两个RAID1采用RAID0进行组合,进一步提高设备的读写速度。
从理论上讲,只要同一组中的硬盘不全坏掉,那么最多可以损坏50%的硬盘设备而不丢失数据。
由于RAID10方案继承了RAID0的高读写速度和RAID1的数据安全性,在不考虑成本的情况下RAID10的性能都超过了RAID5,因此当前成 为广泛使用的一种存储技术。
说明:由于篇幅所限,其他的方案就不一一列出,需要说明的是应该按照实际需求去考虑成本、磁盘性能、数据安全性等因素,按需选择最合适需求场景的方案。
1.2 mdadm命令
通过上一篇文章“linux入门系列12--磁盘管理之分区、格式化与挂载”的讲解,已经学会了磁盘设备管理之后,再来部署RAID就会非常简单,因此如果还没掌握的话,建议先返回去看上一篇文章。
在正式操作RAID之前,我们先看一下在linux中RAID磁盘阵列的管理命令mdadm。
语法格式:
mdadm [模式参数] RAID名称 [选项] [成员磁盘列表]
参数选项:
参数 | 作用 |
---|---|
-a | 检查设备名称 |
-n | 指定设备数量 |
-l | level,指定 RAID 级别 |
-C | 创建RAID |
-v | 显示详细过程 |
-f | 模拟设备损坏 |
-r | remove,移除设备 |
-D | 查看详细信息 |
1.3 实例1-RAID10部署
1.3.1 环境准备
我们直接在虚拟机中模拟添加多块磁盘来演示RAID的操作,生产环境中采用的命令和步骤都是一致的。
为了避免实验之间的干扰,我们先克隆一台新的Centos虚拟机进行演示
点击“克隆”后,弹出虚拟机向导
点击“下一步”
保存默认选择“虚拟机中的当前状态”,点击“下一步”
选择“创建完整的克隆”,点击“下一步”
按需修改虚拟机名称已经存放的位置,点击“完成”按钮
等待克隆完成(根据不同机器的性能,克隆时间不同)
这样新的虚拟机就准备好了。
1.3.2 创建RAID10
如前所述,RAID10至少需要4块磁盘,因此我们先添加4块磁盘。
(1)添加磁盘
选择刚才克隆的虚拟机,点击“编辑虚拟机设置”
在弹出的“虚拟机设置”窗口中,点击“添加”
在弹出的“添加硬件向导”中选择“硬盘”,然后点击“下一步”
磁盘类型保存默认“SCSI”,点击“下一步”
磁盘类型保持默认的“创建新虚拟机磁盘”,点击“下一步”
根据需要设置磁盘大小,此处设置为1G,点击“下一步”
选择磁盘文件存放路径,点击“完成”按钮
即可看到刚才添加的一块磁盘已经成功。
在上边界面中点击“添加”按钮,用相同的方法再添加3块磁盘,总共新添加4块磁盘。
(2)创建RAID10磁盘阵列
启动刚才添加磁盘的虚拟机,并用之前讲解的lsblk或fdisk查看磁盘设备
[root[@origin](https://my.oschina.net/zorigin) ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 19.5G 0 part
├─centos-swap 253:0 0 2G 0 lvm [SWAP]
└─centos-root 253:1 0 17.5G 0 lvm /
sdb 8:16 0 1G 0 disk
sdc 8:32 0 1G 0 disk
sdd 8:48 0 1G 0 disk
sde 8:64 0 1G 0 disk
sr0 11:0 1 3.9G 0 rom /run/media/root/CentOS 7 x86_64
[root[@origin](https://my.oschina.net/zorigin) ~]# fdisk -l
Disk /dev/sde: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sdd: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sdc: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 =