首页 > 代码库 > RAID与LVM的结合应用

RAID与LVM的结合应用

对于互联网运营的公司来说,数据是至关重要的.每天有着用户的访问,都会产生大量的数据,这些数据的存放地正是我们的硬盘.基于此,磁盘的管理就显得尢为的重要了.

数据的不段产生,就会不停的写入到磁盘中,而磁盘的空间终究是有限的,而造出一个无限大的硬盘又不是不可能的.这就对我们的技术提出了新的要求,在当前的硬盘容量不足以支持的情况下,要加入新的硬盘进来,共同完成数据的存储.

而磁盘在读写的时候,在高并发的访问量的情况下,会给磁盘的读写造成相当大的压力,这就要求我们要用新的解决方案来克服这一问题.而且磁盘的工作寿命也终究是有限的,这又要求我们在生产环境中,需要能将坏掉的硬盘换下来,补允新的硬盘上去.完成以上的种种技术要求,需要怎样的技术来得以实现呢? 在这样的大背景下, 独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks)和LVM是逻辑盘卷管理(Logical Volume Manager)就应孕而生了.

    首先我们来了解一下  RAID 技术.RAID有 RAID0 -RAID6这几种管理方式,[还有非公开的RAID7标准,这里不作讨论]


wKiom1PL0NKAdqQMAABT7RrNqOA215.jpg

RAID 0 它将两个以上的磁盘并列起来,成为一个大容量的磁盘。在存放数据时,分段后分散存储在这些磁盘中,因为读写时都可以并行处理,所以在所有的级别中,RAID 0的速度是最快的。但是RAID 0既没有冗余功能,也不具备容错能力,如果一个磁盘(物理)损坏,所有数据都会丢失,非常危险。数据存放容量是 组合中,最小磁盘的容量 X 磁盘数量

RAID 1

wKioL1PL0ezBxIlHAABT3nv5tNk672.jpg

两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,理论上读取速度等于硬盘数量的倍数,另外写入速度有微小的降低。所有个硬盘互为镜像.不管哪块硬盘损坏,镜像硬盘则会工作。不管多少硬盘组成阵列都只能用一块硬盘的空间,空间利用 率极低,有容错能力.可用空间为组合中最小容量的硬盘


 RAID2 - RAID4在生产环境中,使用并不多,这里不作讨论.

RAID 5

wKiom1PL0NLA9_KAAAByrBeAiUY384.jpg

RAID 5是一种储存性能、数据安全和存储成本兼顾的存储解决方案。它使用的是硬盘分区技术。RAID 5至少需要三块硬盘,RAID 5不是对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。也就是每一块盘都是其它盘的校验盘,当RAID5的一个磁盘数据发生损坏后,可以用剩下的数据校验信息修复被损坏的数据。RAID 5可以理解为是RAID 0和RAID 1的折衷方案。RAID 5有容错能力,又极大的提高了磁盘的利用空间, 而且RAID5的读写速度近似于RAID0,所以这是一个很好的选择.该方案的容量使用率为硬盘数量减1,X组合中最小容量磁盘.


RAID 6

wKioL1PL0e3wB0W9AACNTTjhNfE988.jpg

与RAID 5相比,RAID 6增加了第二个独立的奇偶校验信息块。两个独立的奇偶系统使用不同的算法,数据的可靠性非常高,即使两块磁盘同时失效也不会影响数据的使用。但RAID 6需要分配给奇偶校验信息更大的磁盘空间,相对于RAID 5有更大的“写损失”,因此“写性能”非常差。较差的性能和复杂的实作方式使得RAID 6很少得到实际应用。同一数组中最多容许两个磁盘损坏。更换新磁盘后,数据将会重新算出并写入新的磁盘中。RAID6必须要有4块盘才能正常工作,所以这里我们选择RAID5作为重点讨论


首先在虚拟机中,准备8块5G的硬盘

[root@localhost html]# fdisk -l|awk ‘/^Disk \/dev\/sd[a-z]/{print $2}‘     ==>sdb - sdg 共8块
/dev/sda: 
/dev/sdb: 
/dev/sdc: 
/dev/sde: 
/dev/sdd: 
/dev/sdf: 
/dev/sdh: 
/dev/sdi: 
/dev/sdg:

准备8块硬盘,4块硬盘做成一组RAID5,其中有一块是热备盘,这里我们要用到mdadm命令,简单的简介一下mdadm命令的用法

