RAID阵列实验

什么是RAID?


RAID全称:

Redundant Arrays of Inexpensive(Independent) Disks

RAID来历:

1988年由加利福尼亚大学伯克利分校的一个教授所提出的。

RAID阵列的优势:
  • 多个磁盘合成一个“阵列”来提供更好的性能、冗余,或者两者都提供
  • 提高IO能力:磁盘并行读写
  • 提高耐用性:磁盘冗余来实现
  • 多级别:多块磁盘组织在一起的工作方式不同,所达到的效果不同,满足各种需求
RAID的实现方式
  • 外接式磁盘阵列:通过扩展卡提供适配能力
  • 内接式RAID:主板集成RAID控制器安装OS前在BIOS里配置
  • 软件RAID:通过OS实现


各级别的RAID

注:RAID级别的不同,所能提升的方面各有所不不同, 且成本也不同在试验中软RAID生成的磁盘名可能是/dev/mdN,但是在实际的生产环境中,生成的磁盘名是/dev/sdN,可能你正在使用的那块硬盘就是通过RAID阵列生成的。
常见的RAID level :

RAID-0:0, 条带卷,strip;
RAID-1: 1, 镜像卷,mirror;
RAID-2
..
RAID-5
RAID-6
RAID10
RAID01
RAID50
..


非混合RAID

RAID-0

读、写性能提升;
可用空间:N*min(S1,S2,…)
无容错能力
最少磁盘数:2, 2+
在企业中基本被淘汰,就不过多描述了。

RAID-1

读性能提升、写性能略有下降;
可用空间:1*min(S1,S2,…)
有冗余能力
最少磁盘数:2, 2N
在企业中基本被淘汰,就不过多描述了。

RAID-4

多块数据盘异或运算值,存于专用校验盘

RAID-5

读、写性能提升
可用空间:(N-1)*min(S1,S2,…)
有容错能力:允许最多1块磁盘损坏
最少磁盘数:3, 3+

RAID-6

读、写性能提升
可用空间:(N-2)*min(S1,S2,…)
有容错能力:允许最多2块磁盘损坏
最少磁盘数:4, 4+

RAID混合类型级别

RAID-10

读、写性能提升
可用空间:N*min(S1,S2,…)/2
有容错能力:每组镜像最多只能坏一块
最少磁盘数:4, 4+
还有
RAID-01
RAID-50

RAID7: 可以理解为一个独立存储计算机,自身带有操作系 统和管理工具,可以独立运行,理论上性能最高的RAID模式

注:在一些小型的公司,对硬盘要求不是太高的,一般是使用raid5或是raid10这两种,我下面重点介绍一下raid5这种阵列。

RAID-5实验

详细过程:全程用VM ContOS6软件raid模拟真实阵列。

先分区

  • 首先,raid5这个阵列,最少要3块硬盘。我选择加入4块硬盘,3块使用,一块作为备用盘。
  • 加入硬盘后,使用命令识别新加入的硬盘
echo '- - -' > /sys/class/scsi_host/host2/scan
  • 比如我现在使用lsblk命令可以看到新加入的4块硬盘sdb;sdc;sdd;sde.

[ root@centos6 ~ ]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1  5.8G  0 rom  /media/cdrom
sda      8:0    0  200G  0 disk 
├─sda1   8:1    0 1000M  0 part /boot
├─sda2   8:2    0 48.8G  0 part /
├─sda3   8:3    0 39.1G  0 part /app
├─sda4   8:4    0    1K  0 part 
├─sda5   8:5    0    2G  0 part [SWAP]
└─sda6   8:6    0   10G  0 part /home
sdb      8:16   0   20G  0 disk 
sdc      8:32   0   21G  0 disk 
sdd      8:48   0   22G  0 disk 
sde      8:64   0   23G  0 disk 
  • 接下来,我先对sdb盘进行分区。
[ root@centos6 ~ ]# fdisk /dev/sdb(首先对/dev/sdb分区)
  • 选择新的分区,使用n(new的意思)
 Command (m for help): n
  • 选着分区已经存在的,还是新建分区(1-4)里面的一个,我选着新建分区1
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
  • 选着从哪个柱面开始,一般新硬盘选择默认的就好了,我选择默认的,直接按回车键。
 First cylinder (1-2610, default 1): 
  • 我只取其中的1G大小加入我待会要创建的raid5阵列中。
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +1G
  • 这个时候在选择修改你所选择的分区的ID,输入t可以开始修改了,如果不知道所要的修改的ID,可以输入L查看ID。raid的ID是fd.
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)
  • 最后一步了,输入w进行保存即可.
Command (m for help): w
The partition table has been altered!
  • 使用lsblk命令我们可以看到,sdb1分区已经出现了
