磁盘阵列模拟实践-raid{0,1,5,10}

简  介磁盘阵列(Redundant Arrays of Independent Disks,RAID),即“独立磁盘构成的具有冗余能力的阵列”之意。磁盘阵列是利用多块廉价且独立的磁盘组合成一个大容量的磁盘组,从而实现将个别磁盘提供数据所产生加成效果用以提升整个磁盘系统效能的目的,可以利用这种技术将数据切割成许多区段,分别存放在各个硬盘上,实现数据备份冗余的功能。目前 RAID技术大致分为两种:基于硬件的RAID技术和基于软件的RAID技术。常用的磁盘阵列(RAID)主要有raid0,raid1,raid5,raid10.— RAID相对优缺点:

图片

— RAID选择策略:

图片

— RAID优缺点总结:

图片

实验环境实验工具:vmware虚拟机
操作系统:centos6.7实验方式:利用添加磁盘进行分区的方式模拟进行软raid创建

raid0  (没有奇偶校验的条带模式)

— 原理:

RAID0(stripe没有奇偶校验的条带模式)将多个小磁盘组合成一个大的磁盘组,把连续的数据分散到多个磁盘上进行存取,并行I/O,在所有raid中具有最高的存储性能,但是它没有冗余,如果一个磁盘(物理)损坏,则所有的数据都无法使用!磁盘利用率为100%。

图片

— 方法步骤:

1. 创建raid0;2. 导出阵列配置文件;3. 格式化raid并挂载到指定目录;4. 在/etc/fstab配置信息进行永久挂载。

— 实验演示:

1. 添加磁盘/dev/sdb,并分两个主分区(模拟2块磁盘):

[root@003-64bit3 ~]# fdisk -l /dev/sdb
Device Boot Start End Blocks Id System
/dev/sdb1 1 132 1060258+ 83 Linux
/dev/sdb2 133 264 1060290 83 Linux
[root@003-64bit3 ~]# ls /dev/sdb*
/dev/sdb /dev/sdb1 /dev/sdb2

2. 创建raid,需用到命令mdadm:

图片

[root@003-64bit3 ~]# mdadm -C -v /dev/md0 -l 0 -n 2 /dev/sdb1 /dev/sdb2
mdadm: chunk size defaults to 512K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

3. 扫描信息:

[root@003-64bit3 ~]# mdadm -Ds
ARRAY /dev/md0 metadata=1.2 name=003-64bit3:0 
UUID=d98b416b:05fa8e70:1445c9b8:51ec1892

4. 查看详细信息:

