Linux磁盘阵列
- 1.2.1 RAID 0(条带化存储)
- 1.2.2 RAID 1(镜像存储)
- 1.2.3 RAID 5
- 1.2.4 RAID 6
- 1.2.5 RAID 1+0(先做镜像,再做条带)
- 1.2.6 RAID 0+1(先做条带,再做镜像)
一、磁盘列阵(RAID)
1.1 RAID磁盘阵列介绍
把多块独立的物理硬盘按不同的方式组成一个逻辑硬盘,从而提供比单个硬盘更高的存储性能和提供数据备份技术
常用的RAID级别:
- RAID0、RAID1、RAID5、RAID6、RAID1+0 等
1.2 RAID级别详细说明
1.2.1 RAID 0(条带化存储)
特点:
- 读写性能最强
- 没有数据备份功能
- 需要n(n≥1)个硬盘
- 磁盘利用率为n(100%)
- 任意一块硬盘损坏,数据就全部异常
1.2.2 RAID 1(镜像存储)
特点:
- 互为备份
- 写性能差一些,读性能一般
- 高可用,坏了其中一块硬盘不影响数据
- 需要偶数个硬盘
- 磁盘利用率为n/2(50%)
1.2.3 RAID 5
特点:
- 读性能强,写性能一般
- 允许一块硬盘损坏,不影响数据
- 拥有数据校验机制(这是写性能慢的原因)
- 需要n(n≥3)个硬盘
- 在成本控制的前提下,追求最大容量,速度及高可用性
- 磁盘利用率(n-1)/n
1.2.4 RAID 6
特点:
- 需要n(n≥4)个硬盘
- 增加了奇偶校验
- 读性能与RAID5相当,写性能比RAID5差
- 允许损坏两块硬盘,不影响数据
- 磁盘利用率(n-2)/n
1.2.5 RAID 1+0(先做镜像,再做条带)
特点:
- 硬盘数n为偶数,且n≥4
- 读性能很高,写性能稍差
- 理论上可以损坏三块硬盘,但再实际业务中允许两个基组中各坏一个,数据不会收到影响
- 磁盘利用率n/2(50%)
1.2.6 RAID 0+1(先做条带,再做镜像)
特点:
- 硬盘数n为偶数,且n≥4
- 读写性能与RAID 1+0相同;
- 数据可靠性比RAID 1+0要更差。 实际使用较少。
1.3 RAID级别比较
二、磁盘阵列配置实验(RAID 5)
2.1 配置RAID 5
2.1.1 检测软件是否安装
[root@localhost ~]# rpm -q mdadm mdadm-4.0-5.el7.x86_64 //已有,无需安装软件
2.1.2 创建分区
[root@localhost ~]# fdisk /dev/sdb 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 Device does not contain a recognized partition table 使用磁盘标识符 0x140ee0a2 创建新的 DOS 磁盘标签。 命令(输入 m 获取帮助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 分区号 (1-4,默认 1): 起始 扇区 (2048-62914559,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-62914559,默认为 62914559):+10G 分区 1 已设置为 Linux 类型,大小设为 10 GiB 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。 [root@localhost ~]# fdisk /dev/sdc 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 Device does not contain a recognized partition table 使用磁盘标识符 0xebf36733 创建新的 DOS 磁盘标签。 命令(输入 m 获取帮助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 分区号 (1-4,默认 1): 起始 扇区 (2048-41943039,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+10G 分区 1 已设置为 Linux 类型,大小设为 10 GiB 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。 [root@localhost ~]# fdisk /dev/sdd 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 Device does not contain a recognized partition table 使用磁盘标识符 0x323399f5 创建新的 DOS 磁盘标签。 命令(输入 m 获取帮助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 分区号 (1-4,默认 1): 起始 扇区 (2048-41943039,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+10G 分区 1 已设置为 Linux 类型,大小设为 10 GiB 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。 [root@localhost ~]# fdisk /dev/sde 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 Device does not contain a recognized partition table 使用磁盘标识符 0xe13e3a01 创建新的 DOS 磁盘标签。 命令(输入 m 获取帮助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 分区号 (1-4,默认 1): 起始 扇区 (2048-41943039,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+10G 分区 1 已设置为 Linux 类型,大小设为 10 GiB 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。 [root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 60G 0 disk ├─sda1 8:1 0 953M 0 part /boot └─sda2 8:2 0 51.2G 0 part ├─centos-root 253:0 0 46.6G 0 lvm / └─centos-swap 253:1 0 4.7G 0 lvm [SWAP] sdb 8:16 0 30G 0 disk └─sdb1 8:17 0 10G 0 part sdc 8:32 0 20G 0 disk └─sdc1 8:33 0 10G 0 part sdd 8:48 0 20G 0 disk └─sdd1 8:49 0 10G 0 part sde 8:64 0 20G 0 disk └─sde1 8:65 0 10G 0 part sdf 8:80 0 20G 0 disk sr0 11:0 1 1024M 0 rom
2.1.3 创建RAID磁盘
-C:创建 -v:列出详细信息 -l:指定raid级别 -n:指定用几块硬盘做raid -x:指定几块硬盘作为热备份 [root@localhost ~]# mdadm -C -v /dev/md5 -l5 -n3 /dev/sd[b-d]1 -x1 /dev/sde1 mdadm: layout defaults to left-symmetric mdadm: layout defaults to left-symmetric mdadm: chunk size defaults to 512K mdadm: size set to 10477568K mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md5 started. [root@localhost ~]# mdadm -D /dev/md5 //查看详细信息 /dev/md5: Version : 1.2 Creation Time : Tue May 9 19:53:05 2023 Raid Level : raid5 Array Size : 20955136 (19.98 GiB 21.46 GB) Used Dev Size : 10477568 (9.99 GiB 10.73 GB) Raid Devices : 3 Total Devices : 4 Persistence : Superblock is persistent Update Time : Tue May 9 19:53:57 2023 State : clean Active Devices : 3 //由此可知创建成功 Working Devices : 4 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 512K Consistency Policy : resync Name : localhost.localdomain:5 (local to host localhost.localdomain) UUID : 36391dbd:dd031c90:7c0be78f:ed388e64 Events : 18 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 33 1 active sync /dev/sdc1 4 8 49 2 active sync /dev/sdd1 3 8 65 - spare /dev/sde1
2.1.4 格式化
[root@localhost ~]# mkfs.xfs /dev/md5 meta-data=/dev/md5 isize=512 agcount=16, agsize=327296 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=5236736, imaxpct=25 = sunit=128 swidth=256 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=8 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
2.1.5 挂载
[root@localhost /]# mkdir /data //创建data目录 [root@localhost /]# ls //查看data目录是否创建成功 bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var [root@localhost /]# mount /dev/md5 /data/ //临时挂载/dev/md5到/data/ [root@localhost /]# lsblk //查看是否挂载成功 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 60G 0 disk ├─sda1 8:1 0 953M 0 part /boot └─sda2 8:2 0 51.2G 0 part ├─centos-root 253:0 0 46.6G 0 lvm / └─centos-swap 253:1 0 4.7G 0 lvm [SWAP] sdb 8:16 0 30G 0 disk └─sdb1 8:17 0 10G 0 part └─md5 9:5 0 20G 0 raid5 /data sdc 8:32 0 20G 0 disk └─sdc1 8:33 0 10G 0 part └─md5 9:5 0 20G 0 raid5 /data sdd 8:48 0 20G 0 disk └─sdd1 8:49 0 10G 0 part └─md5 9:5 0 20G 0 raid5 /data sde 8:64 0 20G 0 disk └─sde1 8:65 0 10G 0 part └─md5 9:5 0 20G 0 raid5 /data sdf 8:80 0 20G 0 disk sr0 11:0 1 1024M 0 rom
2.1.5 挂载
[root@localhost /]# mkdir /data //创建data目录 [root@localhost /]# ls //查看data目录是否创建成功 bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var [root@localhost /]# mount /dev/md5 /data/ //临时挂载/dev/md5到/data/ [root@localhost /]# lsblk //查看是否挂载成功 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 60G 0 disk ├─sda1 8:1 0 953M 0 part /boot └─sda2 8:2 0 51.2G 0 part ├─centos-root 253:0 0 46.6G 0 lvm / └─centos-swap 253:1 0 4.7G 0 lvm [SWAP] sdb 8:16 0 30G 0 disk └─sdb1 8:17 0 10G 0 part └─md5 9:5 0 20G 0 raid5 /data sdc 8:32 0 20G 0 disk └─sdc1 8:33 0 10G 0 part └─md5 9:5 0 20G 0 raid5 /data sdd 8:48 0 20G 0 disk └─sdd1 8:49 0 10G 0 part └─md5 9:5 0 20G 0 raid5 /data sde 8:64 0 20G 0 disk └─sde1 8:65 0 10G 0 part └─md5 9:5 0 20G 0 raid5 /data sdf 8:80 0 20G 0 disk sr0 11:0 1 1024M 0 rom
2.2 模拟故障
root@localhost /]# cd /data [root@localhost data]# touch aa bb cc [root@localhost data]# ls aa bb cc ##表明现在读写是正常的 [root@localhost data]# mdadm /dev/md5 -f /dev/sdb1 //强制下线sdb1 mdadm: set /dev/sdb1 faulty in /dev/md5 [root@localhost data]# mdadm -D /dev/md5 //查看md5的详细信息 /dev/md5: Version : 1.2 Creation Time : Tue May 9 19:53:05 2023 Raid Level : raid5 Array Size : 20955136 (19.98 GiB 21.46 GB) Used Dev Size : 10477568 (9.99 GiB 10.73 GB) Raid Devices : 3 Total Devices : 4 Persistence : Superblock is persistent Update Time : Tue May 9 23:03:43 2023 State : clean Active Devices : 3 Working Devices : 3 Failed Devices : 1 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K Consistency Policy : resync Name : localhost.localdomain:5 (local to host localhost.localdomain) UUID : 36391dbd:dd031c90:7c0be78f:ed388e64 Events : 37 Number Major Minor RaidDevice State 3 8 65 0 active sync /dev/sde1 1 8 33 1 active sync /dev/sdc1 4 8 49 2 active sync /dev/sdd1 0 8 17 - faulty /dev/sdb1 ##此时sdb1被下线,由热备盘sde1顶上 [root@localhost data]# ls aa bb cc [root@localhost data]# echo 123 > aa [root@localhost data]# cat aa 123 ##下线sdb1后读写功能依然正常,说明热备盘起作用了 [root@localhost data]# mdadm /dev/md5 -f /dev/sdc1 mdadm: set /dev/sdc1 faulty in /dev/md5 [root@localhost data]# mdadm /dev/md5 -f /dev/sdd1 mdadm: set /dev/sdd1 faulty in /dev/md5 [root@localhost data]# ls ls: 无法打开目录.: 输入/输出错误 [root@localhost data]# cat aa cat: aa: 输入/输出错误 [root@localhost data]# touch dd touch: 无法创建"dd": 输入/输出错误 ##由于RAID5只允许损坏一个硬盘,上面我下线了两个硬盘,所以此时无法输入输出,模拟故障验证成功
2.3 删除RAID
[root@localhost data]# umount /dev/md5 /data umount: /data:未挂载 [root@localhost data]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root 47G 4.9G 42G 11% / devtmpfs 969M 0 969M 0% /dev tmpfs 984M 0 984M 0% /dev/shm tmpfs 984M 9.2M 975M 1% /run tmpfs 984M 0 984M 0% /sys/fs/cgroup /dev/sda1 950M 179M 772M 19% /boot tmpfs 197M 4.0K 197M 1% /run/user/42 tmpfs 197M 48K 197M 1% /run/user/0 [root@localhost data]# mdadm -S /dev/md5 mdadm: stopped /dev/md5 [root@localhost data]# mdadm --misc --zero-superblock /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 [root@localhost /]# lsblk //查看是否删除成功 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 60G 0 disk ├─sda1 8:1 0 953M 0 part /boot └─sda2 8:2 0 51.2G 0 part ├─centos-root 253:0 0 46.6G 0 lvm / └─centos-swap 253:1 0 4.7G 0 lvm [SWAP] sdb 8:16 0 30G 0 disk └─sdb1 8:17 0 10G 0 part sdc 8:32 0 20G 0 disk └─sdc1 8:33 0 10G 0 part sdd 8:48 0 20G 0 disk └─sdd1 8:49 0 10G 0 part sde 8:64 0 20G 0 disk └─sde1 8:65 0 10G 0 part sdf 8:80 0 20G 0 disk sr0 11:0 1 1024M 0 rom