博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
什么是raid? 在虚拟机上实现raid5
阅读量:3521 次
发布时间:2019-05-20

本文共 5226 字,大约阅读时间需要 17 分钟。

★RAID 简介

 

◇啥是 RAID?

  RAID 是洋文“Redundant Array of Inexpensive Disks”的缩写,中文称之为“磁盘冗余阵列”。
  搞这个玩意儿的好处包括两方面:
其一,通过增加数据的【冗余度】来提升其【可靠性】(RAID 有好几种类型;除了 RAID0,其它各种类型都可以不同程度地提高可靠性)
其二,提升“读性能”或“写性能”或“读写性能”(取决于你具体使用哪种 RAID 类型)
 

◇RAID 的类型

  RAID 有很多种类型,详细解释参见维基百科的“”。LVM 已经支持如下几种:

RAID 0
RAID 1
RAID 4
RAID 5
RAID 6
RAID 10

  考虑到篇幅,俺挑几种常用的 RAID 类型,在下一个章节介绍。介绍的时候,会顺便说说该 RAID 类型的【原理】。

 

◇“软 RAID”与“硬 RAID”

  硬 RAID
  “硬 RAID”需要在电脑主板上插一个“RAID 硬件”(RAID 控制器)。然后由这个“RAID 硬件”来控制多块磁盘——RAID 功能全靠该“RAID 硬件”来完成。
  操作系统通过该“RAID 硬件”的驱动来与之打交道。在这种模式下,操作系统【看不到】具体的每一个磁盘。因此,这种这种模式的 RAID 对操作系统来说是【透明】滴。
  软 RAID
  在这种模式下,每个磁盘都直接连到主板上,操作系统可以看到每个磁盘,RAID 功能由操作系统层面(软件层面)实现。故称之为“软 RAID”。
  本文讨论的就是这种。
 

◇哪些同学需要考虑 RAID?

  使用 RAID 的【前提】是——你的电脑上同时装了【多个】物理磁盘。如果没有这个前提,搞 RAID 是没意义滴。

LVM 自带的 RAID 功能

 

◇RAID 0 的玩法

  原理
  RAID0 有时候也称作“带区集 or 条纹集”。通俗地说就是:把 N 个设备凑成一个大的逻辑设备。每次要写入数据时,先拆分为 N 等份,平均写入每个设备。

空间利用率

  完全不浪费(利用率接近 100%)。在所有 RAID 类型中,这种的空间利用率最高。
  可靠性
  虽然利用率最高,但可靠性最差(无冗余)——任何一个设备坏掉,全完蛋。
  操作步骤
  先创建 N 个大小一样的 PV(此处假设 N = 2),并加入到同一个 VG 里面(假设 VG 名称叫做 vg_raid)。具体如何做,前面已经聊过。
  用如下命令可以创建一个名叫 lv_xxxx 的逻辑卷,并设定以 RAID0 方式存储数据。

lvcreate --type raid0 --stripes 2 --extents 100%FREE -n lv_xxxx vg_raid

  上述命令的参数说明:

参数 说明
--type raid0 采用 RAID 0 的方式存储数据
--stripes 2 用来创建“带区集”的设备数,在本示例中是 2
对于 RAID0,该参数的最大值为 64
--extents 100%FREE 创建一个 LV,把 VG 的剩余空间都用掉

  最后,在这个新创建的 LV 之上创建文件系统。
 

◇RAID 1 的玩法

  原理
  RAID1 有时候也称作“镜像”。也就是说,用 N 块【大小一样】的存储空间,存储相同的数据,以达到冗余的目的。

 

空间利用率

  在常见的 RAID 类型中,RAID1 的【空间利用率】最低(只有 1/N)。
  可靠性
  可靠性最高(哪怕 N-1 个设备【同时】坏掉,数据都还在)。
  操作步骤
  先创建 N 个大小一样的 PV(此处假设 N = 2),并加入到同一个 VG 里面(假设 VG 名称叫做 vg_raid)。具体如何做,前面已经聊过。
  用如下命令可以创建一个名叫 lv_xxxx 的逻辑卷,并设定以 RAID1 方式存储数据。

lvcreate --type raid1 --mirrors 1 --nosync --extents 100%FREE -n lv_xxxx vg_raid

  上述命令的参数说明:

