企业级的数据库应用大多部署在RAID磁盘阵列的服务器上,这样能提高磁盘的访问性能,并能够实现容错/容灾。
RAID(冗余磁盘阵列),简单理解,就是拿一些廉价的硬盘来做成阵列。其目的无非是为了扩展存储容量,提升读写性能,实现数据冗余(备份容灾)。
主流的大概可以分为几个级别:RAID 0、RAID 1、RAID 5、RAID6、RAID 10、 RAID 01、RAID 50等。
RAID 0 简称磁盘条带化,它可以提供最好的读写性能,如果你把两块磁盘做成了RAID0,那么在写入数据的时候,就可以同时对A磁盘和B磁盘执行写入操作。这里需要说明的是:“可以同时...写入操作”,并不是意味着将文件的相同内容“在同一时间内完全写入”A磁盘和B磁盘中。打 个比方:有一个100M的文件需要写入磁盘中,假设单个磁盘的写入速度是10M/S,那么需要10秒钟才能完成写入工作。但如果在具有A、B两块磁盘的 RAID 0阵列环境中,(以秒/S为最小单位的)单时间内,可以将10M内容写入A磁盘中,并同时将紧随的10M内容写入B磁盘中,这样算起来,写入速度变成了 20M/S,只需要5秒钟就能搞定了,而且每块磁盘中只需存储50M的文件内容,不会造成硬盘存储压力。当然,上诉例子也许不恰当,也只是指的理论环境 下,实际环境中会有很多其他因素,效率肯定不能达到。
可以肯定的是,这样肯定是能提高读写性能的,但是这样也带来了一个问题就是,如果其中的一部 分数据丢失了,你的全部数据都不会找回来的,因为RAID0没有提供冗余恢复数据的策略。所以RAID0可以用在只读的数据库数据表,或者是经过复制过来 的数据库上,如果你对数据丢失不敏感的话,也可以使用RAID 0,总之这个level下是高性能、无冗余。
通过上面RAID 10的介绍也就明白了RAID 50的性能模式了吧?这里就不介绍了。
下面是一个综合各种RAID 等级的性能以及应用场景:
软RAID配置命令——mdadm
命令格式:
[root@localhost ~]# mdadm -C /dev/md5 -a yes -l 5 -n 3 -x 1 /dev/sd[b,c,d,e]
或者
[root@localhost ~]# mdadm -C /dev/md0 -ayes -l5 -n3 -x1 /dev/sd[b-e]1
关于上述的选项与参数介绍:
- -C --create:创建模式
- -a --auto {yes|no}:同意创建设备,如不加此参数时必须先使用mknod 命令来创建一个RAID设备,不过推荐使用-a yes参数一次性创建;
- -l --level #:阵列模式,支持的阵列模式有 linear, raid0, raid1, raid4, raid5, raid6, raid10, multipath, faulty, container;
- -n #:使用#个块设备来创建此RAID(-n 3 表示用3块硬盘来创建这个RAID)
- -x #:当前阵列中热备盘只有#块(-x 1 表示热备盘只有1块)
创建RAID举例(以RAID 5为例)
需求如下:
- 利用4个分区组成RAID 5,其中一个分区作为预备磁盘,当工作中的RAID损坏后,预备磁盘顶上;
- 每个分区大小为20GB;
- 利用1个分区设置为预备分区;
- 挂载到/test目录使用】
开始配置:
1、创建RAID 5:
[root@localhost ~]# fdisk -l | grep 磁盘 #以下就是用来做RAID 5的磁盘
..........................#省略部分内容
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
磁盘标签类型:gpt
磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区
磁盘标签类型:gpt
磁盘 /dev/sdd:21.5 GB, 21474836480 字节,41943040 个扇区
磁盘标签类型:gpt
磁盘 /dev/sde:21.5 GB, 21474836480 字节,41943040 个扇区
磁盘标签类型:gpt
..........................#省略部分内容
[root@localhost ~]# mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sd[b,c,d,e]
........................#忽略部分提示信息
Continue creating array? y #输入“y”进行确认
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started. #/dev/md0创建成功。
[root@localhost ~]# cat /proc/mdstat #查询刚刚创建的RAID信息
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd[4] sde[3](S) sdc[1] sdb[0] #组成RAID的实体磁盘及其顺序
41908224 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
#相关信息,chunk大小及RAID等级说明,后面的三个U代表正常,若不是U则代表有误。
unused devices: <none>
[root@localhost ~]# mdadm -D /dev/md0 #这个命令查看出来的结果更人性化写
/dev/md0: #RAID的设备文件名
Version : 1.2
Creation Time : Thu Sep 5 09:37:42 2019 #创建RAID的时间
Raid Level : raid5 #RAID的等级,这里是RAID5
Array Size : 41908224 (39.97 GiB 42.91 GB) #整组RAID的可用量
Used Dev Size : 20954112 (19.98 GiB 21.46 GB) #每颗磁盘的可用容量
Raid Devices : 3 #组成RAID的磁盘数量
Total Devices : 4 #包括spare的总磁盘数
Persistence : Superblock is persistent
Update Time : Thu Sep 5 09:39:28 2019
State : clean #目前这个RAID的使用状态
Active Devices : 3 #启动的设备数量
Working Devices : 4 #目前使用于此RAID的设备数量
Failed Devices : 0 #损坏的设备数量
Spare Devices : 1 #预备磁盘的数量
Layout : left-symmetric
Chunk Size : 512K #chunk的小区块容量
Consistency Policy : resync
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : d395d245:8f9294b4:3223cd47:b0bee5d8
Events : 18
#以下是每个磁盘的使用情况,包括三个active sync和一个spare
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
#RaidDevice是指此RAID内的磁盘顺序
2、格式化并进行挂载使用:
[root@localhost ~]# mkfs.xfs /dev/md0 #格式化刚刚创建的RAID 5
[root@localhost ~]# mkdir /test #创建挂载点
[root@localhost ~]# mount /dev/md0 /test #挂载
[root@localhost ~]# df -hT /test #确认挂载,使用起来和普通文件系统没有区别
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/md0 xfs 40G 33M 40G 1% /test
#将挂载信息写入/etc/fstab中进行开机自动挂载了,设备名可以是/dev/md0,也可以是设备的UUID。
[root@localhost ~]# blkid /dev/md0 #查询该RAID 5的UUID
/dev/md0: UUID="93830b3a-69e4-4cbf-b255-f43f2ae4864b" TYPE="xfs"
[root@localhost ~]# vim /etc/fstab #打开/etc/fstab,写入下面内容
UUID=93830b3a-69e4-4cbf-b255-f43f2ae4864b /test xfs defaults 0 0
3、测试RAID 5:
关于测试,必然涉及到了一些管理RAID的参数,如下:
- -f --fail:会将后面的设备设置成为出错的状态;
- -a --add:会将后面的设备加入到这个md中;
- -r --remove:会将后面这个设备由这个md中移除;
[root@localhost ~]# echo "hi,girl,good morning." > /test/a.txt #写入数据
[root@localhost ~]# cat /test/a.txt #查看
hi,girl,good morning.
[root@localhost ~]# mdadm /dev/md0 -f /dev/sdb #将/dev/sdb损坏
mdadm: set /dev/sdb faulty in /dev/md0
[root@localhost ~]# mdadm -D /dev/md0 #查看RAID 5的状态
/dev/md0:
Version : 1.2
Creation Time : Thu Sep 5 09:37:42 2019
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 : Thu Sep 5 10:47:00 2019
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 1 #查到失败的磁盘有1个
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : d395d245:8f9294b4:3223cd47:b0bee5d8
Events : 39
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 #这就是刚才损坏的磁盘
#可以发现作为预备磁盘已经顶替了损坏的磁盘了
[root@localhost ~]# df -hT /test #可用容量还是40G
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/md0 xfs 40G 33M 40G 1% /test
root@localhost ~]# mdadm /dev/md0 -r /dev/sdb #将损坏的磁盘移除RAID组
mdadm: hot removed /dev/sdb from /dev/md0
[root@localhost ~]# mdadm /dev/md0 -a /dev/sdf #添加一块磁盘到RAID组
mdadm: added /dev/sdf
[root@localhost ~]# mdadm -D /dev/md0 #查看RAID组的成员状态
/dev/md0:
.............#省略部分内容
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
5 8 80 - spare /dev/sdf
#新添加的磁盘已经成为了RAID组的预备磁盘
4、将RAID组重设置为普通磁盘
[root@localhost ~]# umount /test
[root@localhost ~]# vim /etc/fstab
.............#省略部分内容
UUID=93830b3a-69e4-4cbf-b255-f43f2ae4864b /test xfs defaults 0 0
#将设置的RAID 5自动挂载删除
[root@localhost ~]# dd if=/dev/zero of=/dev/md0 bs=1M count=50
#损坏RAID的超级区块
[root@localhost ~]# mdadm --stop /dev/md0 #停止RAID的使用
mdadm: stopped /dev/md0
#以下操作是将RAID中成员磁盘的超级块信息覆盖
[root@localhost ~]# dd if=/dev/zero of=/dev/sdc bs=1M count=10
[root@localhost ~]# dd if=/dev/zero of=/dev/sdd bs=1M count=10
[root@localhost ~]# dd if=/dev/zero of=/dev/sde bs=1M count=10
[root@localhost ~]# dd if=/dev/zero of=/dev/sdf bs=1M count=10
[root@localhost ~]# cat /proc/mdstat #确认下面不存在该RAID
Personalities : [raid6] [raid5] [raid4]
unused devices: <none>
经过以上操作即恢复成了普通磁盘,但是原本的数据都没有了,后续使用没有深入研究,可以使用一些重新检测的命令进行系统扫描或者重启系统,即可挂载使用,否则可能会挂载不上。
重新检测命令:
[root@localhost ~]# partprobe /dev/sdc
———————— 本文至此结束,感谢阅读
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。