一、什么是RAID
RAID称之为磁盘阵列,主要用于提升存储的可用性,和性能上的改善,同时大大提升磁盘的容错能力,磁盘阵列是由多个物理磁盘组成,可是对于操做系统而言,它就是一个逻辑磁盘,系统上存储的数据会分布在阵列中的多个物理磁盘。
二、RAID的几种级别node
级别 | 说明 | 最少物理磁盘数 | 最大容错能力 | I/O性能 | 磁盘容量利用率 |
---|---|---|---|---|---|
RAID 1 | 1级别又称之为磁盘镜像,一样是须要2块盘,可是磁盘具备了容错能力 | 须要2个磁盘 | 容许一块硬盘发生故障 | 读性能提高,写入性能通常 | 50% |
RAID 5 | 5级别称之为分布式奇偶校验阵列,以数据的校验位来保证数据的安全,可是数据的校验位不是存放在单独的磁盘,而是交互式的存放在各个阵列中的磁盘,若是阵列中任何一个磁盘出现故障,均可根据其余盘的校验位重建损坏的数据 | 至少3块磁盘 | 容许一块硬盘发生故障 | 读写性能较好 | 90% |
RAID 6 | 6级别与5级别相似,5级别会将数据的校验信息存放在硬盘上,6级别会比5级别多保存一份校验信息 | 至少须要4块硬盘 | 容许两块硬盘发生故障 | 读写性能较好 | 80% |
RAID 10 | 称之为高可靠性与高效磁盘结构,兼具了0级别和1级别的优势,此种级别先用两个磁盘创建镜像,而后将镜像后的逻辑磁盘,作0级别 | 至少须要4块硬盘 | 容许一块盘发生故障 | 读写性能好 | 50% |
三、RAID种类centos
种类 | 说明 |
---|---|
软RAID | 利用操做系统提供的软件技术实现RAID功能,优势廉价,几乎没有任何成本,缺点受限操做系统的稳定性,同时占用必定的系统资源 |
硬RAID | 经过硬件RAID控制器实现,优势是不须要占用其余硬件资源,同时提供了高速缓存机制,大大的提高了磁盘的读写性能,同时稳定性也是很是高 |
四、Linux系统上实现软RAID
模拟平台:VMware workstation
测试环境:centos7计算机一台,添加一块硬盘
使用工具:mdadm
【raid1】实现过程:
一、首先查看磁盘标签类型
若是是MBR可使用fdisk建立相同大小的磁盘分区
若是是GPT可使用gdisk建立相同大小的磁盘分区缓存
[root@lab-236 ~]# fdisk -l /dev/sdb 磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:gpt #硬盘类型GPT Disk identifier: 037192CD-B94D-4F5D-A559-A90B74EECA9D Start End Size Type Name
二、建立2个分区,并更改分区系统类型为Linux RAID
由于咱们的磁盘标签类型是GPT,因此使用gdisk执行安全
[root@lab-236 ~]# gdisk /dev/sdb GPT fdisk (gdisk) version 0.8.10 Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR; using GPT. Command (? for help): n #建立新的分区 Partition number (1-128, default 1): 1 #分区编号1 First sector (34-41943006, default = 2048) or {+-}size{KMGTP}: #指定起始扇区,默认便可 Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +5G #指定分区大小 Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): fd00 #更改分区系统类型为LinuxRAID Changed type of partition to 'Linux RAID' Command (? for help): n #继续建立第二分区 Partition number (2-128, default 2): 2 #分区编号2 First sector (34-41943006, default = 10487808) or {+-}size{KMGTP}: #指定起始扇区,默认便可 Last sector (10487808-41943006, default = 41943006) or {+-}size{KMGTP}: +5G #指定分区大小 Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): fd00 #更改分区系统类型为LinuxRAID Changed type of partition to 'Linux RAID' Command (? for help): p #显示分区信息 Disk /dev/sdb: 41943040 sectors, 20.0 GiB Logical sector size: 512 bytes Disk identifier (GUID): 037192CD-B94D-4F5D-A559-A90B74EECA9D Partition table holds up to 128 entries First usable sector is 34, last usable sector is 41943006 Partitions will be aligned on 2048-sector boundaries Total free space is 20971453 sectors (10.0 GiB) Number Start (sector) End (sector) Size Code Name 1 2048 10487807 5.0 GiB FD00 Linux RAID 2 10487808 20973567 5.0 GiB FD00 Linux RAID Command (? for help): w #保存分区信息 Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): Y #分区发生改变,提示是否继续保存 OK; writing new GUID partition table (GPT) to /dev/sdb. The operation has completed successfully.
三、执行mdadm工具建立RAID1
注意建立RAID设备编号要从0开始app
[root@lab-236 ~]# mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdb2 mdadm: /dev/sdb1 appears to be part of a raid array: level=raid1 devices=2 ctime=Thu Dec 10 20:52:02 2020 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 mdadm: /dev/sdb2 appears to be part of a raid array: level=raid1 devices=2 ctime=Thu Dec 10 20:52:02 2020 Continue creating array? Y #提示建立是否继续,是Y mdadm: Fail to create md0 when using /sys/module/md_mod/parameters/new_array, fallback to creation via node mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
注意:建立过程,有提示这个阵列不适合做为启动盘的信息,这个是因为超级块类型决定的,超级块的类型可使用–metadata选项设置,默认是1.2,只有这个值不大于1.0时才能够做为启动盘
四、检查建立的RAID详细信息和运行状态分布式
[root@lab-236 ~]# mdadm --detail /dev/md0 #查看RAID详细信息 /dev/md0: Version : 1.2 Creation Time : Fri Dec 11 16:46:33 2020 Raid Level : raid1 Array Size : 5237760 (5.00 GiB 5.36 GB) Used Dev Size : 5237760 (5.00 GiB 5.36 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Fri Dec 11 16:46:59 2020 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Consistency Policy : resync Name : lab-236.com:0 (local to host lab-236.com) UUID : 52f68880:b4d10435:d271aaa2:261ed9cb Events : 17 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 18 1 active sync /dev/sdb2
[root@lab-236 ~]# cat /proc/mdstat #查看运行状态 Personalities : [raid1] md0 : active raid1 sdb2[1] sdb1[0] 5237760 blocks super 1.2 [2/2] [UU] unused devices: <none>
五、建立好RAID分区,接下来就是格式化文件系统,才能够被使用ide
[root@lab-236 ~]# mkfs.xfs /dev/md0 #格式化为xfs文件系统 meta-data=/dev/md0 isize=512 agcount=4, agsize=327360 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=1309440, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
六、挂载RAID分区到指定目录,此处挂载到/mnt工具
[root@lab-236 ~]# mount /dev/md0 /mnt
经过df命令查看磁盘使用状况性能
[root@lab-236 ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 471M 0 471M 0% /dev tmpfs 488M 8.1M 480M 2% /run tmpfs 488M 0 488M 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 4.5G 12G 28% / /dev/md0 5.0G 33M 5.0G 1% /mnt #能够看到挂载成功
七、模拟磁盘故障,并修复磁盘RAID
首先咱们RAID分区挂载的目录建立一个文件测试
[root@lab-236 ~]# echo "hello world" > /mnt/hello.txt
此时咱们经过mdadm工具将一个分区(/dev/sdb1)设置为故障分区
[root@lab-236 ~]# mdadm /dev/md0 --fail /dev/sdb1 mdadm: set /dev/sdb1 faulty in /dev/md0
而后咱们在查看RAID的配置信息
[root@lab-236 ~]# mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Fri Dec 11 16:46:33 2020 Raid Level : raid1 Array Size : 5237760 (5.00 GiB 5.36 GB) Used Dev Size : 5237760 (5.00 GiB 5.36 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Fri Dec 11 17:05:32 2020 State : clean, degraded Active Devices : 1 Working Devices : 1 Failed Devices : 1 Spare Devices : 0 Consistency Policy : resync Name : lab-236.com:0 (local to host lab-236.com) UUID : 52f68880:b4d10435:d271aaa2:261ed9cb Events : 21 Number Major Minor RaidDevice State - 0 0 0 removed 1 8 18 1 active sync /dev/sdb2 0 8 17 - faulty /dev/sdb1 #此时/dev/sdb1状态时有缺陷的
咱们能够看到/dev/sdb1的状态提示为faulty,是有缺陷的,存在故障。
查看运行状况
[root@lab-236 ~]# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdb2[1] sdb1[0](F) 5237760 blocks super 1.2 [2/1] [_U] #发现超级块数量变成[2/1],缺失1个 unused devices: <none>
八、此时咱们查看挂载目录中文件是否正常
[root@lab-236 ~]# cat /mnt/hello.txt hello world
咱们发现文件正常,这就是RAID1的容错能力,一块磁盘出现故障,不影响数据文件的继续使用
九、接下来咱们修复RAID
首先咱们要将已经有缺陷的磁盘分区移除
[root@lab-236 ~]# mdadm /dev/md0 --remove /dev/sdb1 mdadm: hot removed /dev/sdb1 from /dev/md0
而后咱们将购买的新磁盘,添加到这个RAID中,若是实际物理环境中,直接将物理磁盘换上,添加便可,这里咱们模拟环境。就当/dev/sdb1修复后从新添加回去
[root@lab-236 ~]# mdadm /dev/md0 --add /dev/sdb1 mdadm: added /dev/sdb1
此时咱们查看RAID信息,能够看到新加入的磁盘正在进行spare rebuilding RAID,这个过程须要时间,时间的长短与空间数据大小有关
[root@lab-236 ~]# mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Fri Dec 11 16:46:33 2020 Raid Level : raid1 Array Size : 5237760 (5.00 GiB 5.36 GB) Used Dev Size : 5237760 (5.00 GiB 5.36 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Fri Dec 11 17:24:08 2020 State : clean, degraded, recovering Active Devices : 1 Working Devices : 2 Failed Devices : 0 Spare Devices : 1 Consistency Policy : resync Rebuild Status : 57% complete Name : lab-236.com:0 (local to host lab-236.com) UUID : 52f68880:b4d10435:d271aaa2:261ed9cb Events : 41 Number Major Minor RaidDevice State 2 8 17 0 spare rebuilding /dev/sdb1 1 8 18 1 active sync /dev/sdb2
总结:
一、配置过程若是此前建立过软RAID,须要先将原来RAID设备中止
mdadm --stop /dev/md0
若是不中止会出现以下错误:mdadm: cannot open /dev/sdb1: Device or resource busy二、若是要重建软RAID,步骤应以下:一、先卸载目录二、中止RAID设备三、移除RAID设备中的磁盘