Linux raid-磁盘阵列-raid10搭建
Linux raid-磁盘阵列-raid10搭建
前言
LVM 最大的优势在于可以在不卸载分区和不损坏数据的情况下进行分区容量的调整,但是万一硬盘损坏了,那么数据一定会丟失。 本节讲的 RAID(磁盘阵列)的优势在于硬盘读写性能更好,而且有一定的数据冗余功能。
RAID 简介
RAID(Redundant Arrays of Inexpensive Disks,磁盘阵列),翻译过来就是廉价的、具有冗余功能的磁盘阵列。其原理是通过软件或硬件将多块较小的分区组合成一个容量较大的磁盘组。这个较大的磁盘组读写性能更好,更重要的是具有数据冗余功能。
那什么是数据冗余呢?从字面上理解,冗余就是多余的、重复的。在磁盘阵列中,冗余是指由多块硬盘组成一个磁盘组,在这个磁盘组中,数据存储在多块硬盘的不同地方,这样即使某块硬盘出现问题,数据也不会丟失,也就是磁盘数据具有了保护功能。
读者也可以这样理解,RAID 用于在多个硬盘上分散存储数据,并且能够“恰当”地重复存储数据,从而保证其中某块硬盘发生故障后,不至于影响整个系统的运转。RAID 将几块独立的硬盘组合在一起,形成一个逻辑上的 RAID 硬盘,这块“硬盘”在外界(用户、LVM等)看来,和真实的硬盘一样,没有任何区别。
RAID 0
RAID 0 也叫 Stripe 或 Striping(带区卷),是 RAID 级别中存储性能最好的一个。RAID 0 最好由相同容量的两块或两块以上的硬盘组成。如果组成 RAID 0 的两块硬盘大小不一致,则会影响 RAID 0 的性能。
这种模式下会先把硬盘分隔出大小相等的区块,当有数据需要写入硬盘时,会把数据也切割成相同大小的区块,然后分别写入各块硬盘。这样就相当于把一个文件分成几个部分同时向不同的硬盘中写入,数据的读/写速度当然就会非常快。
RAID 1
RAID 1 也叫 Mirror 或 Mirroring(镜像卷),由两块硬盘组成。两块硬盘的大小最好一致,否则总容量以容量小的那块硬盘为主。RAID 1 就具备了数据冗余功能,因为这种模式是把同一份数据同时写入两块硬盘。
比如有两块硬盘,组成了 RAID 1,当有数据写入时,相同的数据既写入硬盘 1,也写入硬盘 2。这样相当于给数据做了备份,所以任何一块硬盘损坏,数据都可以在另一块硬盘中找回。
RAID 3
必须3块以上的磁盘
磁盘1:0101
磁盘2:1011
异或结果:1110
如果突然磁盘1挂了
目前知道磁盘2的数据是:1011
异或值又是:1110
反推,磁盘1的数据是0101raid 3 的特点是存储异或值的磁盘不能挂
RAID 5
RAID 5 最少需要由 3 块硬盘组成,当然硬盘的容量也应当一致。当组成 RAID 5 时,同样需要把硬盘分隔成大小相同的区块。当有数据写入时,数据也被划分成等大小的区块,然后循环向 RAID 5 中写入。
每次循环写入数据的过程中,在其中一块硬盘中加入一个奇偶校验值(Parity),这个奇偶校验值的内容是这次循环写入时其他硬盘数据的备份。当有一块硬盘损坏时,采用这个奇偶校验值进行数据恢复。
当有数据循环写入时,每次循环都会写入一个奇偶校验值(Parity),并且每次奇偶校验值都会写入不同的硬盘。这个奇偶校验值就是其他两块硬盘中的数据经过换算之后产生的。因为每次奇偶校验值都会写入不同的硬盘,所以任何一块硬盘损坏之后,都可以依赖其他两块硬盘中保存的数据恢复这块损坏的硬盘中的数据。
需要注意的是,每次数据循环写入时,都会有一块硬盘用来保存奇偶校验值,所以在 RAID 5 中可以使用的总容量是硬盘总数减去一块的容量之和。
比如,在这张示意图中,由三块硬盘组成了 RAID 5,但是真正可用的容量是两块硬盘的容量之和,也就是说,越多的硬盘组成 RAID 5,损失的容量占比越小,因为不管由多少块硬盘组成 RAID 5,奇偶校验值加起来只占用一块硬盘。而且还要注意,RAID 5 不管是由几块硬盘组成的,只有损坏一块硬盘的情况才能恢复数据,因为奇偶校验值加起来只占用了一块硬盘,如果损坏的硬盘超过一块,那么数据就不能再恢复了。
RAID 5 的优点如下: - 因为奇偶校验值的存在,RAID 5 具有了数据冗余功能。 - 硬盘容量损失比 RAID 1 小,而且组成 RAID 5 的硬盘数量越多,容量损失占比越小。 - RAID 5 的数据读/写性能要比 RAID 1 更好,但是在数据写入性能上比 RAID 0 差。
RAID 5 的缺点如下: - 不管由多少块硬盘组成 RAID 5,只支持一块硬盘损坏之后的数据恢复。 - RAID 5 的实际容量是组成 RAID 5 的硬盘总数减去一块的容量之和。也就是有一块硬盘用来保存奇偶校验值,但不能保存数据。
从总体上来说,RAID 5 更像 RAID 0 和 RAID 1 的折中,性能比 RAID 1 好,但是不如 RAID 0;数据冗余比 RAID 0 好,而且不像RAID 1 那样浪费了 50% 的硬盘容量。
RAID 10 或 RAID 01
我们发现,RAID 0 虽然数据读/写性能非常好,但是没有数据冗余功能;而 RAID 1 虽然具有了数据冗余功能,但是数据写入速度实在是太慢了(尤其是软 RAID)。
那么,我们能不能把 RAID 0 和 RAID 1 组合起来使用?当然可以,这样我们就即拥有了 RAID 0 的性能,又拥有了 RAID 1 的数据冗余功能。
我们先用两块硬盘组成 RAID 1,再用两块硬盘组成另一个 RAID 1,最后把这两个 RAID 1 组成 RAID 0,这种 RAID 方法称作 RAID 10。那先组成 RAID 0,再组成 RAID 1 的方法我们作 RAID 01。
软RAID和硬RAID
我们要想在服务器上实现 RAID,可以采用磁盘阵列卡(RAID 卡)来组成 RAID,也就是硬 RAID。RAID 卡上有专门的芯片负责 RAID任务,因此性能要好得多,而且不占用系统性能,缺点是 RAID 卡比较昂贵。
如果我们既不想花钱又想使用 RAID,那就只能使用软 RAID 了。软 RAID 是指通过软件实现 RAID 功能,没有多余的费用,但是更加耗费服务器系统性能,而数据的写入速度比硬 RAID 慢。
搭建RAID10
准备四块磁盘,用于创建raid10,配置vmware虚拟机,创建四个虚拟硬盘
先安装mdadm 使用mdadm命令创建raid
`1.查看磁盘信息` [root@localhost ~]# fdisk -l | grep sd 磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区 /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 41943039 19921920 83 Linux 磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区 磁盘 /dev/sdc:10.7 GB, 10737418240 字节,20971520 个扇区 磁盘 /dev/sdd:10.7 GB, 10737418240 字节,20971520 个扇区 磁盘 /dev/sde:10.7 GB, 10737418240 字节,20971520 个扇区 [root@localhost ~]# mdadm -bash: mdadm: 未找到命令 [root@localhost ~]# yum install mdadm -y `2.mdadm` [root@localhost ~]# mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde mdadm: layout defaults to n2 mdadm: layout defaults to n2 mdadm: chunk size defaults to 512K mdadm: size set to 10476544K mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde -C 表示创建RAID阵列 -v 显示创建过程 /dev/md0 表示raid阵列的名字 -a yes 表示自动创建阵列设备文件 -n 4 表示4块硬盘创建阵列 -l 10 表示指定raid的级别 最后跟上4块硬盘的名字 `3.针对磁盘阵列设备,进行文件系统格式化` [root@localhost ~]# mkfs.xfs /dev/md0 meta-data=/dev/md0 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 `4.创建文件用于对/dev/md0 的挂载` [root@localhost ~]# mkdir /test_raid `5.针对分区进行文件夹挂载,使用mount命令进行挂载` [root@localhost ~]# mount /dev/md0 /test_raid/ `6.检查挂载情况` [root@localhost ~]# mount -l | grep md0 /dev/md0 on /test_raid type xfs (rw,relatime,attr2,inode64,sunit=1024,swidth=2048,noquota) `7.还可以使用df命令,检查挂载空的使用情况` [root@localhost ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 476M 0 476M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 7.7M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda2 19G 2.1G 17G 11% / /dev/sda1 1014M 132M 883M 13% /boot tmpfs 98M 0 98M 0% /run/user/0 /dev/md0 20G 33M 20G 1% /test_raid `8.检查raid10的详细信息` [root@localhost ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Mon Jul 3 18:53:19 2023 Raid Level : raid10 Array Size : 20953088 (19.98 GiB 21.46 GB) Used Dev Size : 10476544 (9.99 GiB 10.73 GB) Raid Devices : 4 Total Devices : 4 Persistence : Superblock is persistent Update Time : Tue Jul 4 00:28:11 2023 State : clean Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0 Layout : near=2 Chunk Size : 512K Consistency Policy : resync Name : localhost:0 (local to host localhost) UUID : 70d749d7:73a8cb06:ff46d18a:955fa3f1 Events : 17 Number Major Minor RaidDevice State 0 8 16 0 active sync set-A /dev/sdb 1 8 32 1 active sync set-B /dev/sdc 2 8 48 2 active sync set-A /dev/sdd 3 8 64 3 active sync set-B /dev/sde `9.可以测试向磁盘阵列中写入数据,检查使用空间` [root@localhost test_raid]# echo {1..1000000} > test.txt [root@localhost test_raid]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 476M 0 476M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 7.7M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda2 19G 2.1G 17G 11% / /dev/sda1 1014M 132M 883M 13% /boot tmpfs 98M 0 98M 0% /run/user/0 /dev/md0 20G 40M 20G 1% /test_raid `10.编辑/etc/fstab文件` [root@localhost /]# vim /etc/fstab 在文件最后一行下面添加如下信息 /dev/md0 /test_raid xfs default 0 0 `取消挂载` [root@localhost test_raid]# cd .. [root@localhost /]# umount /dev/md0 [root@localhost /]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 476M 0 476M 0% /dev tmpfs 487M 0 487M 0长度c'd% /dev/shm tmpfs 487M 7.7M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda2 19G 2.1G 17G 11% / /dev/sda1 1014M 132M 883M 13% /boot [root@localhost /]# tail -1 /etc/fstab /dev/md0 /test_raid xfs default 0 0
RAID10故障修复
当raid10故障了一块硬盘怎么办?
1.模拟挂掉一块硬盘,从raid10的四块硬盘组中,剔除一块磁盘
[root@localhost test_raid]# mdadm /dev/md0 -f /dev/sdd mdadm: set /dev/sdd faulty in /dev/md0
2.查看raid10的状态
[root@localhost test_raid]# mdadm -D /dev/md0 可以看到标红的一个设备挂掉了 Failed Devices : 1
3.即使挂掉一块硬盘也不会影响raid10的使用
[root@localhost test_raid]# echo {1..1000000} >> test.txt} [root@localhost test_raid]# df -hT 文件系统 类型 容量 已用 可用 已用% 挂载点 devtmpfs devtmpfs 476M 0 476M 0% /dev tmpfs tmpfs 487M 0 487M 0% /dev/shm tmpfs tmpfs 487M 7.7M 479M 2% /run tmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda2 xfs 19G 2.1G 17G 11% / /dev/sda1 xfs 1014M 132M 883M 13% /boot tmpfs tmpfs 98M 0 98M 0% /run/user/0 /dev/md0 xfs 20G 46M 20G 1% /test_raid
4.只需要购买新的硬盘设备,重新加入raid10磁盘阵列即可
重新加入磁盘阵列必须先取消挂载
[root@localhost /]# reboot [root@localhost ~]# umount /dev/md0 [root@localhost ~]# mdadm /dev/md0 -a /dev/sdd mdadm: added /dev/sdd [root@localhost ~]# mdadm -D /dev/md0 Rebuild Status : 17% complete `等待"Rebuild Status : 17% complete"这条语句100%`
RAID10的重启
`1.把四块硬盘写入 /etc/mdadm.conf文件` [root@localhost ~]# echo DEVICE /dev/sd[b-e] > /etc/mdadm.conf `2.扫描磁盘阵列信息,追加到这个文件中` [root@localhost ~]# mdadm -Ds >> /etc/mdadm.conf [root@localhost ~]# cat /etc/mdadm.conf DEVICE /dev/sdb /dev/sdc /dev/sdd /dev/sde ARRAY /dev/md/0 metadata=1.2 name=localhost.localdomain:0 UUID=3704deaf:17ecb0eb:93779abb:72ce3501 `3.取消raid10的挂载` [root@localhost ~]# umount /test_raid/ `4.停止raid10` [root@localhost ~]# mdadm -S /dev/md0 mdadm: stopped /dev/md0 `5.检查一下磁盘阵列组的信息 可以发现停止查看了` [root@localhost ~]# mdadm -D /dev/md0 mdadm: cannot open /dev/md0: No such file or directory `6.在存在配置文件的情况下,可以正常启动raid10,并且md0也自动挂载到/test_raid` [root@localhost ~]# mdadm -A /dev/md0 mdadm: /dev/md0 has been started with 4 drives. [root@localhost ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 475M 0 475M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 7.7M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 2.2G 15G 13% / /dev/sda1 1014M 138M 877M 14% /boot tmpfs 98M 0 98M 0% /run/user/0 /dev/md0 20G 40M 20G 1% /test_raid
RAID10的删除
`1.卸载挂载中的设备` [root@localhost ~]# umount /test_raid `2.停止raid服务` [root@localhost ~]# mdadm -S /dev/md0 mdadm: stopped /dev/md0 `3.卸载raid10中所有的磁盘信息` [root@localhost ~]# mdadm --misc --zero-superblock /dev/sdb [root@localhost ~]# mdadm --misc --zero-superblock /dev/sdc [root@localhost ~]# mdadm --misc --zero-superblock /dev/sdd [root@localhost ~]# mdadm --misc --zero-superblock /dev/sde `4.删除raid的配置文件` [root@localhost ~]# rm /etc/mdadm.conf rm:是否删除普通文件 "/etc/mdadm.conf"?y `5.此时再清理开机自动挂载的配置文件` [root@localhost ~]# vim /etc/fstab 删除 /etc/fstab文件的自动挂载信息配置
RAID与备份盘的学习
`1.用raid5来搭建三块硬盘的阵列组` [root@localhost ~]# ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdc /dev/sdd /dev/sde [root@localhost ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde mdadm: layout defaults to left-symmetric mdadm: layout defaults to left-symmetric mdadm: chunk size defaults to 512K mdadm: size set to 10476544K mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. 参数解释: -n 指定3块硬盘 -l 指定raid级别 -x 1指定一个备份盘 /dev/sd[b-e] 代表指定使用的4块硬盘 `2.检查一下raid阵列组的信息与状态 可以看到激活3个、工作中4个、1个备份盘` [root@localhost ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Tue Jul 4 17:06:51 2023 Raid Level : raid5 Array Size : 20953088 (19.98 GiB 21.46 GB) Used Dev Size : 10476544 (9.99 GiB 10.73 GB) Raid Devices : 3 Total Devices : 4 Persistence : Superblock is persistent Update Time : Tue Jul 4 17:07:49 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:0 (local to host localhost.localdomain) UUID : eb75ff17:e1eaf0a2:53027735:6437e08a 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 `3.针对阵列组进行格式化文件系统` [root@localhost ~]# mkfs.xfs -f /dev/md0 meta-data=/dev/md0 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 `4.开始挂载,使用阵列组分区` 这里就用之前创建的/test_raid文件 进行挂载 [root@localhost test_raid]# mount /dev/md0 /test_raid/ `5.检查挂载情况,以及数据写入情况` [root@localhost test_raid]# df -hT | grep md 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/md0 xfs 20G 33M 20G 1% /test_raid `6.此时可以写入数据,检查raid是否正常使用` [root@localhost test_raid]# echo {1..5000000} > test2.txt `7.见证备份磁盘的作用,从磁盘阵列组中删除一块硬盘,检查阵列情况` [root@localhost test_raid]# mdadm /dev/md0 -f /dev/sdb mdadm: set /dev/sdb faulty in /dev/md0 [root@localhost test_raid]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Tue Jul 4 17:06:51 2023 Raid Level : raid5 Array Size : 20953088 (19.98 GiB 21.46 GB) Used Dev Size : 10476544 (9.99 GiB 10.73 GB) Raid Devices : 3 Total Devices : 4 Persistence : Superblock is persistent Update Time : Tue Jul 4 17:54:21 2023 State : clean, degraded, recovering Active Devices : 2 Working Devices : 3 Failed Devices : 1 Spare Devices : 1 Layout : left-symmetric Chunk Size : 512K Consistency Policy : resync Rebuild Status : 40% complete Name : localhost.localdomain:0 (local to host localhost.localdomain) UUID : eb75ff17:e1eaf0a2:53027735:6437e08a Events : 26 Number Major Minor RaidDevice State 3 8 64 0 spare rebuilding /dev/sde 1 8 32 1 active sync /dev/sdc 4 8 48 2 active sync /dev/sdd 0 8 16 - faulty /dev/sdb `可以发现"Rebuild Status : 40% complete"等待完成即可`
文章内容主要参考:11.15 Linux RAID(磁盘阵列)完全攻略 - 知乎 (zhihu.com)
b站-linux超哥 https://www.bilibili.com/video/BV1tK4y1Z7F4?p=91