目录
1 初识RAID
1.1 什么是RAID
廉价磁盘冗余阵列 (Redundant Arrays of Inexpensive Disks) 或独立磁盘冗余阵列(RAID,redundant array of independent disks)是把相同的数据存储在多个硬盘的不同的地方的方法。通过把数据放在多个硬盘上,输入输出操作能以平衡的方式交叠,改良性能。
1.2 RAID的实现方式
1.2.1 软件RAID
通过操作系统提供的磁盘管理功能将多块硬盘配置成逻辑盘来构建阵列。
软件阵列可以提供数据冗余功能,但是磁盘子系统的性能会有所降低。因此会影响机器的速度,不适合大数据流量的服务器。
1.2.2 硬件RAID
硬件RAID主要有外接式磁盘阵列柜和内接式磁盘阵列卡两种实现方式。
磁盘阵列柜主要是用在大型的服务器上,具可热交换(Hot Swap)的特性,但是价格较贵。
内接式磁盘阵列卡,也就是常说的RAID卡,有着较低的价格,能够提供在线扩容、动态修改阵列级别、自动数据恢复、驱动器漫游、超高速缓冲等功能。
1.3 RAID级别
1.3.1 RAID 0
带区卷(stripe),在所有的级别中,RAID 0的速度是最快的。在使用相同型号、相同容量的磁盘构建是,有着较好的性能。
RAID 0会将磁盘先切片出等量的数据块(chunk,一般可设置大小为4KB-1MB),在写入文件时,会将文件按照chunk的大小切片,之后再存入各个磁盘中。
虽然RAID 0读写时可以并行处理,但是其并没有冗余的功能,也就是说RAID 0不具备灾备功能,如果一个磁盘损坏,所有数据都会丢失。
1.3.2 RAID 1
镜像卷(marror),使用两的倍数块磁盘实现数据的完全备份。
在创建镜像卷的时候最好使用两块型号、大小完全相同的磁盘进行。如果使用不同容量的磁盘,总容量会以较小的那块磁盘的容量为主。
RAID 1再写入时,一份数据会被分为两股,分别写入各个磁盘,因此在写入时,RAID 1的表现并不好。但是在读取文件时,RAID 1却有着不错的性能。
1.3.3 RAID 1+0与RAID 0+1
RAID 0性能好,但是数据不安全;RAID 1数据安全,但是性能不佳。在这种情形下,RAID 0和RAID 1的组合出现了。
RAID 1+0是现组成两组RAID 1,在将两组RAID 1组成一组RAID 0。故名思意,RAID 0+1就是先组成RAID 0,在组成RAID 1。
这么做使得数据除分布在多个盘上外,每个盘都有其物理镜像盘,提供全冗余能力。在提高读写速度的情况下获得了一块及以下磁盘的容错能力。
1.3.4 RAID 5
RAID5(分布式奇偶校验的独立磁盘结构)可以理解为是RAID 0和RAID 1的折中方案,需要三块及以上的磁盘才能组成这种磁盘阵列。
尽管RAID 5可以为数据提供灾备能力,但是其保障程度并不如RAID 1。不过RAID 的磁盘利用率比RAID 1高,每块磁盘只使用了1/n的容量用于备份。
1.3.5 RAID总结
项目 | RAID 0 | RAID 1 | RAID 10 | RAID 5 |
---|---|---|---|---|
最少磁盘数 | 2 | 2 | 4 | 3 |
最大容错磁盘数 | 0 | n-1 | n/2 | 1 |
理论写入性能 | n | 1 | n/2 | <n-1 |
理论读出性能 | n | n | n | <n-1 |
可用容量 | n | 1 | n/2 | n-1 |
一般应用 | 注重性能但数据不那么重要的环境 | 数据备份 | 服务器、云系统 | 数据备份 |
注:表中的n均表示磁盘数
2 软件RAID的实现
注:生产环境中不建议使用软件RAID
2.1 确认系统已安装mdadm
#系统中默认没有安装mdadm
[root@localhost ~]# rpm -qa | grep mdadm
[root@localhost ~]#
#使用dnf安装mdadm
[root@localhost ~]# dnf -y install mdadm
#ubuntu使用apt
xiao@xiao-virtual-machine:~$ sudo apt-get install mdadm -y
2.2 添加磁盘
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 5G 0 disk
sdb 8:16 0 5G 0 disk
sdc 8:32 0 5G 0 disk
sr0 11:0 1 1024M 0 rom
nvme0n1 259:0 0 20G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 19G 0 part
├─rl-root 253:0 0 17G 0 lvm /
└─rl-swap 253:1 0 2G 0 lvm [SWAP]
[root@localhost ~]#
2.3 改变磁盘的文件系统
[root@localhost ~]# fdisk /dev/sda
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-10485759, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-10485759, default 10485759):
Created a new partition 1 of type 'Linux' and of size 5 GiB.
#通过l可以知道fd对应Linux raid auto
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]#
#sdb、sdc同理,略,利用fdisk查看文件系统可知:
[root@localhost ~]# fdisk -l /dev/sd*
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 10485759 10483712 5G fd Linux raid autodetect
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 10485759 10483712 5G fd Linux raid autodetect
Device Boot Start End Sectors Size Id Type
/dev/sdc1 2048 10485759 10483712 5G fd Linux raid autodetect
[root@localhost ~]#
2.4 创建RAID阵列(以RAID 1为例)
mdadm的基本语法
[root@localhost ~]# mdadm --create /dev/md0 --level[0|1|5] --chunk=Nk --raid-devices=N --spare-devices=N
#选项与参数
--create 创建新的磁盘阵列
--level 设备的chunk大小,一般为64k或512k
--chunk 设置磁盘阵列的级别,常用的为0、1、5
--raid-devices=N 使用几个磁盘分区作为磁盘阵列的设备
--spare-devices=N 使用几个磁盘作为备用设备
#查看磁盘阵列设备的详细信息
[root@localhost ~]# mdadm --detail /dev/sda
创建名为/dev/md0的RAID 1设备,使用三个分区,其中一个作为备用设备
[root@localhost ~]# mdadm --create /dev/md0 --level=1 --raid-devices=2 --spare-devices=1 /dev/sd{a1,b1,c1}
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
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@localhost ~]#
查看创建状态
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0: #设备名
Version : 1.2
Creation Time : Thu Feb 29 07:48:18 2024 #RAID的创建时间
Raid Level : raid1 #RAID的级别
Array Size : 5236736 (4.99 GiB 5.36 GB) #可用容量
Used Dev Size : 5236736 (4.99 GiB 5.36 GB)
Raid Devices : 2 #组成RAID的磁盘数量
Total Devices : 3 #磁盘的总数
Persistence : Superblock is persistent
Update Time : Thu Feb 29 07:48:40 2024
State : clean
Active Devices : 2 #启用的设备树
Working Devices : 3 #总数
Failed Devices : 0 #损坏的设备数
Spare Devices : 1 #备份磁盘的数量
Consistency Policy : resync
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : f4c77782:6e4a5f13:a9c6f9a0:9e45c610
Events : 14
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1
2 8 33 - spare /dev/sdc1
[root@localhost ~]#
2.5 将设备添加阵列
[root@localhost ~]# mdadm --manage /dev/md0 --add /dev/sde1
mdadm: added /dev/sde1
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Feb 29 07:48:18 2024
Raid Level : raid1
Array Size : 5236736 (4.99 GiB 5.36 GB)
Used Dev Size : 5236736 (4.99 GiB 5.36 GB)
Raid Devices : 2
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Feb 29 07:57:58 2024
State : clean
Active Devices : 2
Working Devices : 4
Failed Devices : 0
Spare Devices : 2
Consistency Policy : resync
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : f4c77782:6e4a5f13:a9c6f9a0:9e45c610
Events : 18
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1
2 8 33 - spare /dev/sdc1
3 8 65 - spare /dev/sde1
[root@localhost ~]#
2.6 将设备从阵列中删除
[root@localhost ~]# mdadm --manage /dev/md0 --remove /dev/sdc1
mdadm: hot removed /dev/sdc1 from /dev/md0
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Feb 29 07:48:18 2024
Raid Level : raid1
Array Size : 5236736 (4.99 GiB 5.36 GB)
Used Dev Size : 5236736 (4.99 GiB 5.36 GB)
Raid Devices : 2
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Thu Feb 29 08:08:35 2024
State : clean
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1
Consistency Policy : resync
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : f4c77782:6e4a5f13:a9c6f9a0:9e45c610
Events : 19
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1
3 8 65 - spare /dev/sde1
[root@localhost ~]#
2.7 保存配置文件
[root@localhost ~]# mdadm --detail --scan >> /etc/mdadm.conf