您的位置:首页 > 大数据 > 人工智能

配置RAID

2015-10-17 00:19 411 查看
有时候我们需要容量较大或读写性能比较好的磁盘,特别是在服务器中,但这样的磁盘价格自然比较昂贵,比如说SSD。此时如果你手头有几块普通磁盘,RAID就可以派上用场了。

一、RAID是什么?
RAID(Redundant Arrays of Independent Disks)意思是廉价磁盘冗余阵列,它可将至少两个便宜的普通磁盘组合成容量巨大的磁盘组,以扩大存储空间或提升读写性能或让数据具有容错能力。磁盘可组成多种RAID级别。
评判RAID主要有三个标准:空间利用率读写性能容错性

二、RAID级别
1、RAID0/条带化



这种模式的RAID会将数据以切片的方式依序平均分配到每个磁盘。如图,“A1”保存于磁盘1,“A2”保存于磁盘于2,然后“B1”保存于磁盘1,“B2”保存于磁盘于2,这样循环下去。如果其中一块磁盘损坏,就会丢失数据
◆至少需要两块磁盘;空间利用率:100%;读写性能最好;无容错能力;RAID0主要具有扩容和提速的功能,不能应用于要求数据高可用的环境
2、RAID1/镜像化



这种模式的RAID让同一份数据完整地保存于两个或多个磁盘上,即把一个或多个磁盘作为另一磁盘的镜像。
◆至少需要两块磁盘;空间利用率:1/n,不超过50%;读性能提升,写性略有下降;完全容错,数据恢复快;用于对数据安全性要求较高的环境中,如数据库
3、RAID5


这种RAID模式的数据写入类似于RAID0,但它会在每个循环写入过程中加入校验码,而且这些校验码也是分散于各个磁盘上的,如下图,这样当其中一块磁盘损坏时,使用完好的数据和校验码经过CPU计算后还能恢复丢失的数据。如果两个或两个以上磁盘损坏,则无法恢复。
◆至少需要三块磁盘;空间利用率:(n-1)/n;读性能很好,写性能平均水平;容错(允许坏一块磁盘);这种模式相当于RAID0和RAID1的折衷,即有较好的性能,也具备一定的容错能力,是比较通用的做法
4、RAID6


RAID6类似于RAID5,只是有两块校验盘,允许同时坏两坏盘。
◆至少需要四块磁盘;空间利用率:(n-2)/n;读性能很好,写性能不如RAID5;容错能力比RAID强(允许坏两块磁盘)
5、RAID0+1和RAID10





RAID0+1容易理解,就是先组成RAID0,后组成RAID1,即先条带后镜像;RAID10刚好相反,先镜像后条带。如图,RAID0+1不允许disk1和disk3(或者disk2和disk4)同时坏掉,而RAID10不允许disk1和disk2(或者disk3和disk4)同时坏掉。因为在同一对磁盘中,两块磁盘都坏掉的概率很低,因此RAID10比RAID0+1安全
◆至少需要四块磁盘;空间利用率不超过50%;读性能好,写性能与RAID5相近;完全容错,数据恢复快;raid10既具有较高的性能,又有很好的容错性,因此应用广泛,缺点是成本高

三、spare disk(备用磁盘)
对于具有容错能力的RAID,当然需要一个或多个备用磁盘,这些磁盘平时并不使用,当 RAID中有磁盘损坏时才顶替上来。备用磁盘一般是预先装在主板上并设置为阵列的备用磁盘的,这样当阵列中某块磁盘损坏时,备用磁盘会被主动拉进阵列中重建数据,那块损坏的磁盘则会被移出阵列。如果系统支持热插拔,我们可直接拔出坏盘并再换上一个新的,否则需要关机处理。

四、硬RAID和软RAID
◆硬RAID:通过专门的RAID控制器实现,RAID控制器负责将各成员磁盘连接起来并虚拟成一个逻辑磁盘。操作系统只能识别到逻辑磁盘,而无法识别各物理成员盘。硬RAID需要在安装系统之前进入BIOS界面设置。硬RAID的设备名为/dev/sd[a-p]

◆软RAID:如果硬件条件不满足,可以在软件层面模拟实现RAID,这当然会消耗部分系统资源,且其性能自然不如硬RAID。创建软RAID仅需多个块设备,甚至只需要分区即可,但不宜将RAID创建在同一块磁盘上。Centos提供的配置软RAID的程序为mdadm,软RAID的设备名为/dev/md#(#为非负整数)

五、使用mdadm命令配置软RAID
mdadm:命令行工具,结合md(multidisks)模块实现软RAID,该模块由内核提供
主要用法:
①创建模式:创建RAID
mdadm --create/-C RAID设备 options...