[root@003-64bit3 ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Sep 21 20:33:11 2016
Raid Level : raid0
Array Size : 2117632 (2.02 GiB 2.17 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Wed Sep 21 20:33:11 2016
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Chunk Size : 512K
Name : 003-64bit3:0 (local to host 003-64bit3)
UUID : d98b416b:05fa8e70:1445c9b8:51ec1892
Events : 0
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 18 1 active sync /dev/sdb2

5. 生成raid配置文件:

[root@003-64bit3 ~]# mdadm -Ds > /etc/mdadm.conf
[root@003-64bit3 ~]# cat /etc/mdadm.conf
ARRAY /dev/md0 metadata=1.2 name=003-64bit3:0 
UUID=d98b416b:05fa8e70:1445c9b8:51ec1892

6. 使用raid需先分区:

[root@003-64bit3 ~]# fdisk /dev/md0

7. 跟磁盘分区一样操作:

[root@003-64bit3 ~]# ll /dev/md0*
brw-rw---- 1 root disk 9, 0 9月 21 20:56 /dev/md0
brw-rw---- 1 root disk 259, 0 9月 21 20:56 /dev/md0p1

8. 然后格式化:

[root@003-64bit3 ~]# mkfs.ext4 /dev/md0p1

9. 挂载及使用:

[root@003-64bit3 ~]# mkdir /raid0
[root@003-64bit3 ~]# mount /dev/md0p1 /raid0
[root@003-64bit3 ~]# ls /raid0
lost+found
[root@003-64bit3 ~]# cp /etc/passwd /raid0
[root@003-64bit3 ~]# ls /raid0
lost+found passwd

10. 设置开机自动挂载:

[root@003-64bit3 ~]# vim /etc/fstab
/dev/md0p1 /raid0 ext4 defaults 0 0

11. 核验raid0大小(给/dev/sdb1和/dev/sdb2分的都是1G,共2G)。

[root@003-64bit3 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 2.1G 15G 13% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 27M 154M 15% /boot
/dev/md0p1 2.0G 3.1M 1.9G 1% /raid0

raid1 (镜象结构)

— 原理:

RAID 1 (镜像Mirroring),利用成对的独立磁盘以实现数据的备份,具有全冗余,但是数据有效容量只有总容量的一半,因此成本高;在业务繁忙时,可以从镜像中读取数据,因此一定程度上可以提高读性能。

图片

— 方法步骤

1. 创建raid1;2. 添加1个热备盘;3. 模拟磁盘故障,热备盘自动顶替故障盘;4. 卸载阵列并删除整个阵列。

–实验演示

1. 添加磁盘如/dev/sdc,分3个主分区:

Device Boot Start End Blocks Id System
/dev/sdc1 1 132 1060258+ 83 Linux
/dev/sdc2 133 264 1060290 83 Linux
/dev/sdc3 265 396 1060290 83 Linux

2. 创建raid1:

[root@003-64bit3 ~]# mdadm -C -v /dev/md1 -l 1 -n 2 -x 1 /dev/sdc{1,2,3}
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
mdadm: size set to 1059200K
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.

3. 查看阵列缺失信息:

[root@003-64bit3 ~]# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdc3[2](S) sdc2[1] sdc1[0]
1059200 blocks super 1.2 [2/2] [UU]
unused devices: <none>

#md1:表示此阵列的设备名;

#active:表示此阵列正常读写;

#sdc3[2](S):表示是这个阵列第三个设备且是备用盘;

sdc3[1]是此阵列第二个设备;

sdc3[0]是此阵列第一个设备;

#1059200 blocks:表示此阵列的大小,以块为单位(1G);

#[2/2]:表示此阵列中有2个磁盘,并且2个都在正常运行。4. 生成配置文件,不要追加>>,直接重定向>。

[root@003-64bit3 ~]# mdadm -Ds > /etc/mdadm.conf
[root@003-64bit3 ~]# cat /etc/mdadm.conf
ARRAY /dev/md1 metadata=1.2 spares=1 name=003-64bit3:1 UUID=60875dab:7d3ad5aa:c524ba77:dc4d25e

#spares=1:表示有一个热备盘。5. 分区并格式化:

[root@003-64bit3 ~]# fdisk /dev/md1
[root@003-64bit3 ~]# mkfs.ext4 /dev/md1p1
[root@003-64bit3 ~]# mkdir /raid1
[root@003-64bit3 ~]# mount /dev/md1p1 /raid1
[root@003-64bit3 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 2.1G 15G 13% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 27M 154M 15% /boot
/dev/md1p1 987M 1.3M 934M 1% /raid1

6. 测试使用:

[root@003-64bit3 ~]# cp /etc/passwd /raid1
[root@003-64bit3 ~]# ls /raid1
lost+found passwd

7. 要开机自动挂载可以修改/etc/fstab文件:模拟测试热备盘/dev/sdc3自动顶替故障盘/dev/sdc1。

8. 先观察阵列状态:

[root@003-64bit3 ~]# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdc3[2](S) sdc2[1] sdc1[0]
1059200 blocks super 1.2 [2/2] [UU]
unused devices: <none>

9. 然后将/dev/sdc1指定为故障状态:

[root@003-64bit3 ~]# mdadm -f /dev/md1 /dev/sdc1
mdadm: set /dev/sdc1 faulty in /dev/md1

10. 再查看阵列状态:

[root@003-64bit3 ~]# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdc3[2] sdc2[1] sdc1[0](F)
1059200 blocks super 1.2 [2/2] [UU]
unused devices: <none>

sdc1加上了(F)故障标记,sdc3去掉了(S)备用标记,热备盘自动顶替故障盘成功!

11. 移除故障盘:

[root@003-64bit3 ~]# mdadm -r /dev/md1 /dev/sdc1
mdadm: hot removed /dev/sdc1 from /dev/md1

12. 然后可以看到没有sdc1了。

[root@003-64bit3 ~]# cat /proc/mdstat
Personalities : [raid0] [raid1]
md1 : active raid1 sdc3[2] sdc2[1]
1059200 blocks super 1.2 [2/2] [UU]
unused devices: <none>

13. 删除故障盘后最好重新生成下配置文件,防止后期重启后出现各种问题。

[root@003-64bit3 ~]# cat /etc/mdadm.conf
ARRAY /dev/md1 metadata=1.2 spares=1 name=003-64bit3:1 UUID=60875dab:7d3ad5aa:c524ba77:dc4d25ee
[root@003-64bit3 ~]# mdadm -Ds > /etc/mdadm.conf
[root@003-64bit3 ~]# cat /etc/mdadm.conf
ARRAY /dev/md1 metadata=1.2 name=003-64bit3:1 UUID=60875dab:7d3ad5aa:c524ba77:dc4d25ee

raid5 (分布式奇偶校验的独立磁盘结构)

— 原理:

RAID5将数据以数据块的形式分布到各个硬盘上,同时通过各磁盘的奇偶校验码实现来实现与数据的一一对应;当单个磁盘出问题时,可以通过剩余磁盘的数据和校验码来恢复被损坏的数据。

图片

— 方法步骤

1. 创建raid5;2. 停止阵列,重新激活阵列;3. 添加热备盘,扩展阵列容量,从3个磁盘扩展到4个。

— 实验演示

1. 添加/dev/sde磁盘,然后分区/dev/sde{1,2,3,4,5,6} ,三主三逻辑:

Device Boot Start End Blocks Id System
/dev/sdb1 1 132 1060258+ 83 Linux
/dev/sdb2 133 264 1060290 83 Linux
/dev/sdb3 265 396 1060290 83 Linux
/dev/sdb4 397 2610 17783955 5 Extended
/dev/sdb5 397 528 1060258+ 83 Linux
/dev/sdb6 529 660 1060258+ 83 Linux
[root@vm001 ~]# ls /dev/sdb*
/dev/sdb /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb4 /dev/sdb5 /dev/sdb6

2. 创建raid5:

[root@vm001 ~]# mdadm -C -v /dev/md5 -l 5 -n 3 -c 32 -x 1 
/dev/sdb{1,2,3,5}

注:/dev/sdb4是扩展,所以不写4,写5。
3. 查看阵列状态:

[root@vm001 ~]# cat /proc/mdstat
Personalities : [raid5]
md5 : active raid5 sdb3[4] sdb5[3](S) sdb2[1] sdb1[0]
2118464 blocks super 1.2 level 5, 32k chunk, algorithm 2 [3/3] [UUU]

4. 生成配置文件:

[root@vm001 ~]# mdadm -Ds > /etc/mdadm.conf

5. 停止阵列md5,然后看不到md5的信息:

[root@mycat ~]# cat /proc/mdstat
Personalities : [raid5]
md5 : active raid5 sdb3[4] sdb5[3](S) sdb2[1] sdb1[0]
2118464 blocks super 1.2 level 5, 32k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
[root@mycat ~]# mdadm -S /dev/md5
mdadm: stopped /dev/md5
[root@mycat ~]# cat /proc/mdstat
Personalities : [raid5]
unused devices: <none>

6. 激活阵列:

[root@vm001 ~]# mdadm -As
mdadm: /dev/md5 has been started with 3 drives and 1 spare.

7. 然后又有md5的信息:

[root@mycat ~]# cat /proc/mdstat
Personalities : [raid5]
md5 : active raid5 sdb1[0] sdb5[3](S) sdb3[4] sdb2[1]
2118464 blocks super 1.2 level 5, 32k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>

8. 添加磁盘,扩展raid5为4块磁盘:先将/dev/md5进行分区并格式化后挂载到指定目录。

[root@vm001 ~]# fdisk /dev/md5
[root@vm001 ~]# mkfs.ext4 /dev/md5p1
[root@mycat ~]# mkdir /raid5
[root@vm001 ~]# mount /dev/md5p1 /raid5

9. 添加磁盘分区/dev/sdb6到/dev/md5中:

添加前先卸载/raid5。

[root@mycat ~]# umount /raid5
[root@mycat ~]# mdadm -a /dev/md5 /dev/sdb6
mdadm: added /dev/sdb6

10. 然后查看状态:

[root@mycat ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md5 : active raid5 sdb6[5](S) sdb1[0] sdb5[3](S) sdb3[4] sdb2[1]
2118464 blocks super 1.2 level 5, 32k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>

[root@mycat ~]# mdadm -G /dev/md5 -n 4

11. 查看状态变化:

[root@mycat ~]# watch -n 1 cat /proc/mdstat
md5 : active raid5 sdb6[5] sdb1[0] sdb5[3](S) sdb3[4] sdb2[1]
3177696 blocks super 1.2 level 5, 32k chunk, algorithm 2 [4/4] [UUUU]

12. 重新生成配置文件,防止后续重启发生故障:

[root@mycat ~]# mdadm -Ds > /etc/mdadm.conf

要实现开机自动挂载可以添加修改/etc/fstab文件。

raid10 (raid1+0)(高可靠性与高效磁盘结构)

— 原理:

RAID10可以理解为RAID1+RAID0的组合体,通过综合两种结构各自的优缺点来实现相互补充,实现高效高速高安全的目的,但是成本非常高。

图片

— 方法

1. 先创建两个底层的raid1, 然后再创建一个上层的raid0。添加磁盘/dev/sdc,分区。

Device Boot Start End Blocks Id System
/dev/sdc1 1 132 1060258+ 83 Linux
/dev/sdc2 133 264 1060290 83 Linux
/dev/sdc3 265 396 1060290 83 Linux
/dev/sdc4 397 528 1060290 83 Linux

2. 创建两个底层的raid1:

[root@mycat ~]# mdadm -C -v /dev/md1_1 -l 1 -n 2 /dev/sdc{1,2}[root@mycat ~]# mdadm -C -v /dev/md1_2 -l 1 -n 2 /dev/sdc{3,4}

3. 再创建上层的raid0:

[root@mycat ~]# mdadm -C -v /dev/md0 -l 0 -n 2 /dev/md1_1 /dev/md1_2

4. 生成配置文件:

[root@mycat ~]# mdadm -Ds > /etc/mdadm.conf

5. 然后分区格式化挂载:

[root@mycat ~]# fdisk /dev/md0
[root@mycat ~]# mkfs.ext4 /dev/md0p1
[root@mycat ~]# mkdir /raid10
[root@mycat ~]# mount /dev/md0p1 /raid10

其他操作– 停止所有raid阵列(先umount卸载才能停):

# mdadm -Ss– 激活所有raid阵列:

# mdadm -As– 删除raid配置:

# rm -rf /etc/mdadm.conf– 清除物理磁盘中的raid标识:

# mdadm –misc –zero-superblock /dev/sda5– 参数说明:

mdadm –misc options… devices    #报告或修改各种MD相关的设备;

zero-superblock   #擦除设备中的MD超级块。

本 文 原 创 来 源:IT那活儿微信公众号(上海新炬王翦团队)

发表评论

登录后才能评论
网站客服
网站客服
申请收录 侵权处理
分享本页
返回顶部