mdadm: 模块式化命令

   -A: 装配模式,重新识别此前实现的RAID

   -C:创建模式,创建RAID

   -F:监控模式

   管理模式:-f, -r, -a

  -C: 创建模式中专用选项

   -n #: 用于创建RAID设备的磁盘个数;

   -l #: 级别

   -a yes: 自动为创建的RAID生成设备文件;

   -c Chunk_Size:

这里我们是创建RAID,用到的是-C选项,过程如下

[root@localhost ~]# mdadm -C /dev/md0 -a yes -n 3 -l 5 /dev/sdb /dev/sdc /dev/sdd     ==> -a yes是自动创建块设备, -n 3 用三块硬盘创建, -l 5 五级别
mdadm: /dev/sdb appears to be part of a raid array: 
level=raid1 devices=2 ctime=Sun Jul 20 20:19:23 2014 
mdadm: /dev/sdc appears to be part of a raid array: 
level=raid1 devices=2 ctime=Sun Jul 20 20:19:23 2014 
Continue creating array? y 
mdadm: Defaulting to version 1.2 metadata 
mdadm: array /dev/md0 started.    ==>看到这个就表示以/dev/md0为命名的RAID5设备创建好了.


[root@localhost ~]# mdadm -a /dev/md0 /dev/sde     ==>给RAID5 设备/dev/md0 加入一块热备盘
mdadm: added /dev/sde

[root@localhost ~]# mdadm -D /dev/md0 
/dev/md0: 
Version : 1.2 
Creation Time : Sun Jul 20 21:10:35 2014 
Raid Level : raid5 
Array Size : 10476544 (9.99 GiB 10.73 GB) 
Used Dev Size : 5238272 (5.00 GiB 5.36 GB) 
Raid Devices : 3 
Total Devices : 4 
Persistence : Superblock is persistent 

Update Time : Sun Jul 20 21:13:39 2014 
State : clean 
Active Devices : 3 
Working Devices : 4 
Failed Devices : 0 
Spare Devices : 1 

Layout : left-symmetric 
Chunk Size : 512K 

Name : localhost.localdomain:0 (local to host localhost.localdomain) 
UUID : 53eb296b:191ae53c:c075947a:72f789e5 
Events : 19 

Number Major Minor RaidDevice State 
0 8 16 0 active sync /dev/sdb 
1 8 32 1 active sync /dev/sdc 
3 8 48 2 active sync /dev/sdd 


4 8 64 - spare /dev/sde            这里显示, /dev/sdb,sdc,sdd是工作盘, /dev/sde是热备盘


同样的过程创建RAID5 /dev/md1.

准备好 两个 RAID5 的 /dev/md0 , /dev/md1后,我们就可以 创建 LVM 逻辑盘卷管理了

首先创建PV

[root@localhost ~]# pvcreate /dev/md0 /dev/md1 
Physical volume "/dev/md0" successfully created 
Physical volume "/dev/md1" successfully created

用创建的两个pv /dev/md0 /dev/md1 创建一个vg组,

[root@localhost ~]# vgcreate myvg /dev/md0 /dev/md1 
Volume group "myvg" successfully created


[root@localhost ~]# lvcreate -n mylv1 -L 6G myvg 
Logical volume "mylv1" created 
[root@localhost ~]# lvcreate -n mylv2 -L 6G myvg 
Logical volume "mylv2" created 
[root@localhost ~]# vgs 
VG #PV #LV #SN Attr VSize VFree 
myvg 2 2 0 wz--n- 19.98g 7.98g         ==>此时myvg组还有7.98G的容量,把它都分给mylv3
vg0 1 4 0 wz--n- 59.99g 7.99g

[root@localhost ~]# lvcreate -n mylv3 -L 7.97G myvg


这样我们的一个逻辑盘卷管理系统就做好了.下面可以进行格式化分区了,格式化分区后,就可以挂载到系统目录中使用了.

 虚拟分区格式化
[root@localhost ~]# mke2fs -t ext4 /dev/myvg/mylv1     格式化lv1

mke2fs 1.41.12 (17-May-2010) 
Filesystem label= 
OS type: Linux 
Block size=4096 (log=2) 
Fragment size=4096 (log=2) 
Stride=128 blocks, Stripe width=256 blocks 
393216 inodes, 1572864 blocks 
78643 blocks (5.00%) reserved for the super user 
First data block=0 
Maximum filesystem blocks=1610612736 
48 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 

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

This filesystem will be automatically checked every 31 mounts or 
180 days, whichever comes first. Use tune2fs -c or -i to override.