主要选项:
-l #(--level=#):指定RAID级别
-c chunk_size(--chunk=chunk_size):指定chunk大小,默认为512K
-n #(--raid-devices=#):用于创建raid设备的磁盘个数
-x #(--spare-devices=#):用于RAID的备用磁盘个数
-a yes(--auto=yes):自动为创建的RAID生成设备文件
例如 mdadm -C /dev/md0 -a yes -l 1 -n 2 -x 1 /dev/sda /dev/sdb /dev/sdc
②管理模式 mdadm [--manage] RAID设备 options... 主要选项: --fail/-f DEVICE:将RAID设备中的指定磁盘手动设置为损坏 --remove/-r DEVICE:将RAID设备中的指定非活动盘(损坏盘或备用盘)移出 --add/-a DEVICE:给RAID设备添加磁盘 例如: mdadm /dev/md0 -f /dev/sdc:将阵列md0中的sdc手动设置为损坏 mdadm /dev/md0 -r /dev/sdc:将md0中的损坏状态的sdc移除 mdadm /dev/md0 -a /dev/sde:给md0中添加sde 可写入同一行,如mdadm /dev/md0 -f /dev/sdc -r /dev/sdc -a /dev/sde③查看指定软RAID设备的详细信息
mdadm --detail/-D RAID设备
④停止软RAID
mdadm --stop/-S RAID设备
⑤重新启用软RAID
mdadm --assemble/-A RAID设备 DEVICE
后面指定的DEVICE当然是原来属于同一RAID中的磁盘
⑥查看某个磁盘的RAID superblock信息,一般用来确定某磁盘是否被现有RAID使用或者其到底属于哪个RAID
mdadm --examine/-E DEVICE
mdadm --detail --scan:get a list of array devices from /proc/mdstat
⑦mdadm还有其它使用模式,如装配模式,管理模式,监控模式等,不在此详解,可查看帮助文档

◆cat /proc/mdstat:查看系统上所有已启用的软RAID设备及其相关信息

◆mdadm的配置文件:/etc/mdadm.conf,默认没有,需手动创建。mdadm的正常运行并不依赖此文件,该配置文件的主要作用是便于跟踪软RAID的配置。
几点说明:
1、当我们创建RAID时,该RAID的相关信息会被注入到各成员磁盘(包括备用盘)的RAID超级块当中。
2、一个磁盘只能属于一个RAID,将其RAID superblock中的信息冲掉才能被使用于其它RAID的创建中
2、停止RAID后,此RAID的成员磁盘也不能直接被系统挂载使用,需要重新格式化。

示例:使用4块磁盘配置RAID5,其中一块作为备用盘
注:因只作演示,此例中选用单个磁盘上的5个分区,实际环境中不可这样操作。前面说过,RAID不宜创建在同一块磁盘上
1、创建分区
[root@localhost ~]# fdisk /dev/sda   # 创建了5个逻辑分区
...
Command (m for help): n
First cylinder (1593-3916, default 1593):
Using default value 1593
Last cylinder, +cylinders or +size{K,M,G} (1593-3916, default 3916): +2G
...
Command (m for help): p
...
/dev/sda5            1593        1854     2103487+  83  Linux
/dev/sda6            1855        2116     2104483+  83  Linux
/dev/sda7            2117        2378     2104483+  83  Linux
/dev/sda8            2379        2640     2104483+  83  Linux
/dev/sda9            2641        2902     2104483+  83  Linux

Command (m for help): w   # 保存退出
...
[root@localhost ~]# partx -a /dev/sda   # 重读分区表
...
[root@localhost ~]# kpartx -af /dev/sda   # 重读分区表
...
2、创建RAID并查看RAID相关信息
[root@localhost ~]# mdadm -E /dev/sda5   # 实际环境中,当我们不确定某设备是否被现有RAID使用时,可这样测试
mdadm: No md superblock detected on /dev/sda5.
[root@localhost ~]# mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sda{5,6,7,8}   #这里使用了5-8分区创建了一个RAID
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@localhost ~]# mdadm -D /dev/md0   # 查看该RAID的详细信息
/dev/md0:
Version : 1.2
Creation Time : Wed Sep 30 21:26:56 2015
Raid Level : raid5   # RAID级别
Array Size : 4202496 (4.01 GiB 4.30 GB)   # 该RAID的可用空间
Used Dev Size : 2101248 (2.00 GiB 2.15 GB)
Raid Devices : 3    # RAID磁盘数
Total Devices : 4    # 包括备用盘的总磁盘数
Persistence : Superblock is persistent

Update Time : Wed Sep 30 21:28:31 2015
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 : b0f5f243:c7f4a4af:b9362bb5:e2d265e4   # 该RAID设备的UUID
Events : 18

Number   Major   Minor   RaidDevice State   # 各成员盘的信息
0       8        5        0      active sync   /dev/sda5
1       8        6        1      active sync   /dev/sda6
4       8        7        2      active sync   /dev/sda7

3       8        8        -      spare   /dev/sda8
[root@localhost ~]# mdadm -E /dev/sda8   # 查看某成员盘的RAID超级块信息
/dev/sda8:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : b0f5f243:c7f4a4af:b9362bb5:e2d265e4
Name : localhost.localdomain:0  (local to host localhost.localdomain)
Creation Time : Wed Sep 30 21:29:15 2015
Raid Level : raid5
Raid Devices : 3