sdb      8:16   0   20G  0 disksdb1    8:17   0    1G  0 part 
sdc      8:32   0   21G  0 disk 
sdd      8:48   0   22G  0 disk 
sde      8:64   0   23G  0 disk 
  • 可能有的朋友会发现sdb上并没有出现新的分区,那是因为不是是有那个的干净的新磁盘,那么可以使用命令同步。比如:

                   partx -a /dev/sdb
    

接下来有两种方法来实现分出接下来的3个分区
其一是按照上面的过程重复sdb1的分区过程,但是这样稍显麻烦。
其二则是使用dd命令,复制前512个字节,覆盖c,d,e的前512个字节。但是这样,只能分出来的区都是一样的大小。如要求所分区的大小不一样,使用第一种方法继续分区。
而我接下来使用dd命令来对sdc,d,e来分区:

dd if=/dev/sdb of=/dev/sdc bs=1 count=512
dd if=/dev/sdb of=/dev/sdd bs=1 count=512
dd if=/dev/sdb of=/dev/sde bs=1 count=512
partx -a /dev/sdc
partx -a /dev/sdd
partx -a /dev/sde
  • 使用lsblk命令可以看到我们分区已经完成了。
sdb      8:16   0   20G  0 disk 
└─sdb1   8:17   0    1G  0 part 
sdc      8:32   0   21G  0 disk 
└─sdc1   8:33   0    1G  0 part 
sdd      8:48   0   22G  0 disk 
└─sdd1   8:49   0    1G  0 part 
sde      8:64   0   23G  0 disk 
└─sde1   8:65   0    1G  0 part 

创建RAID5阵列

mdadm这个模式化工具可以帮助我们实现阵列的创建。
顺便介绍一下mdadm的选项:

###模式:
创建:-C
装配:-A
监控:-F
管理:-f, -r, -a
###-C: 创建模式
-n #: 使用#个块设备来创建此RAID;
-l #:指明要创建的RAID的级别;
-a {yes|no}:自动创建目标RAID设备的设备文件;
-c CHUNK_SIZE: 指明块大小;
-x #: 指明空闲盘的个数;
###-D:显示raid的详细信息;
mdadm -D /dev/md#
###管理模式:
-f: 标记指定磁盘为损坏;
-a: 添加磁盘
-r: 移除磁盘
  • 使用mdadm模式命令来建立软件raid5硬盘/dev/md5
[ root@centos6 ~ ]# mdadm -C /dev/md5 -l 5 -n3 -x 1 /dev/sd{b,c,d,e}1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
  • 接下来可以使用mdadm -D来查看这个阵列信息
    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       4       8       49        2      active sync   /dev/sdd1

       3       8       65        -      spare   /dev/sde1

(我们可以很清楚的看到,sd{bcd}1在使用中,而sde1作为空闲备用盘放在一旁。)

使用raid5这块硬盘

  • 首先生成/dev/md5的配置文件信息,并导入/etc/mdadm.conf
 [ root@centos6 ~ ]# mdadm -Ds /dev/md5
ARRAY /dev/md5 metadata=1.2 spares=1 name=centos6.9.magedu.com:5 UUID=fe8be162:1edb9d6d:e5df979b:e7be14bd
[ root@centos6 ~ ]# mdadm -Ds /dev/md5 > /etc/mdadm.conf
  • 对/dev/md5进行格式化,这里我选择ext4格式
[ root@centos6 ~ ]# mkfs.ext4 /dev/md5
  • 创建/mnt/raid5目录,且挂载/dev/md5到/mnt/raid5上
[ root@centos6 ~ ]# mkdir /mnt/raid5
[ root@centos6 ~ ]# mount /dev/md5 /mnt/raid5/

(这样我们就可以愉快的在这块raid上输入输出了…)

  • 使用df命令,查看是否已经挂载上了。
[ root@centos6 /mnt/raid5 ]# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda2       50264772 5270400  42434372  12% /
tmpfs             502056      76    501980   1% /dev/shm
/dev/sda3       40185208   76504  38060704   1% /app
/dev/sda1         991512   34904    905408   4% /boot
/dev/sda6       10192924  123080   9545412   2% /home
/dev/sr0         6048356 6048356         0 100% /media/cdrom
/dev/md5         2018796   51728   1861188   3% /mnt/raid5

(很明显,我们可以在最后面看到/dev/md5已经挂载了)

模拟出现故障

 - 假如现在,sdd1硬盘坏掉了,我们模拟出这种情况下,看raid5阵列的应对方式。
