文章目录
Linux云计算架构-RAID磁盘阵列详解
简介
在上一篇博客讲到磁盘分区,是将一个大的磁盘分成多个小的磁盘分区,每个磁盘分区可以用在对应的地方。而RAID独立冗余磁盘阵列技术,是一种磁盘组合技术,可以在安全性能、成本、读写速度之间找到一个很好的平衡。
- RAID技术通过把多个硬盘设备组合成一个容量更大、安全性更好的磁盘阵列,并把数据切割成多个区段后分别存放在各个不同的物理磁盘设备上,然后利用分散读写技术来提高磁盘阵列的性能,同时把多个重要数据的副本同步到不同的物理硬盘设备上,从而起到非常好的数据冗余备份的效果。
- RAID技术具有非常好的数据冗余备份的功能,硬盘设备损坏后数据丢失几率较低,提高了磁盘的读写速度,但是物理硬盘设备的成本提升。
1. RAID独立磁盘冗余阵列
RAID目前有四种技术方案:RAID0、RAID1、RAID5、RAID10
四种技术方案各有各的特色,各方面对比如下:
几点介绍:
- RAID0磁盘阵列追求读写速度,忽略了数据的安全性,不具备数据备份和错误恢复能力。(条带卷)
- RAID1磁盘阵列以备份的方式提高了数据的安全性,但提高了成本。假设原来有磁盘A和磁盘B,当一块磁盘B损坏后,重新安装了另一块磁盘C,系统会自动通过热交换的方式将磁盘A上的数据备份到磁盘C上,以恢复数据的正常使用。由于是通过备份提高数据安全性,读写速度自然比较慢。(镜像卷、热备份)
- RAID5无数据备份,但有错误恢复能力,即当数据丢失时,可通过数据的奇偶校验信息恢复数据。最少需要3块磁盘来搭建RAID5磁盘阵列。(带奇偶检验的条带卷)
- RAID10有数据备份,也有较好的数据读写速度,但成本较高。最少需要4块磁盘才能组合成一个RAID10磁盘阵列组。(镜像卷+条带卷)(RAID1的安全+RAID0的高速)
- 在虚拟机环境中需自己配置硬盘设备,在实际生产环境中,一般会配备RAID磁盘阵列卡。
- 在使用设备文件搭建RAID阵列卡时,设备文件是基础。所以要认准系统中的设备文件名。(重点)
- RAID磁盘阵列在创建的时候就已经固定了磁盘阵列容量,新添加进去的硬盘只能作为备份盘(备胎盘)被使用。如:RAID5由3块硬盘组成,那么第4块添加进去的硬盘只能当作是备份盘。【不可随意扩容缩容】
- 在我的另一篇博客理有讲到设备文件在分区后如何进行格式化和挂载,而当创建了RAID磁盘阵列卡后,就可以开始格式化和挂载了。即RAID磁盘阵列卡所处位置与磁盘分区后等价。(认清位置)
2. 创建及卸载磁盘阵列卡
# 本机上的硬盘情况
# 以下实验都是用的这些RAID,做之前可以打快照。
[root@server ~]# ll /dev/sd*
brw-rw----. 1 root disk 8, 0 7月 17 10:36 /dev/sda
brw-rw----. 1 root disk 8, 1 7月 17 10:36 /dev/sda1
brw-rw----. 1 root disk 8, 2 7月 17 10:36 /dev/sda2
brw-rw----. 1 root disk 8, 16 7月 17 10:36 /dev/sdb
brw-rw----. 1 root disk 8, 32 7月 17 10:36 /dev/sdc
brw-rw----. 1 root disk 8, 48 7月 17 10:36 /dev/sdd
brw-rw----. 1 root disk 8, 64 7月 17 10:36 /dev/sde
2.1 创建RAID0
# 创建RAID0
[root@server ~]# mdadm -Cv /dev/md0 -l 0 -n 2 /dev/sd[b-c]
mdadm: chunk size defaults to 512K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
# 显示所有的磁盘阵列信息,并写入到/etc/mdadm.conf
[root@master ~]# mdadm -Ds
ARRAY /dev/md0 metadata=1.2 name=master:0 UUID=734b9424:26f04d4b:dc5245b5:8692ec3e
[root@master ~]# mdadm -Ds > /etc/mdadm.conf
# 显示磁盘阵列的所有信息
[root@master ~]# mdadm -D /dev/md0
Chunk Size : 512K
Name : server:0 (local to host server)
UUID : cb6e0ee9:b688ccd7:0d5fcb10:3a1b6c45
Events : 0
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
# 格式化
[root@master ~]# mkfs.xfs /dev/md0
# 临时挂载
[root@master ~]# mkdir /raid0
[root@master ~]# mount /dev/md0 /raid0
[root@master ~]# df -h
[root@master ~]# df -hT
# 永久挂载
[root@server ~]# blkid | grep /dev/md0
/dev/md0: UUID="e076a655-9c69-4e09-9db6-29b755dca2af" TYPE="xfs"
[root@master ~]# vim /etc/fstab
UUID="e076a655-9c69-4e09-9db6-29b755dca2af" /raid0 xfs defaults 0 0
[root@master ~]# mount -a
[root@server ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/rhel-root 18G 3.3G 15G 19% /
devtmpfs 905M 0 905M 0% /dev
tmpfs 914M 140K 914M 1% /dev/shm
tmpfs 914M 8.8M 905M 1% /run
tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/sda1 497M 119M 379M 24% /boot
/dev/sr0 3.5G 3.5G 0 100% /run/media/root/RHEL-7.0 Server.x86_64
/dev/md0 4.0G 33M 4.0G 1% /raid0
2.2 创建RAID1+1块备份盘
# 创建RAID1
# 要确认是因为硬盘之前配置过RAID0,不影响配置RAID1
# -c RAID1中最小的存储单元大小为32k
# -x 一块备份盘
[root@server ~]# mdadm -Cv /dev/md1 -l 1 -n 2 -x 1 -c 32 /dev/sd[b-d]
mdadm: chunk size ignored for this level
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 2096064K
Continue creating array? y # 提示说硬盘之前使用过,确认创建即可。
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
# 显示所有的磁盘阵列信息,并写入到/etc/mdadm.conf
[root@server ~]# mdadm -Ds
ARRAY /dev/md1 metadata=1.2 spares=1 name=server:1 UUID=02b24328:59182873:d8cd24f9:0bce1358
[root@master ~]# mdadm -Ds > /etc/mdadm.conf
# 显示磁盘阵列的所有信息
[root@master ~]# mdadm -D /dev/md1
State : clean
Active Devices : 2 # 两块活跃盘
Working Devices : 3 # 在工作的有3块盘
Failed Devices : 0
Spare Devices : 1 # 一块备份盘
Name : server:1 (local to host server)
UUID : 02b24328:59182873:d8cd24f9:0bce1358
Events : 17
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb # RAID1镜像盘
1 8 32 1 active sync /dev/sdc # RAID1镜像盘
2 8 48 - spare /dev/sdd # 备份盘
# 格式化
[root@server ~]# mkfs.xfs /dev/md1
# 临时挂载
[root@server ~]# mkdir /raid1
[root@server ~]# mount /dev/md1 /raid1
[root@server ~]# df -h
[root@master ~]# df -hT
# 永久挂载
[root@server ~]# blkid | grep /dev/md1
/dev/md1: UUID="7e3d4d74-62b3-4149-9239-e70937c44608" TYPE="xfs"
[root@master ~]# vim /etc/fstab
UUID="7e3d4d74-62b3-4149-9239-e70937c44608" /raid1 xfs defaults 0 0
[root@server ~]# mount -a
[root@server ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/rhel-root 18G 3.3G 15G 19% /
devtmpfs 905M 0 905M 0% /dev
tmpfs 914M 140K 914M 1% /dev/shm
tmpfs 914M 8.8M 905M 1% /run
tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/sda1 497M 119M 379M 24% /boot
/dev/sr0 3.5G 3.5G 0 100% /run/media/root/RHEL-7.0 Server.x86_64
/dev/md1 2.0G 33M 2.0G 2% /raid1
# 由于RAID1是自带热备份的,移除或者损坏了一块硬盘,数据不会丢失,备份盘会直接顶替上去做数据同步。
# 损坏一块硬盘及修复
# -r 移除硬盘,当RAID没有挂载使用才可用,否则会报错硬盘正忙。
# -f 调整硬盘状态为faulty,模拟损坏,也是不可用
# -a 添加硬盘
[root@server ~]# mdadm -D /dev/md1
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
2 8 48 - spare /dev/sdd
# 模拟损坏/dev/sdb,会发现/dev/sdd自动顶替上去了
[root@server ~]# mdadm /dev/md1 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md1
[root@server ~]# mdadm -D /dev/md1
Number Major Minor RaidDevice State
2 8 48 0 active sync /dev/sdd
1 8 32 1 active sync /dev/sdc
0 8 16 - faulty /dev/sdb
# 移除/dev/sde
# mdadm -r /dev/md1 /dev/sdb
# 添加一块硬盘作为备份盘,继续备份
[root@server ~]# mdadm -a /dev/md1 /dev/sdb
mdadm: added /dev/sdb
[root@server ~]# mdadm -D /dev/md1
Number Major Minor RaidDevice State
2 8 48 0 active sync /dev/sdd
1 8 32 1 active sync /dev/sdc
3 8 16 - spare /dev/sdb
2.3 创建RAID5+1块备份盘
# 创建RAID5
[root@server ~]# mdadm -Cv /dev/md5 -l 5 -n 3 -x 1 /dev/sd[b-e]
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 2095616K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
# 显示所有的磁盘阵列信息,并写入到/etc/mdadm.conf
[root@server ~]# mdadm -Ds
ARRAY /dev/md5 metadata=1.2 spares=1 name=server:5 UUID=7680b12d:8231726e:dccc9b84:2ad09717
[root@server ~]# mdadm -Ds > /etc/mdadm.conf
# 显示磁盘阵列的所有信息,有一块备份盘
[root@server ~]# mdadm -D /dev/md5
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
# 格式化,如果报错,加上-f参数
[root@server ~]# mkfs.xfs /dev/md5
# 临时挂载
[root@server ~]# mkdir /raid5
[root@server ~]# mount /dev/md5 /raid5
[root@server ~]# df -h
[root@server ~]# df -hT
# 永久挂载
[root@server ~]# blkid | grep /dev/md5
/dev/md5: UUID="589ea450-a3b5-4ea3-adcb-97e7aee69ecb" TYPE="xfs"
[root@server ~]# vim /etc/fstab
UUID="589ea450-a3b5-4ea3-adcb-97e7aee69ecb" /raid5 xfs defaults 0 0
[root@server ~]# mount -a
[root@server ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/rhel-root 18G 3.4G 15G 19% /
devtmpfs 905M 0 905M 0% /dev
tmpfs 914M 140K 914M 1% /dev/shm
tmpfs 914M 8.8M 905M 1% /run
tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/sda1 497M 119M 379M 24% /boot
/dev/sr0 3.5G 3.5G 0 100% /run/media/root/RHEL-7.0 Server.x86_64
/dev/md5 4.0G 33M 4.0G 1% /raid5
# RAID5没有热备份,但是拥有错误恢复能力,当移除或者损坏一块硬盘后,备份盘可以顶替上去,保证数据不丢失。
[root@server ~]# mdadm -D /dev/md5
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
# 移除/dev/sdb
[root@server ~]# mdadm /dev/md5 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md5
[root@server ~]# mdadm -D /dev/md5
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
2.4 创建RAID10
# 创建RAID10
[root@server ~]# mdadm -Cv /dev/md10 -l 10 -n 4 /dev/sd[b-e]
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: size set to 2095616K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md10 started.
[root@server ~]# mdadm -Ds
ARRAY /dev/md10 metadata=1.2 name=server:10 UUID=f9c2fe71:0fdecdd9:5636f2f1:f15bbc82
[root@server ~]# mdadm -Ds > /etc/mdadm.conf
# 显示磁盘阵列的所有信息
[root@server ~]# mdadm -D /dev/md10
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
3 8 64 3 active sync /dev/sde
# 格式化
[root@server ~]# mkfs.xfs -f /dev/md10
# 临时挂载
[root@server ~]# mkdir /raid10
[root@server ~]# mount /dev/md0 /raid10
[root@server ~]# df -h
[root@server ~]# df -hT
# 永久挂载
[root@server ~]# blkid | grep /dev/md10
/dev/md10: UUID="ebf72d43-28da-48c3-9023-ba1bf34c6d02" TYPE="xfs"
[root@server ~]# vim /etc/fstab
UUID="ebf72d43-28da-48c3-9023-ba1bf34c6d02" /raid10 xfs defaults 0 0
[root@master ~]# mount -a
[root@server ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/rhel-root 18G 3.4G 15G 19% /
devtmpfs 905M 0 905M 0% /dev
tmpfs 914M 140K 914M 1% /dev/shm
tmpfs 914M 8.8M 905M 1% /run
tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/sda1 497M 119M 379M 24% /boot
/dev/sr0 3.5G 3.5G 0 100% /run/media/root/RHEL-7.0 Server.x86_64
/dev/md10 4.0G 33M 4.0G 1% /raid10
# 模拟损坏/dev/sdb
# 此时的RAID10还是可以正常工作的,但是运维人员这是时就应该发现问题,并替换下损坏的硬盘,重新添加一块好的硬盘上去。
[root@server ~]# mdadm -D /dev/md10
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
3 8 64 3 active sync /dev/sde
[root@server ~]# mdadm /dev/md10 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md10
[root@server ~]# mdadm -D /dev/md10
Number Major Minor RaidDevice State
0 0 0 0 removed
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
3 8 64 3 active sync /dev/sde
0 8 16 - faulty /dev/sdb
# 如下,添加/dev/sdb
# 添加的是之前模拟损坏的盘,要先移除再添加
[root@server ~]# mdadm -r /dev/md10 /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md10
[root@server ~]# mdadm -D /dev/md10
Number Major Minor RaidDevice State
0 0 0 0 removed
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
3 8 64 3 active sync /dev/sde
[root@server ~]# mdadm -a /dev/md10 /dev/sdb
mdadm: added /dev/sdb
2.5 卸载RAID0(其他磁盘阵列的卸载同理)
# 查看RAID0的挂载情况
[root@server ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/rhel-root 18G 3.3G 15G 19% /
devtmpfs 905M 0 905M 0% /dev
tmpfs 914M 140K 914M 1% /dev/shm
tmpfs 914M 8.8M 905M 1% /run
tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/sda1 497M 119M 379M 24% /boot
/dev/sr0 3.5G 3.5G 0 100% /run/media/root/RHEL-7.0 Server.x86_64
/dev/md0 4.0G 33M 4.0G 1% /raid0
# 卸载RAID0
[root@server ~]# umount /raid0
[root@server ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/rhel-root 18G 3.3G 15G 19% /
devtmpfs 905M 0 905M 0% /dev
tmpfs 914M 140K 914M 1% /dev/shm
tmpfs 914M 8.8M 905M 1% /run
tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/sda1 497M 119M 379M 24% /boot
/dev/sr0 3.5G 3.5G 0 100% /run/media/root/RHEL-7.0 Server.x86_64
# 删除永久挂载信息
[root@server ~]# vim /etc/fstab
# 查看所有的RAID信息
[root@server ~]# mdadm -Ds
ARRAY /dev/md0 metadata=1.2 name=server:0 UUID=cb6e0ee9:b688ccd7:0d5fcb10:3a1b6c45
# 停止所有的RAID
[root@server ~]# mdadm -Ss
mdadm: stopped /dev/md0
# 删除/etc/mdadm.conf
[root@server ~]# rm -f /etc/mdadm.conf
# 删除硬盘上的RAID信息
# mdadm --zero-superblock /dev/sdb
# mdadm --zero-superblock /dev/sdc
[root@server ~]# mdadm --zero-superblock /dev/sd[b,c]
# 现在/dev/sdb和/dev/sdc又可以重新组装RAID了。