第六章 使用RAID与LVM磁盘阵列技术

1.  RAID(独立冗余磁盘阵列)

出于成本和技术方面的考虑,需要针对不同的需求在数据可靠性及读写性能上做出权衡,制定出满足各自需求的不同方案。目前已有的 RAID 磁盘阵列的方案至少有十几种,而刘下表所列出的 RAID 0、RAID 1、RAID 5 与 RAID 10 这 4 种最常见。这 4 种方案的对比如表所示,其中 n 代表硬盘总数。 

1.1  RAID 0

RAID 0 技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入各个物理硬盘中。这样一来,在最理想的状态下,硬盘设备的读写性能会提升数倍,但是若任意一块硬盘发生故障,将导致整个系统的数据都受到破坏。通俗来说,RAID 0 技术能够有效地提升硬盘数据的吞吐速度,但是不具备数据备份和错误修复能力。如图所示,数据被分别写入到不同的硬盘设备中,即硬盘 A 和硬盘 B 设备会分别保存数据资料,最终实现提升读取、写入速度的效果。

1.2  RAID 1 

尽管 RAID  0 技术提升了硬盘设备的读写速度,但它是将数据依次写入到各个物理硬盘中。也就是说,它的数据是分开存放的,其中任何一块硬盘发生故障都会损坏整个系统的数据。因此,如果生产环境对硬盘设备的读写速度没有要求,而是希望增加数据的安全性时,就需要用到 RAID 1 技术了。 

在图所示的 RAID 1 技术示意图中可以看到,它是把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份)。当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用。

考虑到在进行写入操作时因硬盘切换带来的开销,因此 RAID 1 的速度会比 RAID 0 有微弱地降低。但在读取数据的时候,操作系统可以分别从两块硬盘中读取信息,因此理论读取速度的峰值可以是硬盘数量的倍数。另外,平时只要保证有一块硬盘稳定运行,数据就不会出现损坏的情况,可靠性较高。

RAID 1 技术虽然十分注重数据的安全性,但是因为是在多块硬盘设备中写入了相同的数据,因此硬盘设备的利用率得以下降。从理论上来说,上图所示的硬盘空间的真实可用率只有 50%,由 3 块硬盘设备组成的 RAID  1 磁盘阵列的可用率只有 33%左右;以此类推。而且,由于需要把数据同时写入到两块以上的硬盘设备,这无疑也在一定程度上增大了系统计算功能的负载。 

那么,有没有一种 RAID 方案既考虑到了硬盘设备的读写速度和数据安全性,还兼顾了成本问题呢?实际上,单从数据安全和成本问题上来讲,就不可能在保持原有硬盘设备的利用率且还不增加新设备的情况下,能大幅提升数据的安全性。下面将要讲解的 RAID 5 技术虽然在理论上兼顾了三者(读写速度、数据安全性、成本),但实际上更像是对这三者的“相互妥协”。 

1.3  RAID 5

如下图所示,RAID5 技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。RAID 5 磁盘阵列中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中,而是存储到除自身以外的其他每一块硬盘设备上。这样的好处是,其中任何一设备损坏后不至于出现致命缺陷。图中 Parity 部分存放的就是数据的奇偶校验信息。换句话说,就是 RAID 5 技术实际上没有备份硬盘中的真实数据信息而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。RAID 这样的技术特性“妥协”地兼顾了硬盘设备的读写速度、数据安全性

RAID 5 最少由 3 块硬盘组成,使用的是硬盘切割(Disk Striping)技术。相较于 RAID 1级别,好处就在于保存的是奇偶校验信息而不是一模一样的文件内容,所以当重复写入某个文件时,RAID 5 级别的磁盘阵列组只需要对应一个奇偶校验信息就可以,效率更高,存储成本也会随之降低。 

1.4  RAID 10

RAID 5 技术是出于硬盘设备的成本问题对读写速度和数据的安全性能有了一定的妥协,但是大部分企业更在乎的是数据本身的价值而非硬盘价格,因此在生产环境中主要使用 RAID 10 技术。 
顾名思义,RAID 10 技术是 RAID 1+RAID 0 技术的一个“组合体”。如图所示,RAID 10 技术需要至少 4 块硬盘来组建,其中先分别两两制作成 RAID  1 磁盘阵列,以保证数据的安全性;然后再对两个 RAID 1 磁盘阵列实施 RAID 0 技术,进一步提高硬盘设备的读写速度。这样从理论上来讲,只要坏的不是同一阵列中的所有硬盘,那么最多可以损坏 50%的硬盘设备而不丢失数据。由于 RAID  10 技术继承了 RAID  0 的高读写速度和 RAID  1 的数据安全性,在不考虑成本的情况下 RAID 10 的性能也超过了 RAID 5,因此当前成为广泛使用的一种存储技术。 

注:由于 RAID 10 是由 RAID 1 和 RAID 0 组成的,因此正确的叫法是“RAID 一零”,而不是“RAID 十”。