在/mnt下创建三个目录,分别挂载 mylv1,2,3

[root@localhost mnt]# mkdir mylv{1,2,3}

[root@localhost mnt]# tree ./ 
./ 
├── mylv1 
├── mylv2 
└── mylv3

分别将三个分区挂载好.

[root@localhost mnt]# mount /dev/myvg/mylv1 /mnt/mylv1 
[root@localhost mnt]# mount /dev/myvg/mylv2 /mnt/mylv2 
[root@localhost mnt]# mount /dev/myvg/mylv3 /mnt/mylv3


[root@localhost mylv1]# touch /mnt/mylv1/testmylv1.txt 
[root@localhost mylv1]# echo ‘hello lvm‘>>/mnt/mylv1/testmylv1.txt


此时,在逻辑卷中,我们写入了数据,那么我们模拟一下RAID中的一块块盘坏了,看对数据是否有影响

[root@localhost mylv1]# mdadm -f /dev/md0 /dev/sdb     此时我们设置/dev/md0中的 /dev/sdb硬盘已损坏
mdadm: set /dev/sdb faulty in /dev/md0 
[root@localhost mylv1]# mdadm -D /dev/md0     查看/dev/md0的状态
/dev/md0: 
Version : 1.2 
Creation Time : Sun Jul 20 21:10:35 2014 
Raid Level : raid5 
Array Size : 10476544 (9.99 GiB 10.73 GB) 
Used Dev Size : 5238272 (5.00 GiB 5.36 GB) 
Raid Devices : 3 
Total Devices : 4 
Persistence : Superblock is persistent 

Update Time : Sun Jul 20 21:58:14 2014 
State : clean, degraded, recovering 
Active Devices : 2 
Working Devices : 3 
Failed Devices : 1 
Spare Devices : 1 

Layout : left-symmetric 
Chunk Size : 512K 

Rebuild Status : 45% complete 

Name : localhost.localdomain:0 (local to host localhost.localdomain) 
UUID : 53eb296b:191ae53c:c075947a:72f789e5 
Events : 28 

Number Major Minor RaidDevice State 
4 8 64 0 spare rebuilding /dev/sde         ==>此处显示原来的热备盘正在同步之前的数据
1 8 32 1 active sync /dev/sdc 
3 8 48 2 active sync /dev/sdd 

0 8 16 - faulty /dev/sdb ==>很明显,这里显示/dev/sdb盘处于损坏状态,此前作为热备盘的/dev/sde自动顶上了

[root@localhost mylv1]# cat testmylv1.txt     再来查看,逻辑卷中的数据是否受影响
hello lvm    ==>ok数据完好.


此时该RAID组还有三块硬盘在工作,还允许再坏一块硬盘,而数据的完整性同样能得到保证.

[root@localhost mylv1]# mdadm -f /dev/md0 /dev/sdc  设置 /dev/sdc盘坏了
mdadm: set /dev/sdc faulty in /dev/md0 
[root@localhost mylv1]# mdadm -D /dev/md0      查看RAID组状态
/dev/md0: 
Version : 1.2 
Creation Time : Sun Jul 20 21:10:35 2014 
Raid Level : raid5 
Array Size : 10476544 (9.99 GiB 10.73 GB) 
Used Dev Size : 5238272 (5.00 GiB 5.36 GB) 
Raid Devices : 3 
Total Devices : 4 
Persistence : Superblock is persistent 

Update Time : Sun Jul 20 22:13:30 2014 
State : clean, degraded 
Active Devices : 2 
Working Devices : 2 
Failed Devices : 2 
Spare Devices : 0 

Layout : left-symmetric 
Chunk Size : 512K 

Name : localhost.localdomain:0 (local to host localhost.localdomain) 
UUID : 53eb296b:191ae53c:c075947a:72f789e5 
Events : 42 

Number Major Minor RaidDevice State 
4 8 64 0 active sync /dev/sde 
1 0 0 1 removed 
3 8 48 2 active sync /dev/sdd 

0 8 16 - faulty /dev/sdb 
1 8 32 - faulty /dev/sdc                两块磁盘处于损坏状态

我们再来检查一下,看数据是否依然完整

[root@localhost mylv1]# cat /mnt/mylv1/testmylv1.txt 
hello lvm        ==> ok数据完整

本文出自 “909是个目标” 博客,请务必保留此出处http://robert1joy.blog.51cto.com/4489523/1440618

RAID与LVM的结合应用