Avail Dev Size : 4204871 (2.01 GiB 2.15 GB)
Array Size : 4202496 (4.01 GiB 4.30 GB)
Used Dev Size : 4202496 (2.00 GiB 2.15 GB)
Data Offset : 4096 sectors
Super Offset : 8 sectors
State : clean
Device UUID : 0c446570:f386af4d:095bb98b:4b8ab449  # 该成员磁盘的UUID

Update Time : Wed Sep 30 21:31:03 2015
Checksum : 5aeac748 - correct
Events : 20

Layout : left-symmetric
Chunk Size : 512K

Device Role : spare   # 在RAID中的角色
Array State : AAA ('A' == active, '.' == missing)

[root@localhost ~]# cat /proc/mdstat    # 查看所有已启用的软RAID设备的相关信息
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sda7[4] sda8[3](S) sda6[1] sda5[0]
4202496 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
# 中括号中的数字表示磁盘在RAID中的顺序,S表示spare即备用盘
unused devices: <none>
[root@localhost ~]# mdadm --detail --scan >> /etc/mdadm.conf   # 将RAID设备信息导入配置文件中
[root@localhost ~]# cat /etc/mdadm.conf
ARRAY /dev/md0 metadata=1.2 spares=2 name=localhost.localdomain:0 UUID=b0f5f243:c7f4a4af:b9362bb5:e2d265e4
3、格式化并挂载
[root@localhost ~]# mke2fs -t ext4 -L mysr /dev/md0   # 对该RAID格式化
...
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
...
[root@localhost ~]# mkdir /softraid
[root@localhost ~]# mount /dev/md0 /softraid   # 挂载
[root@localhost ~]# mount
...
/dev/md0 on /softraid type ext4 (rw)   # 显示挂载成功
[root@localhost ~]# vim /etc/fstab    # 写入开机自动挂载配置文件
/dev/md0                /softraid               ext4    defaults        0 0
[root@localhost ~]# cp /etc/inittab /softraid   # 写入数据
[root@localhost ~]# ls /softraid
inittab  lost+found
4、模拟救援
[root@localhost ~]# mdadm /dev/md0 -f /dev/sda7   # 将sda7设置为损坏状态
mdadm: set /dev/sda7 faulty in /dev/md0
[root@localhost ~]# mdadm /dev/md0 -r /dev/sda7   # 移除sda7
mdadm: hot removed /dev/sda7 from /dev/md0
[root@localhost ~]# mdadm -D /dev/md0
...
Number   Major   Minor   RaidDevice State
0       8        5        0      active sync   /dev/sda5
1       8        6        1      active sync   /dev/sda6
3       8        8        2      spare rebuilding   /dev/sda8
# 可以看到备用盘sda8自动顶替上来并重建数据
[root@localhost ~]# mdadm -D /dev/md0
...
Number   Major   Minor   RaidDevice State
0       8        5        0      active sync   /dev/sda5
1       8        6        1      active sync   /dev/sda6
3       8        8        2      active sync   /dev/sda8
# 重建完毕
[root@localhost ~]# cat /softraid/inittab   # 文件正常显示,数据没有丢失
# inittab is only used by upstart for the default runlevel.
...
[root@localhost ~]# mdadm /dev/md0 -a /dev/sda9   将sda9加入到该RAID中
mdadm: added /dev/sda9
[root@localhost ~]# cat /proc/mdstat  # 显示添加成功,sda9被自动设为备用磁盘
Personalities : [raid6] [raid5] [raid4] [raid1]
md0 : active raid5 sda9[4](S) sda8[3] sda6[1] sda5[0]
4202496 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>
[root@localhost ~]# umount /dev/md0   # 停止RAID前必先确保其离线
[root@localhost ~]# mdadm -S /dev/md0   # 若确定不再使用该RAID,卸载后务必将其关闭
mdadm: stopped /dev/md0
[root@localhost ~]# dd if=/dev/zero of=/dev/md0 bs=1M count=50
50+0 records in
50+0 records out
52428800 bytes (52 MB) copied, 0.306279 s, 171 MB/s
[root@localhost ~]# dd if=/dev/zero of=/dev/md0 bs=1M count=50
[root@localhost ~]# dd if=/dev/zero of=/dev/sda5 bs=1M count=50
[root@localhost ~]# dd if=/dev/zero of=/dev/sda6 bs=1M count=50
[root@localhost ~]# dd if=/dev/zero of=/dev/sda7 bs=1M count=50
[root@localhost ~]# dd if=/dev/zero of=/dev/sda8 bs=1M count=50
[root@localhost ~]# dd if=/dev/zero of=/dev/sda9 bs=1M count=50
# 即使停止RAID后,各成员盘中的RAID相关信息还在,为防止这些成员磁盘被重新装配,最好将其RAID超级块中的信息都清除
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  RAID mdadm