浅谈RAID的分类以及配合LVM的用法(附带实验)
RAID ( Redundant Array of Independent Disks )即独立磁盘冗余阵列,通常简称为磁盘阵列。简单地说, RAID 是由多个独立的高性能磁盘驱动器组成的磁盘子系统,从而提供比单个磁盘更高的存储性能和数据冗余的技术。 RAID 是一类多磁盘管理技术,其向主机环境提供了成本适中、数据可靠性高的高性能存储。 SNIA 对 RAID 的定义是 :一种磁盘阵列,部分物理存储空间用来记录保存在剩余空间上的用户数据的冗余信息。当其中某一个磁盘或访问路径发生故障时,冗余信息可用来重建用户数据。磁盘条带化虽然与 RAID 定义不符,通常还是称为 RAID(即 RAID0)
RAID 主要优势有如下:
- 1.大容量
这是 RAID 的一个显然优势,它扩大了磁盘的容量,由多个磁盘组成的 RAID 系统具有海量的存储空间。现在单个磁盘的容量就可以到 1TB 以上,这样 RAID 的存储容量就可以达到 PB 级,大多数的存储需求都可以满足。一般来说, RAID 可用容量要小于所有成员磁盘的总容量。不同等级的 RAID 算法需要一定的冗余开销,具体容量开销与采用算法相关。如果已知 RAID 算法和容量,可以计算出 RAID 的可用容量。通常, RAID 容量利用率在 50% ~ 90% 之间。 - 2.高性能
RAID 的高性能受益于数据条带化技术。单个磁盘的 I/O 性能受到接口、带宽等计算机技术的限制,性能往往很有 限,容易成为系统性能的瓶颈。通过数据条带化, RAID 将数据 I/O 分散到各个成员磁盘上,从而获得比单个磁盘成倍增长的聚合 I/O 性能。 - 3.可靠性
可用性和可靠性是 RAID 的另一个重要特征。从理论上讲,由多个磁盘组成的 RAID 系统在可靠性方面应该比单个磁盘要差。这里有个隐含假定:单个磁盘故障将导致整个 RAID 不可用。 RAID 采用镜像和数据校验等数据冗余技术,打破了这个假定。 镜像是最为原始的冗余技术,把某组磁盘驱动器上的数据完全复制到另一组磁盘驱动器上,保证总有数据副本可用。 比起镜像 50% 的冗余开销 ,数据校验要小很多,它利用校验冗余信息对数据进行校验和纠错。 RAID 冗余技术大幅提升数据可用性和可靠性,保证了若干磁盘出错时,不 会导致数据的丢失,不影响系统的连续运行。 - 4.可管理性
实际上, RAID 是一种虚拟化技术,它对多个物理磁盘驱动器虚拟成一个大容量的逻辑驱动器。对于外部主机系统来说, RAID 是一个单一的、快速可靠的大容量磁盘驱动器。这样,用户就可以在这个虚拟驱动器上来组织和存储应用系统数据。 从用户应用角度看,可使存储系统简单易用,管理也很便利。 由于 RAID 内部完成了大量的存储管理工作,管理员只需要管理单个虚拟驱动器,可以节省大量的管理工作。 RAID 可以动态增减磁盘驱动器,可自动进行数据校验和数据重建,这些都可以 大大简化管理工作。
常见的RAID类型比较
RAID等级 | RAID 0 | RAID1 | RAID5 | RAID6 | RAID10 | RAID01 |
---|---|---|---|---|---|---|
别名 | 条带 | 镜像 | 分布奇偶校验条带 | 双重奇偶校验条带 | 镜像加条带 | 条带加镜像 |
容错性 | 无 | 有 | 有 | 有 | 有 | 有 |
冗余类型 | 无 | 有 | 有 | 有 | 有 | 有 |
热备盘 | 无 | 有 | 有 | 有 | 有 | 有 |
读性能 | 高 | 低 | 高 | 高 | 高 | 高 |
随机写性能 | 高 | 低 | 一般 | 低 | 一般 | 一般 |
连续写性能 | 高 | 低 | 一般 | 低 | 一般 | 一般 |
随机写性能 | 高 | 低 | 低 | 低 | 低 | 一般 |
需要磁盘数 | n>=1 | 2n(n>=1) | n>=3 | n>=4 | 2n(n>=2)>=4 | 2n(n>=2)>=4 |
可用容量 | 100% | 50% | n-1/n | n-2/n | 50% | 50% |
注意:RAID10 根RAID01的区别是容错率,当一块磁盘坏了后,RAID10的容错率是1/3,RAID01的容错率是2/3
关于RAID参数调优
通常情况下建议系统(RAID1)与数据(RAID[5|10])分离,这里引用一段话:
- 使用SSD或者PCIe SSD设备,至少获得数百倍甚至万倍的IOPS提升
- 购置阵列卡同时配备CACHE及BBU模块,可明显提升IOPS(主要是指机械盘,SSD或PCIe SSD除外。同时需要定期检查CACHE及BBU模块的健康状况,确保意外时不至于丢失数据)
- 有阵列卡时,设置阵列写策略为WB,甚至FORCE WB(若有双电保护,或对数据安全性要求不是特别高的话),严禁使用WT策略。并且闭阵列预读策略
- 尽可能选用RAID-10,而非RAID-5
- 使用机械盘的话,尽可能选择高转速的,例如选用15KRPM,而不是7.2KRPM的盘,不差几个钱的;
逻辑管理卷 LVM
LVM允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小。
- 允许在多个物理设备间重新组织文件系统
• 将设备指定为物理卷
• 用一个或者多个物理卷来创建一个卷组
• 物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的
• 在物理卷上创建的逻辑卷,是由物理区域(PE)组成
• 可以在逻辑卷上创建文件系统
概念抽象图如下:
- LVM可以弹性的更改LVM的容量,通过交换PE来进行资料的转换,将原来LV内的PE转移到其他的设备中以降低LV的容量,或将其他设备中的PE加到LV中以加大容量
逻辑卷管理工具分三层
-
PV管理工具
显示pv信息 pvs:简要pv信息显示 pvdisplay 创建pv pvcreate /dev/DEVICE 删除pv pvremove /dev/DEVICE
-
VG管理工具
显示卷组 vgs vgdisplay 创建卷组 vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...] 管理卷组 vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...] vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...] 删除卷组 先做pvmove,再做vgremove
-
LV管理工具
显示逻辑卷 lvs Lvdisplay 创建逻辑卷 lvcreate -L #[mMgGtT] -n NAME VolumeGroup lvcreate -l 60%VG -n mylv testvg lvcreate -l 100%FREE -n yourlv testvg 删除逻辑卷 lvremove /dev/VG_NAME/LV_NAME 重设文件系统大小 fsadm [options] resize device [new_size[BKMGTEP]] resize2fs [-f] [-F] [-M] [-P] [-p] device [new_size] xfs_growfs /mountpoint
扩展和缩减逻辑卷
- 扩展逻辑卷:
lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
resize2fs /dev/VG_NAME/LV_NAME
lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME
- 缩减逻辑卷:
umount /dev/VG_NAME/LV_NAME
e2fsck -f /dev/VG_NAME/LV_NAME
resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
mount
#创建逻辑卷示例过程
- 创建物理卷
pvcreate /dev/sda3 - 为卷组分配物理卷
vgcreate vg0 /dev/sda3 - 从卷组创建逻辑卷
lvcreate -L 256M -n data vg0
mkfs.xfs /dev/vg0/data - 挂载
mount /dev/vg0/data /mnt/data
示例开始如下:
- 给虚拟机增加两块硬盘,一块20G 一块10G硬盘
- 找到这两块硬盘
echo '- - -' > /sys/class/scsi_host/host0/scan
echo '- - -' > /sys/class/scsi_host/host1/scan
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
sdb 8:16 0 10G 0 disk
sr0 11:0 1 6.7G 0 rom
nvme0n1 259:0 0 200G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
├─nvme0n1p2 259:2 0 100G 0 part /data
├─nvme0n1p3 259:3 0 50G 0 part /
├─nvme0n1p4 259:4 0 1K 0 part
└─nvme0n1p5 259:5 0 2G 0 part [SWAP]
- 创建物理卷
pvcreate /dev/sda /dev/sdb #建立PV
Physical volume "/dev/sda" successfully created.
Physical volume "/dev/sdb" successfully created.
pvs #查看PV情况
PV VG Fmt Attr PSize PFree
/dev/sda lvm2 --- 20.00g 20.00g
/dev/sdb lvm2 --- 10.00g 10.00g
pvdisplay #详细查看PV情况
"/dev/sda" is a new physical volume of "20.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sda
VG Name
PV Size 20.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 0VDyT6-3f8v-u8dV-YF8b-LpsY-35ac-yIb8k3
"/dev/sdb" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb
VG Name
PV Size 10.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID k9LyQy-BFHe-iCTQ-uwf3-83NK-ejmf-xrsfOS
- 创建卷组 vg 名称为 vg0,指定 pe 为 16M
vgcreate -s 16m vg0 /dev/sda /dev/sdb #创建卷组vg0 pe为16M
Volume group "vg0" successfully created
vgs #简单查看
VG #PV #LV #SN Attr VSize VFree
vg0 2 0 0 wz--n- <29.97g <29.97g
vgdisplay #详细查看
--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size <29.97 GiB
PE Size 16.00 MiB
Total PE 1918
Alloc PE / Size 0 / 0
Free PE / Size 1918 / <29.97 GiB
VG UUID 9LOCEJ-rhyq-cLSJ-3aAg-3K2d-qYXW-J3dxBR
- 创建逻辑卷 LV 名称为 lv0,指定大小为10G
lvcreate -L 10G -n lv0 vg0 #创建 10G大小的逻辑卷
Logical volume "lv0" created.
vs #简单查看
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv0 vg0 -wi-a----- 10.00g
lvdisplay #详细查看
--- Logical volume ---
LV Path /dev/vg0/lv0
LV Name lv0
VG Name vg0
LV UUID jGsXHB-WvZx-2yzp-JLGy-fJIS-PsoQ-IkFLiU
LV Write Access read/write
LV Creation host, time Centos8.localdomain, 2019-10-17 16:13:25 +0800
LV Status available
# open 0
LV Size 10.00 GiB
Current LE 640
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
lsblk #可以查看逻辑卷的组成以及大小
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
└─vg0-lv0 253:0 0 10G 0 lvm
sdb 8:16 0 10G 0 disk
sr0 11:0 1 6.7G 0 rom
nvme0n1 259:0 0 200G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
├─nvme0n1p2 259:2 0 100G 0 part /data
├─nvme0n1p3 259:3 0 50G 0 part /
├─nvme0n1p4 259:4 0 1K 0 part
└─nvme0n1p5 259:5 0 2G 0 part [SWAP]
- 制作逻辑卷的文件系统
mkfs.xfs /dev/vg0/lv0 #制作逻辑卷xfs文件系统
meta-data=/dev/vg0/lv0 isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
blkid /dev/vg0/lv0 #查看LVM的系统属性
/dev/vg0/lv0: UUID="6660877a-0f0f-4735-b523-8aaf7deeb02d" TYPE="xfs"
- 挂载
mkdir /data/ceshi #创建一个挂点
mount /dev/vg0/lv0 /data/ceshi #挂载
df -h #查看硬盘各分区的属性
Filesystem Size Used Avail Use% Mounted on
devtmpfs 889M 0 889M 0% /dev
tmpfs 904M 0 904M 0% /dev/shm
tmpfs 904M 9.4M 894M 2% /run
tmpfs 904M 0 904M 0% /sys/fs/cgroup
/dev/nvme0n1p3 50G 4.9G 46G 10% /
/dev/nvme0n1p2 100G 2.9G 98G 3% /data
/dev/nvme0n1p1 976M 129M 781M 15% /boot
tmpfs 181M 16K 181M 1% /run/user/42
tmpfs 181M 4.0K 181M 1% /run/user/0
/dev/mapper/vg0-lv0 10G 104M 9.9G 2% /data/ceshi
- 扩展逻辑卷
- 把逻辑卷扩容到20G
vgs #先查看是否空间够用
VG #PV #LV #SN Attr VSize VFree
vg0 2 1 0 wz--n- <29.97g <19.97g
lvextend -L +10G /dev/vg0/lv0 #直接增加10G上去
Size of logical volume vg0/lv0 changed from 10.00 GiB (640 extents) to 20.00 GiB (1280 extents).
Logical volume vg0/lv0 successfully resized.
lvs #查看LVM空间大小
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv0 vg0 -wi-ao---- 20.00g
df -hT #查看硬盘分区以及文件系统属性
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 889M 0 889M 0% /dev
tmpfs tmpfs 904M 0 904M 0% /dev/shm
tmpfs tmpfs 904M 9.4M 894M 2% /run
tmpfs tmpfs 904M 0 904M 0% /sys/fs/cgroup
/dev/nvme0n1p3 xfs 50G 4.9G 46G 10% /
/dev/nvme0n1p2 xfs 100G 2.9G 98G 3% /data
/dev/nvme0n1p1 ext4 976M 129M 781M 15% /boot
tmpfs tmpfs 181M 16K 181M 1% /run/user/42
tmpfs tmpfs 181M 4.0K 181M 1% /run/user/0
/dev/mapper/vg0-lv0 xfs 10G 104M 9.9G 2% /data/ceshi
xfs_growfs /dev/vg0/lv0 #把增加分区扩展到LVM卷里去
xfs_growfs: /dev/vg0/lv0 is not a mounted XFS filesystem
# 错误提示,不是一个挂载的文件系统,改变一下思路,用挂载点
xfs_growfs /data/ceshi
meta-data=/dev/mapper/vg0-lv0 isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2621440 to 5242880
#扩容成功
df -hT #查看硬盘分区以及文件系统属性
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 889M 0 889M 0% /dev
tmpfs tmpfs 904M 0 904M 0% /dev/shm
tmpfs tmpfs 904M 9.4M 894M 2% /run
tmpfs tmpfs 904M 0 904M 0% /sys/fs/cgroup
/dev/nvme0n1p3 xfs 50G 4.9G 46G 10% /
/dev/nvme0n1p2 xfs 100G 2.9G 98G 3% /data
/dev/nvme0n1p1 ext4 976M 129M 781M 15% /boot
tmpfs tmpfs 181M 16K 181M 1% /run/user/42
tmpfs tmpfs 181M 4.0K 181M 1% /run/user/0
/dev/mapper/vg0-lv0 xfs 20G 176M 20G 1% /data/ceshi
- 如果要常用,就要配置到自动开机挂载文件 /etc/fstab,因为是实验就不做这一步了。