仔细查看图可以发现,RAID  10 是先对信息进行分割,然后再两两一组制作镜像。也就是先将 RAID 1 作为最低级别的组合,然后再使用 RAID 0 技术将 RAID 1 磁盘阵列组合到一起,将它们视为“一整块”硬盘。而 RAID 01 则相反,它是先将硬盘分为两组,然后使用 RAID 0 作为最低级别的组合,再将这两组 RAID 0 硬盘通过 RAID 1 技术组合到一起。 

RAID 10 技术和 RAID 01 技术的区别非常明显。在 RAID 10 中,任何一块硬盘损坏都不会影响到数据安全性,其余硬盘均会正常运作。但在 RAID 01 中,只要有任何一块硬盘损坏,最低级别的 RAID 0 磁盘阵列马上会停止运作,这可能造成严重隐患。所以 RAID 10 远比 RAID 01 常见,很多主板甚至不支持 RAID 01。 

1.5  部署磁盘阵列 

在具备了硬盘设备管理基础之后,再来部署 RAID 和 LVM 就变得十分轻松了。首先,需要在虚拟机中添加 4 块硬盘设备来制作一个 RAID  10 磁盘阵列,如图所示。这里不再详述添加硬盘的步骤,大家自己操作就行。记得硬盘要用 SCSI 或 SATA 接口的类型,大小默认 20GB 就可以。 需要注意的是,一定要记得在关闭系统之后,再在虚拟机中添加硬盘设备,否则可能会因为计算机架构的不同而导致虚拟机系统无法识别新添加的硬盘设备。

[root@localhost ~]# 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 
  ├─rhel00-swap 253:0    0    2G  0 lvm  [SWAP]
  └─rhel00-root 253:1    0 17.5G  0 lvm  /
sdb               8:16   0   20G  0 disk 
├─sdb1            8:17   0  500M  0 part 
└─sdb2            8:18   0 19.5G  0 part 
  ├─rhel-swap   253:2    0    2G  0 lvm  
  └─rhel-root   253:3    0 17.5G  0 lvm  
sdc               8:32   0   20G  0 disk 
├─sdc1            8:33   0    2G  0 part 
└─sdc2            8:34   0    5G  0 part 
sdd               8:48   0   20G  0 disk 
sde               8:64   0   20G  0 disk 
sdf               8:80   0   20G  0 disk 
sr0              11:0    1 1024M  0 rom 

使用lsblk命令查看当前块的状态,可以用sdc、sdd、sde、sdf作为RAID的模块。

当前,生产环境中用到的服务器一般都配备 RAID 阵列卡,尽管服务器的价格越来越便宜,但是我们没有必要为了做一个实验而去单独购买一台服务器,而是可以学会使用 mdadm命令在 Linux 系统中创建和管理软件 RAID 磁盘阵列,而且它涉及的理论知识和操作过程与生产环境中的完全一致。 

mdadm 命令用于创建、调整、监控和管理 RAID 设备,英文全称为“multiple  devices admin”。
语法格式:mdadm 参数  硬盘名称 

mdadm 命令中的常用参数及作用如表所示。 接下来,使用 mdadm 命令创建 RAID 10,名称为“/dev/md0”。

此时,就需要使用 mdadm 中的参数了。其中,-C 参数代表创建一个 RAID 阵列卡;-v参数显示创建的过程,同时在后面追加一个设备名称/dev/md0,这样/dev/md0 就是创建后的RAID 磁盘阵列的名称;-n 4 参数代表使用 4 块硬盘来部署这个 RAID 磁盘阵列;而-l 10 参数则代表 RAID 10 方案;最后再加上 4 块硬盘设备的名称就搞定了。 

[root@localhost ~]# mdadm -Cv /dev/md0 -n 4 -l 10 /dev/sdc /dev/sdd /dev/sde /dev/sdf
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: /dev/sdc appears to be part of a raid array:
    level=raid0 devices=0 ctime=Thu Jan  1 08:00:00 1970
mdadm: partition table exists on /dev/sdc but will be lost or
       meaningless after creating array
mdadm: size set to 20954624K
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

初始化过程大约需要 1 分钟左右,期间可以用-D 参数进行查看。也可以用-Q 参数查看简要信息: 

[root@localhost ~]# mdadm -Q /dev/md0 
/dev/md0: 39.97GiB raid10 4 devices, 0 spares. Use mdadm --detail for more detail.

注:这里的可用空间只有39.97GB ,而不是80G 。原因是RAID 10 技术的原理。它通过两两一组硬盘组成的 RAID 1 磁盘阵列保证了数据的可靠性,其中每一份数据都会被保存两次,因此导致硬盘存在 50%的使用率和 50%的冗余率。这样一来,80GB 的硬盘容量也就只有一半了。 

等两三分钟后,把制作好的 RAID 磁盘阵列格式化为 Ext4 格式:

[root@localhost ~]# mkfs.ext4 /dev/md0 
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
2621440 inodes, 10477312 blocks
523865 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2157969408
320 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done 

随后,创建挂载点,将硬盘设备进行挂载操作: 

[root@localhost ~]# mkdir /RAID
[root@localhost ~]# mount /dev/md0 /RAID
[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/rhel00-root   18G  2.9G   15G  17% /
devtmpfs                 985M     0  985M   0% /dev
tmpfs                    994M  136K  994M   1% /de
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值