[ root@centos6 /mnt/raid5 ]# mdadm /dev/md5 -f /dev/sdd1
mdadm: set /dev/sdd1 faulty in /dev/md5
[ root@centos6 /mnt/raid5 ]# mdadm -D /dev/md5
    Update Time : Sun Aug 13 03:49:38 2017
          State : clean, degraded, recovering 
 Active Devices : 2
Working Devices : 3
 Failed Devices : 1
  Spare Devices : 1
    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       3       8       65        2      spare rebuilding   /dev/sde1

       4       8       49        -      faulty   /dev/sdd1

(我们现在可以看到,state里面出现了degraded, recovering,Working Devices少了1,且,空闲盘/dev/sde1已经顶替了之前的/dev/sdd1的位子,而/dev/sdd1则进入了faulty状态。)

  • 假如,我们现在在模拟破坏一个硬盘呢?比如sde1?
[ root@centos6 /mnt/raid5 ]# mdadm /dev/md5 -f /dev/sde1
mdadm: set /dev/sde1 faulty in /dev/md5
[ root@centos6 /mnt/raid5 ]# mdadm -D /dev/md5
    Update Time : Sun Aug 13 03:53:48 2017
          State : clean, degraded 
 Active Devices : 2
Working Devices : 2
 Failed Devices : 2
  Spare Devices : 0
   Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       4       0        0        4      removed

       3       8       65        -      faulty   /dev/sde1
       4       8       49        -      faulty   /dev/sdd1

(这下工作盘又减少了1,/dev/sde1也进入了faulty状态,虽然上面的级别还是raid5显示,但是实际上已经进入了降级状态,且存储读取速度大大降低)

  • 比如现在我们修好了硬盘,我们该怎么加入进去呢?
    因为我们这是模拟的,我们要先把sde1和sdd1删掉,不然,系统默认这两个盘是坏的,且还在装载服务器上,是不能在直接加进去的,而生产中则是通过一系列的取消挂载等等操作后再拔下来。
[ root@centos6 /mnt/raid5 ]# mdadm /dev/md5 -r /dev/sde1
mdadm: hot removed /dev/sde1 from /dev/md5
[ root@centos6 /mnt/raid5 ]# mdadm /dev/md5 -r /dev/sdd1
mdadm: hot removed /dev/sdd1 from /dev/md5
  • 这个时候我们再把硬盘加上去。使用mdadm -D查看是否加上去了。
[ root@centos6 /mnt/raid5 ]# mdadm /dev/md5 -a /dev/sdd1
mdadm: added /dev/sdd1
[ root@centos6 /mnt/raid5 ]# mdadm /dev/md5 -a /dev/sde1
mdadm: added /dev/sde1
[ root@centos6 /mnt/raid5 ]# mdadm -D /dev/md5
    Update Time : Sun Aug 13 04:06:32 2017
          State : clean 
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 1
    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       3       8       49        2      active sync   /dev/sdd1

       4       8       65        -      spare   /dev/sde1

(可以看出,state又恢复了clean状态,工作盘也是4个了,sde1又变成了之前的空闲备用盘了)

测试raid5性能

  • 这里我用dd /dev/zero 往/dev/md5里面写1G的东西
[ root@centos6 /mnt/raid5 ]# dd if=/dev/zero of=f1 bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 3.65511 s, 287 MB/s

(可以很清楚的看出,写速度是287MB/s的速度)

  • 那我们在测试读性能
[ root@centos6 /mnt/raid5 ]# dd if=f1 of=/dev/null 
2048000+0 records in
2048000+0 records out
1048576000 bytes (1.0 GB) copied, 1.57253 s, 667 MB/s

(读性能在我这破本本上达到了惊人的667MBMB/s,感觉不科学…)

  • 再看看我在其他普通盘上的读写速度
写速度
[ root@centos6 ~ ]# dd if=/dev/zero of=f1 bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 17.3834 s, 60.3 MB/s
读速度
[ root@centos6 ~ ]# dd if=f1 of=/dev/null 
2048000+0 records in
2048000+0 records out
1048576000 bytes (1.0 GB) copied, 16.4121 s, 63.9 MB/s

(我的本本是机械硬盘,可以很明显的看到读写都是在60MB左右。)

个人评价

对于使用软件raid5阵列模拟生产所测验出的数据,我持怀疑态度,
第一,我使用的是机械硬盘,根本不可能出现600+MB/s这种不科学的速度
第二,不管怎么样,我终究其实还是在一块硬盘上在操作,这种数据,可能只是模拟出来的假象。
第三,就算是在真实环境中,使用raid5这个阵列,在一切最理想的的条件下,使用3块工作硬盘,应该也只能达到2倍的速度。
但是,这只是模拟出来,让我们学习原理,以及怎么使用的。以上只是吐槽….

以上的信息只是个人观点,欢迎各位大神指出小白的错误之处,感激不尽。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值