一. 什么是RAID
RAID是英文Redundant Array of Independent Disks的缩写,中文翻译过来就是“独立冗余磁盘阵列”。简单的说,RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。从而提供比单个硬盘更高的存储性能和提供数据备份技术。
利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。磁盘阵列还能利用同位检查(Parity Check)的观念,在数组中任意一个硬盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中。(并不是所有类型的raid都有这种功能,只有特定的几个有)。
二. RAID各种级别及其作用
1.RAID 0
RAID 0连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率,但它没有数据冗余。
RAID 0只是单纯地提高性能,并没有为数据的可靠性提供保证,而且其中的一个磁盘失效将影响到所有数据(当一块磁盘的空间用尽时,数据就会被自动写入到下一块磁盘中。)
RAID 0不能应用于数据安全性要求高的场合。
特点:高性能,没有冗余,一坏全坏
2.RAID 1
通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据
当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID1可以提高读取性能
RAID1是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据
(类似于镜像卷,但作用上不止于镜像卷单纯的备份,而是能很好的运用备份中的信息)
特点:提高读取性能,成本较大。
3.RAID 5
N(N>=3)块盘组成阵列,一份数据产生N-1个条带,同时还有1份校验数据,共N 份数据在N块盘上循环均衡存储。
N块盘同时读写,读性能很高,但由于有校验机制的问题,写性能相对不高。
(N-1)/N磁盘利用率
可靠性高,允许坏1块盘,不影响所有数据
注:校验数据起到当一块硬盘挂掉后,其他硬盘可以通过校验数据计算出缺失的数据,起到备份的功能且校验数据循环的在每块硬盘上均衡写入
特点:
1).最少三块磁盘
2).数据条带形式分布
3).以奇偶校验作冗余
4).适合多读少写的情景,是性能与数据冗余最佳的这种方案
4. RAID 6
1.N(N>=4)快盘组成阵列,(N-2)/N磁盘利用率
2.与RAID5相比,RAID6增加了第二个独立的奇偶校验信息块。两个独立的奇偶系统使用
的不同的算法,即使两块磁盘同时失效也不会影响数据的使用
3.相对于RAID5有更大的"写损失",因此写性能较差
5.RAID 10
1.RAID10其实是RAID 1+0
2.N(偶数,N>=4)块盘两两镜像后,再组合成一个RAID0
N/2磁盘利用率,N/2块盘同时写入,N块盘同时读取
3.性能高,可靠性高
6.RAID 1+0
N(偶数,N>=4)块盘两两镜像之后,在组合成一个RAID0
N/2磁盘利用率,N/2块盘同时写入,N块盘同时读取
性能高,可靠性高
RAID 0+1(先做条带,才能做镜像)
读写性能与RAID 10相同
安全性低于RAID 10
特点:
1).最少四块磁盘
2).先按RAID 0 分成两种,再分别对两组按RAID 1 方式镜像兼顾冗余(提供镜像存储)和性能(数据条带形分布)
3).在实际应用中较为常用
三. 案例实施
1. 创建raid
1.1 创建raid 0
利用磁盘分区新建2个磁盘分区,每个大小为20 GB。用这2个20 GB的分区来模拟1个40 GB的硬盘。
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 19.5G 0 part
├─centos-root 253:0 0 17.5G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sr0 11:0 1 4G 0 rom
配置本地YUM安装源,将提供的mdadm_yum文件夹上传至/opt目录,示例代码如下:
[root@localhost ~]# mv /etc/yum.repos.d/* /media/
[root@localhost ~]# vi /etc/yum.repos.d/yum.repo
[mdadm]
name=mdadm
baseurl=file:///opt/mdadm_yum/
gpgcheck=0
enabled=1
安装工具mdadm,使用已有YUM源进行安装,命令如下:
[root@localhost ~]# yum install -y mdadm
创建一个RAID 0设备:这里使用/dev/sdb和/dev/sdc做实验。
将/dev/sdb和/dev/sdc建立RAID等级为RAID 0的md0(设备名)。
[root@localhost ~]# mdadm -C -v /dev/md0 -l 0 -n 2 /dev/sdb /dev/sdc
mdadm: chunk size defaults to 512K
mdadm: Fail create md0 when using /sys/module/md_mod/parameters/new_array
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
mdadm:区块大小默认为512K
mdadm:使用/sys/module/md_mod/parameters/new_array时无法创建md0
mdadm:默认为1.2版元数据
mdadm:array/dev/md0已启动。
查看系统上的RAID,命令及返回结果如下。
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid0] #阵列类型
md0 : active raid0 sdc[1] sdb[0] #磁盘的状态,磁盘的数量
41908224 blocks super 1.2 512k chunks
unused devices: <none>
个性:[raid0]
md0:活动raid0 sdc[1]sdb[0]
41908224块超级1.2 512k块
未使用的设备:<none>
查看RAID详细信息,命令及返回结果如下。
[root@localhost ~]# mdadm -Ds
ARRAY /dev/md0 metadata=1.2 name=localhost.localdomain:0 UUID=35792eb3:51f58189:44cef502:cdcee441
(阵列/dev/md0元数据=1.2名称=本地主机。本地域:0 UUID=2816724a:d2525a8b:8eaefd23:7e57f770)
// 解析:
-s :扫描配置文件或/proc/mdstat,得到阵列缺失信息(即缺失或损坏设备的信息)
-D :打印阵列设备的详细信息
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Oct 5 10:21:41 2019
Raid Level : raid0
Array Size : 41908224 (39.97 GiB 42.91 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Sat Oct 5 10:21:41 2019
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Chunk Size : 512K
Consistency Policy : unknown
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : 35792eb3:51f58189:44cef502:cdcee441
Events : 0
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
生成配置文件mdadm.conf,命令如下。
[root@localhost ~]# mdadm -Ds > /etc/mdadm.conf
对创建的RAID进行文件系统创建并挂载,命令如下。
[root@localhost ~]# mkfs.xfs /dev/md0
meta-data=/dev/md0 isize=256 agcount=16, agsize=654720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=10475520, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=5120, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]# mkdir /raid0/
[root@localhost ~]# mount /dev/md0 /raid0/
[root@localhost ~]# df -Th /raid0/
Filesystem Type Size Used Avail Use% Mounted on
/dev/md0 xfs 40G 33M 40G 1% /raid0
设置成开机自动挂载,命令如下。
[root@localhost ~]# blkid /dev/md0
/dev/md0: UUID="8eafdcb6-d46a-430a-8004-d58a68dc0751" TYPE="xfs"
[root@localhost ~]# echo "UUID=8eafdcb6-d46a-430a-8004-d58a68dc0751 /raid0 xfs defaults 0 0" >> /etc/fstab
// 解析:
/etc/fstab文件的作用:
磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载。
系统开机时会主动读取/etc/fstab这个文件中的内容,根据文件里面的配置挂载磁盘。这样我们只需要将磁盘的挂载信息写入这个文件中我们就不需要每次开机启动之后手动进行挂载了。
1.2 删除RAID操作
[root@localhost ~]# umount /raid0/
[root@localhost ~]# mdadm -S /dev/md0
[root@localhost ~]# rm -rf /etc/mdadm.conf
[root@localhost ~]# rm -rf /raid0/
[root@localhost ~]# mdadm --zero-superblock /dev/sdb
[root@localhost ~]# mdadm --zero-superblock /dev/sdc
[root@localhost ~]# vi /etc/fstab
UUID=8eafdcb6-d46a-430a-8004-d58a68dc0751 /raid0 xfs defaults 0 0 //删除此行(即取消虚拟机的开机自动读取文件形成挂载,前提应该是要保证磁盘的正常)
2. 运维操作
2.1 raid 5运维操作
利用磁盘分区新建4个磁盘分区,每个大小为20 GB。用3个20 GB的分区来模拟raid 5,加一个热备盘。
[root@localhost ~]# mdadm -Cv /dev/md5 -l5 -n3 /dev/sdb /dev/sdc /dev/sdd --spare-devices=1 /dev/sde
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Fail create md5 when using /sys/module/md_mod/parameters/new_array
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
查看RAID的详细信息,命令如下。
[root@localhost ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Sat Oct 5 13:17:41 2019
Raid Level : raid5
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sat Oct 5 13:19:27 2019
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : unknown
Name : localhost.localdomain:5 (local to host localhost.localdomain)
UUID : f51467bd:1199242b:bcb73c7c:160d523a
Events : 18
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
3 8 64 - spare /dev/sde
// raid5,它需要校验(同步),就是这个状态:spare rebuilding。等一会,它完成校验了自动就出现active sync
2.2 模拟硬盘故障
[root@localhost ~]# mdadm -f /dev/md5 /dev/sdb
-f : 设置某盘为坏盘
mdadm: set /dev/sdb faulty in /dev/md5
查看RAID的详细信息,命令如下。
[root@localhost ~]# mdadm -D /dev/md5
-D :打印阵列设备的详细信息
/dev/md5:
Version : 1.2
Creation Time : Sat Oct 5 13:17:41 2019
Raid Level : raid5
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sat Oct 5 13:28:54 2019
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 1
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : unknown
Name : localhost.localdomain:5 (local to host localhost.localdomain)
UUID : f51467bd:1199242b:bcb73c7c:160d523a
Events : 37
Number Major Minor RaidDevice State
3 8 64 0 active sync /dev/sde
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
0 8 16 - faulty /dev/sdb
// 这里的显示信息也与上述不同
从以上结果可以发现原来的热备盘/dev/sde正在参与RAID 5的重建,而原来的/dev/sdb变成了坏盘。
热移除故障盘,命令如下:
[root@localhost ~]# mdadm -r /dev/md5 /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md5
查看RAID的详细信息,命令如下:
[root@localhost ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Sat Oct 5 13:17:41 2019
Raid Level : raid5
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Sat Oct 5 13:35:54 2019
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : unknown
Name : localhost.localdomain:5 (local to host localhost.localdomain)
UUID : f51467bd:1199242b:bcb73c7c:160d523a
Events : 38
Number Major Minor RaidDevice State
3 8 64 0 active sync /dev/sde
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
格式化RAID并进行挂载,命令如下:
[root@localhost ~]# mkfs.xfs /dev/md5 -f
existing superblock read failed: Input/output error
mkfs.xfs: pwrite64 failed: Input/output error)
meta-data=/dev/md5 isize=256 agcount=16, agsize=654720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=10475520, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=5120, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]# mount /dev/md5 /mnt/
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 18G 906M 17G 6% /
devtmpfs 903M 0 903M 0% /dev
tmpfs 913M 0 913M 0% /dev/shm
tmpfs 913M 8.6M 904M 1% /run
tmpfs 913M 0 913M 0% /sys/fs/cgroup
/dev/sda1 497M 125M 373M 25% /boot
tmpfs 183M 0 183M 0% /run/user/0
/dev/md5 40G 33M 40G 1% /mnt