参数 说明
--type raid1 采用 RAID 1 的方式存储数据
--mirrors 1 镜像设备的数量。
在本示例中用了两个存储设备,其中一个用作镜像;
如果是3个设备搞 RAID1,该参数就是 2(以此类推)
(对于 RAID1,该参数的最大值为 9
--nosync 创建 LV 的过程中【不】在几个 PV 之间同步数据,
可缩短该命令的执行时间。

  最后,在这个新创建的 LV 之上创建文件系统(具体命令,前面已经聊过)。
 

◇RAID 5 的玩法

  原理
  RAID5 是针对 RAID4 的改良。这2款的存储风格与前面所说的 RAID0 类似(都用了 stripes 方式拆分数据);为了做到“可靠性”,RAID4 & RAID5 引入了校验码。它至少需要 N 个设备(N ≥ 3),数据写入前,先拆分为 N-1 份,写入其中 N-1 个设备,多出来的那个设备用来保存【校验码】。
  俺用下面这张示意图表示 RAID4 & RAID5 的存储差异。RAID4 把校验值全部放到同一个磁盘,会大大增加该磁盘的写操作——每次有数据块被修改,都要更新校验值,都得写这块磁盘。这块磁盘就会成为“写操作”的瓶颈。
  (由于 RAID4 明显不如 RAID5,如今用的很少,所以俺就不聊 RAID4 了)
 

空间利用率

  空间利用率 (N-1)/N,明显高于 RAID1(1/N),但低于 RAID0(100%)。
  可靠性
  可靠性也不差,N 块设备随便坏一块,都可以恢复。同时坏两块,数据会完蛋(但同时坏两块的概率很低)。
  操作步骤
  先创建 N 个大小一样的 PV(此处假设 N = 3),并加入到同一个 VG 里面(假设 VG 名称叫做 vg_raid)。

  用如下命令可以创建一个名叫 lv_xxxx 的逻辑卷,并设定以 RAID5 方式存储数据。

lvcreate --type raid5 --stripes 2 --nosync --extents 100%FREE -n lv_xxxx vg_raid

  上述命令的参数说明:

参数 说明
--type raid5 采用 RAID 5 的方式存储数据
--stripes 2 表示数据拆分为几份。
对于 RAID5 模式的 N 个设备,该数字是【N-1】(参见上述示意图)
(对于 RAID5,该参数的最大值为 63
--nosync 创建 LV 的过程中【不】在几个 PV 之间同步数据,
可缩短该命令的执行时间。

  最后,在这个新创建的 LV 之上创建文件系统(具体命令,前面已经聊过)。
 

◇LVM 使用 RAID 存储的注意事项

  一旦你在某个 VG 上创建了 RAID 方式的 LV,之后你就【无法】再从该 VG 中移除 PV 了(这是由 RAID 本身的特点决定的)。这种情况下,如果你非要移除该 VG 中的 PV,除非你先把该 VG 上涉及 RAID 存储的那些 LV 先全部删除,然后才能移除 PV。
  一般来说,如果你要采用 RAID 的方式,应该为此单独创建一个新的 VG,该 VG 中的 PV 只用于 RAID 方式。

实战

1、在虚拟机上实现 软raid5.

主要步骤:

  • 添加三块scsi硬盘
[root@localhost ~]# lsblkNAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTsda             8:0    0   20G  0 disk ├─sda1          8:1    0    1G  0 part /boot└─sda2          8:2    0   19G  0 part   ├─rhel-root 253:0    0   17G  0 lvm  /  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]sdb             8:16   0    5G  0 disk sdc             8:32   0    5G  0 disk sdd             8:48   0    5G  0 disk
  • 创建三个大小一样的pv
[root@localhost ~]# pvcreate /dev/sdb  Physical volume "/dev/sdb" successfully created.[root@localhost ~]# pvcreate /dev/sdc  Physical volume "/dev/sdc" successfully created.[root@localhost ~]# pvcreate /dev/sdd  Physical volume "/dev/sdd" successfully created.[root@localhost ~]# pvs  PV         VG   Fmt  Attr PSize   PFree  /dev/sda2  rhel lvm2 a--  <19.00g    0   /dev/sdb        lvm2 ---    5.00g 5.00g  /dev/sdc        lvm2 ---    5.00g 5.00g  /dev/sdd        lvm2 ---    5.00g 5.00g
  • 将三个pv放一个vg逻辑池
[root@localhost ~]# vgcreate vg_raid /dev/sdb  Volume group "vg_raid" successfully created[root@localhost ~]# vgextend vg_raid /dev/sdc  Volume group "vg_raid" successfully extended[root@localhost ~]# vgextend vg_raid /dev/sdd  Volume group "vg_raid" successfully extended[root@localhost ~]# vgs  VG      #PV #LV #SN Attr   VSize   VFree    rhel      1   2   0 wz--n- <19.00g      0   vg_raid   3   0   0 wz--n- <14.99g <14.99g[root@localhost ~]#
  • 创建lv逻辑卷并以raid5方式存储数据。
[root@localhost ~]# lvcreate --type raid5 --stripes 2 --nosync --extents 100%FREE -n lv_raid5 vg_raid  Using default stripesize 64.00 KiB.  Rounding size (3837 extents) down to stripe boundary size (3836 extents)  WARNING: New raid5 won't be synchronised. Don't read what you didn't write!  Logical volume "lv_raid5" created.[root@localhost ~]# lvs  LV       VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert  root     rhel    -wi-ao---- <17.00g                                                      swap     rhel    -wi-ao----   2.00g                                                      lv_raid5 vg_raid Rwi-a-r---   9.98g                                    100.00          [root@localhost ~]#

可以看到三快盘一共是15GB ,做完raid变成了9.8GB

利用率刚好是66.7%

 

转载地址:http://lthqj.baihongyu.com/

你可能感兴趣的文章
Mybatis-Spring简单的配置和使用,配置事务
查看>>
SpringMVC和Mybatis整合使用的配置文件
查看>>
代码特效插件pycharm
查看>>
python实现tcp客户端从服务端下载文件
查看>>
将字符串 “k:1|k1:2|k2:3|k3:4” 转换成字典{“k”:1,”k1”:2,”k2”:3,”k3”:4}
查看>>
AttributeError: 'tuple' object has no attribute 'decode'
查看>>
node爬虫(牛刀小试)
查看>>
关于vue的seo优化
查看>>
字符串在html中的页面中的换行
查看>>
react父子组件间的通信和传值
查看>>
vue-cli3.0设置环境变量
查看>>
vue父组件直接操作子组件的方法(不通过$emit和$on)
查看>>
vue上传文件到UCloud
查看>>
获取input选择文件的本地地址
查看>>
React绑定全局方法或变量
查看>>
js监听div标签上面的自定义属性
查看>>
navcat如何重置窗口
查看>>
代码注入
查看>>
off-by-one
查看>>
ctf-pwn的一些小技巧
查看>>