RAID技术的作用如下,主要是为了防止单硬盘损坏导致数据全部丢失,起到一个保险作用。
- 数据冗余:把数据的校验信息存放在冗余的磁盘中,在某些磁盘数据损坏时,能从其他未损坏的磁盘中,重新构建数据。
- 性能提升:RAID能把多块独立的磁盘组成磁盘阵列,通过把数据切成分片的方式,使得读/写数据能走多块磁盘,从而提升性能。
- 提升储存容量:RAID可以将多个硬盘合并在一起,从而提升储存容量。
- 高可用性:RAID可以保证服务器可靠耐用,即使硬盘坏了一个,剩下还有好几个硬盘是正常的,这样服务器才不会挂掉。
先来看下实验环境,系统还是一如既往的centos7.2,当然这个方法也是通用的方法。比如在centos7.4等不同版本也可以使用。本次实验对网络没有什么要求,所以不管你是设置nat还是主机模式的网卡都行。重点在于对于实验机提前添加好几个虚拟磁盘。
给我们安装好的centos7.2系统添加4个20g的硬盘用于完成本次实验。
请把添加的磁盘文件统一放好以便于后续删除。完成后虚拟机配置如下所示:
然后我们就能开机准备开始play这个实验了。
首先,我们需要创建一个raid0,利用磁盘分区新建2个磁盘分区,每个大小都为20g。再用这2个的分区模拟一个40g的硬盘。(说白了就是把两个20g的盘组成一个40g的盘)
不过在此之前还需要先用yum命令安装mdadm工具。我这边是自己本地镜像有这个资源软件包我通过本地挂载yum源仓库下载,如果发现没有这个资源软件包的友友们可以让虚拟机使用nat网卡在能通外网的情况下挂载网络源比如阿里、腾讯、网易、华为的镜像源来下载这个工具。
这里说下为什么不推荐用centos自身配置好的yum网络源,因为它自身配置好的服务器在国外,有的时候下载部分软件慢不说还可能下到一半或者快好了直接断掉了。
插播一下本地yum网络源怎么配置(要想用这个一定要保证虚拟机能ping通外网)
先把本地的镜像源移到别的地方去或者删掉也行,主要是为了防止本地的镜像源优先使用但是又不通然后报错的问题。
我这边是通过*通配符的方式将其全部转移到home目录下
接着我vi编辑一份名为local.repo的文件
然后添加配置,我这边是只加了阿里云的。(其实不用写这么复杂,这里写的比较详细复杂,除了第一个基础源,第二个更新源和第三个extras(额外扩展)源都配置出来了。)
接着使用yum clean all清理一下yum缓存以后使用yum makecache进行元数据更新(其实直接使用yum repolist更新仓库就ok)。顺带一提不是说所有国内网络源都很快,软件都齐全,有的时候阿里云源可能没有其他源有的软件或者速度不如其他源快。所以要根据实际情况自己选择使用哪个源。
如下图所示:我隔了1年重新回来做这个,挂载了阿里云源后,我没把epel镜像源移走更新到这个epel时就非常慢,不过epel这东西本来也挺迷的。以前做的时候也是有时几MB的跑一会就完了,有时几十KB跑着等半天。
我这边觉得太慢了ctrl+C取消掉了,然后我直接更新仓库了。epel更新又变快了,就是这么让人迷惑。
所以我后面直接放弃了,我直接把这个epel的镜像源也给移走了,只保留国内源
然后我直接清一下缓存更新仓库了,这下舒服多了。可以看到阿里云镜像源里有的软件包都已经缓存记录好了。
除了自己手动配置yum网络源,也可以使用wget工具命令从这些官方的网站上去爬取下载下来这些官方已经给你配置好的yum源。(具体的网址自己上网查,我看到有不少人分享。)但是爬取下来后记得放到/etc/yum.repos.d/下,非则会识别不到报错。
最后就可以使用yum命令自由自在的美美拿所有需要的工具了,比如本次需要的mdadm工具。
[root@xnode1 ~]# yum install -y mdadm
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package mdadm.x86_64 0:4.1-9.el7_9 will be installed
--> Processing Dependency: libreport-filesystem for package: mdadm-4.1-9.el7_9.x86_64
--> Running transaction check
---> Package libreport-filesystem.x86_64 0:2.1.11-53.el7.centos will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================================================
Package Arch Version Repository Size
================================================================================================================
Installing:
mdadm x86_64 4.1-9.el7_9 virginia-aliyun-centos-updates 439 k
Installing for dependencies:
libreport-filesystem x86_64 2.1.11-53.el7.centos virginia-aliyun-centos-base 41 k
Transaction Summary
================================================================================================================
Install 1 Package (+1 Dependent package)
Total download size: 480 k
Installed size: 1.0 M
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
(1/2): libreport-filesystem-2.1.11-53.el7.centos.x86_64.rpm | 41 kB 00:00:00
(2/2): mdadm-4.1-9.el7_9.x86_64.rpm | 439 kB 00:00:06
----------------------------------------------------------------------------------------------------------------
Total 70 kB/s | 480 kB 00:00:06
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : libreport-filesystem-2.1.11-53.el7.centos.x86_64 1/2
Installing : mdadm-4.1-9.el7_9.x86_64 2/2
Verifying : mdadm-4.1-9.el7_9.x86_64 1/2
Verifying : libreport-filesystem-2.1.11-53.el7.centos.x86_64 2/2
Installed:
mdadm.x86_64 0:4.1-9.el7_9
Dependency Installed:
libreport-filesystem.x86_64 0:2.1.11-53.el7.centos
Complete!
[root@xnode1 ~]#
还需要补充展示一下本地镜像挂载yum仓库下载的配置方法,具体步骤如下:
典中典之移走本地yum网络源然后编辑一个本地yum源,这里把网络源全移到/media目录下了,而这次本地名字叫yum.repo。所以各位需要明白本地yum网络源移到哪里都可以,只是单纯不让它在这个目录下和你需要用到的源冲突。本地源名字也可以随便叫不是非要叫local,但是文件名后缀一定要.repo。
本地源文件配置,这里用于挂载的文件夹我是叫mdadm_yum比较对应这次实验的工具,实际你爱叫什么叫什么。直接叫一个centos文件夹都行。
创建出这个目录,然后把本地镜像挂载上去。
之后步骤就跟上面一样了,请一下yum缓存更新一下仓库然后使用yum命令安装就行了。
前面浪费了不少时间在说非本次实验的yum源制作内容真是非常抱歉,现在我们真正式进入到实验当中。
回看操作步骤:
我们需要创建一个raid0,利用磁盘分区新建2个磁盘分区,每个大小都为20g。再用这2个的分区模拟一个40g的硬盘。(说白了就是把两个20g的盘组成一个40g的盘)
先使用命令查看一下我们当前的磁盘分区情况吧。
[root@xnode1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 49.5G 0 part
├─centos-root 253:0 0 47.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
sdd 8:48 0 20G 0 disk
sde 8:64 0 20G 0 disk
sr0 11:0 1 1024M 0 rom
[root@xnode1 ~]#
这里直接创建一个RAID 0设备:这里使用/dev/sdb和/dev/sdc做实验。将/dev/sdb和/dev/sdc建立RAID等级为RAID 0的md0(设备名)
这里并没有创建失败哦,这里是说通过内核参数创建失败了但是回退用节点后成功了。还有512K这个是一个警告因为没有明确指定参数所以给了个默认值。
查看一下我们刚才创建的RAID是什么情况
[root@xnode1 ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Mon Mar 25 13:01:01 2024
Raid Level : raid0
Array Size : 41908224 (39.97 GiB 42.91 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Mon Mar 25 13:01:01 2024
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Chunk Size : 512K
Consistency Policy : unknown
Name : xnode1:0 (local to host xnode1)
UUID : 9bc5d476:67c6403b:a93ecffc:7180d648
Events : 0
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
[root@xnode1 ~]#
生成一下配置文件。
对创建的RAID进行文件系统创建并挂载。
[root@xnode1 ~]# 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@xnode1 ~]# mkdir /raid0/
[root@xnode1 ~]# mount /dev/md0 /raid0/
[root@xnode1 ~]# df -Th /raid0/
Filesystem Type Size Used Avail Use% Mounted on
/dev/md0 xfs 40G 33M 40G 1% /raid0
将其设置成开机自动挂载。需要注意的是在用echo往自启动挂载文件里面写入的时候""记得放好,将这个内容命令完好的存入配置文件中。而不是直接无脑复制上面的uuid导致多2个""。
到此我们就完成了第一个小实验。
接下来我们删除撤销掉刚才的所有操作,做进阶实验。
我们组个raid5玩玩,利用磁盘分区新建4个磁盘分区,每个大小为20 GB。用3个20 GB的分区来模拟raid 5,加一个热备盘。
[root@xnode1 ~]# 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 to create md5 when using /sys/module/md_mod/parameters/new_array, fallback to creation via node
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
我们先按照这个要求创建,然后查看一下我们组建的RAID的信息。
[root@xnode1 ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Mon Mar 25 13:25:28 2024
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 : Mon Mar 25 13:27:07 2024
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 4
Failed Devices : 0
Spare Devices : 2
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : unknown
Rebuild Status : 95% complete
Name : xnode1:5 (local to host xnode1)
UUID : cc940c6c:9f742369:eb1694b0:4d23044c
Events : 16
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 spare rebuilding /dev/sdd
3 8 64 - spare /dev/sde
[root@xnode1 ~]#
既然组了raid5了自然要模拟硬盘故障来看看了。
再次查看raid信息
[root@xnode1 ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Mon Mar 25 13:25:28 2024
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 : Mon Mar 25 13:30:02 2024
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 3
Failed Devices : 1
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : unknown
Rebuild Status : 28% complete
Name : xnode1:5 (local to host xnode1)
UUID : cc940c6c:9f742369:eb1694b0:4d23044c
Events : 24
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
[root@xnode1 ~]#
从以上结果可以发现原来的热备盘/dev/sde正在参与RAID 5的重建,而原来的/dev/sdb变成了坏盘。
接着我们直接热移除掉这个故障盘。然后再次查看raid信息。
会发现已经移除掉了,sde替sdb上岗工作。
接着我们格式化RAID文件系统并进行挂载。
[root@xnode1 ~]# mkfs.xfs -f /dev/md5
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@xnode1 ~]# mount /dev/md5 /mnt/
[root@xnode1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 48G 6.3G 42G 14% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.7M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 497M 125M 373M 25% /boot
tmpfs 378M 0 378M 0% /run/user/0
/dev/md5 40G 33M 40G 1% /mnt
[root@xnode1 ~]#
这样raid5就组建并测试成功挂载投入到使用中去了。
本次实验到此全部结束!