写在前面:
博客书写牢记5W1H法则:What,Why,When,Where,Who,How。
本篇主要内容:
● RAID简介及各RAID级别特点
● 软RAID的创建使用
RAID简介
最早时候RAID为Redundant Arrays of Inexpensive Disks,即廉价磁盘冗余阵列;后将Inexpensive替换为Independent,即独立磁盘冗余阵列。
优势:
(1)易于灵活的进行容量扩展
(2)“虚拟化”使可管理性极大的增强
(3)“磁盘分块”技术带来性能提高
(4)通过冗余、热备、热换提高可靠性
磁盘冗余:
(1)镜像冗余使用磁盘镜像技术;
(2)磁盘镜像是一个简单的设备虚拟化技术,每个I/O操作都会在两个磁盘上执行;
(3)磁盘冗余可提高磁盘的读性能
校验冗余:
(1)根据冗余算法计算阵列中成员磁盘上数据校验信息,将校验信息保存在其他的磁盘资源上;
(2)保证磁盘可靠性;
(3)和镜像冗余比较,校验冗余的开销更小
异或算法(XOR);
相同为假,不同为真
特点:
提高IO能力
磁盘并行读写
提高耐用性
磁盘冗余来实现
级别:多块磁盘组织在一起的工作方式不尽相同
RAID的实现方式:
(1)外接式磁盘阵列:通过扩展卡提供适配能力
(2)内接式RAID:主板集成RAID控制器
(3)Software RAID:消耗主机资源,IO大时严重影响主机性能。
RAID级别:
组成RAID阵列的不同方式,不同RAID级别:
不同的存储性能;
不同的数据可靠性;
不同的存储成本
RAID 0:条带式数据分布在各个磁盘上,strip
RAID 1:以镜像为冗余方式,mirror
RAID 3:数据块划分为更小的块并行传输到各个成员磁盘,计算的XOR校验放到专用校验磁盘上
RAID 5:独立存取,校验信息均匀分散到阵列的各个磁盘上
RAID 10:先镜像,再整体条带
RAID 50:先RAID5,再整体条带
补充:JBOD(Just a Bunch Of Disks)可实现多块磁盘合并为一个大的连续空间。
RAID级别 | RAID 0 | RAID 1 | RAID 3 | RAID 5 | RAID 10 | |
别名 | 条带 | 镜像 | 专用奇偶位条带 | 分布奇偶位条带 | 镜像阵列条带 | |
容错性 | 无 | 有 | 有 | 有 | 有 | |
冗余类型 | 无 | 镜像 | 奇偶校验 | 奇偶校验 | 镜像 | |
备盘 | 无 | 有 | 有 | 有 | 有 | |
读性能 | 高 | 较单盘略高 | 高 | 高 | 中 | |
随机写性能 | 高 | 低,叫单盘差不多 | 最低,比单盘还低 | 低 | 中 | |
连续写 | 高 | 低 | 低 | 低 | 中 | |
磁盘数 | 2+ | 2N,N>=1 | 3+ | 3+ | 2N,N>=2 | |
可用容量 | 全部N | 50% | N-1 | N-1 | 50% |
软RAID实现:
mdadm(MD adm)
manage MD devices aka Linux Software RAID
mdadm [mode] <raiddevice> [options] <component-devices>
-C, --create:创建模式
-n #: 使用#个活动块设备来创建此RAID;
-l #:指明要创建的RAID的级别;
-a {yes|no}:自动创建目标RAID设备的设备文件;
-c CHUNK_SIZE: 指明块大小;4K整数倍
-x #: 指明空闲盘(替补盘)的个数;
-D:显示raid的详细信息;
mdadm -D /dev/md#
-A, --assemble:装配
-F, --follow, --monitor:监控
-S, --stop:停用MD设备,释放所有磁盘
mdadm -S /dev/md#
管理模式
-f, --force:标记指定磁盘为坏
-a, --add:添加磁盘
-r, --remove:移除磁盘
<raiddevice>: /dev/md#
<component-devices>: 任意块设备或分区
观察MD状态:
cat /proc/mdstat
watch
-n #:刷新间隔,单位为秒
watch -n# `COMMAND`
实例:
#创建5个100M大小的磁盘分区,修改分区类型为fd(Linux raid auto)
[[email protected] ~]# fdisk /dev/sda ...省略步骤...记得修改分区类型为fd [[email protected] ~]# partx -a /dev/sda [[email protected] ~]# fdisk -l /dev/sda ...省略部分输出...看重点 /dev/sda5 8513 8526 112423+ fd Linux raid autodetect /dev/sda6 8527 8540 112423+ fd Linux raid autodetect /dev/sda7 8541 8554 112423+ fd Linux raid autodetect /dev/sda8 8555 8568 112423+ fd Linux raid autodetect /dev/sda9 8569 8582 112423+ fd Linux raid autodetect
#创建MD设备/dev/md0,其中4块活动设备,RAID级别为5,自动创建,tunck大小为1M,1块备用盘,使用/dev/sda5-9 5块盘分区
[[email protected] ~]# mdadm -C /dev/md0 -n 4 -l 5 -a yes -c 1M -x 1 /dev/sda{5,6,7,8,9} mdadm: /dev/sda5 appears to contain an ext2fs file system size=5253220K mtime=Tue Mar 15 13:50:48 2016 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. [[email protected] ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Tue Mar 15 19:19:04 2016 Raid Level : raid5 Array Size : 328704 (321.05 MiB 336.59 MB) Used Dev Size : 109568 (107.02 MiB 112.20 MB) Raid Devices : 4 Total Devices : 5 Persistence : Superblock is persistent Update Time : Tue Mar 15 19:19:15 2016 State : clean Active Devices : 4 Working Devices : 5 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 1024K Name : localhost.localdomain:0 (local to host localhost.localdomain) UUID : b477152a:6867fa49:d72e3b5c:efbe2709 Events : 18 Number Major Minor RaidDevice State 0 8 5 0 active sync /dev/sda5 1 8 6 1 active sync /dev/sda6 2 8 7 2 active sync /dev/sda7 5 8 8 3 active sync /dev/sda8 4 8 9 - spare /dev/sda9
#格式化并挂载使用,存入文件
[[email protected] ~]# mkfs.ext4 /dev/md0 ...省略输出... [[email protected] ~]# mkdir /mnt/md0 [[email protected] ~]# mount /dev/md0 /mnt/md0 [[email protected] ~]# cd /mnt/md0 [[email protected] md0]# dd if=/dev/zero of=datafile bs=1M count=100 100+0 records in 100+0 records out 104857600 bytes (105 MB) copied, 0.287878 s, 364 MB/s [[email protected] md0]# ls -l total 102413 -rw-r--r-- 1 root root 104857600 Mar 15 19:26 datafile drwx------ 2 root root 12288 Mar 15 19:20 lost+found
#查看可用空间:(4-1)*100M=300M
[[email protected] md0]# df -h /dev/md0 Filesystem Size Used Avail Use% Mounted on /dev/md0 303M 103M 185M 36% /mnt/md0
#制坏其中一块活动设备,备用设备立即启用。查看数据无损失
[[email protected] md0]# mdadm /dev/md0 -f /dev/sda8 mdadm: set /dev/sda8 faulty in /dev/md0 [[email protected] md0]# mdadm -D /dev/md0 ...省略部分输出... State : clean Active Devices : 4 Working Devices : 4 Failed Devices : 1 Spare Devices : 0 ...省略部分输出... Number Major Minor RaidDevice State 0 8 5 0 active sync /dev/sda5 1 8 6 1 active sync /dev/sda6 2 8 7 2 active sync /dev/sda7 4 8 9 3 active sync /dev/sda9 5 8 8 - faulty /dev/sda8 [[email protected] md0]# ls -lh total 101M -rw-r--r-- 1 root root 100M Mar 15 19:26 datafile drwx------ 2 root root 12K Mar 15 19:20 lost+found
#继续制坏
[[email protected] md0]# mdadm /dev/md0 -f /dev/sda9 mdadm: set /dev/sda9 faulty in /dev/md0 [[email protected] md0]# mdadm -D /dev/md0 ...省略部分输出...状态变成了clean,degraded State : clean, degraded Active Devices : 3 Working Devices : 3 Failed Devices : 2 Spare Devices : 0 ...省略部分输出... Number Major Minor RaidDevice State 0 8 5 0 active sync /dev/sda5 1 8 6 1 active sync /dev/sda6 2 8 7 2 active sync /dev/sda7 6 0 0 6 removed 4 8 9 - faulty /dev/sda9 5 8 8 - faulty /dev/sda8
#移除制坏的设备
[[email protected] md0]# mdadm /dev/md0 -r /dev/sda9 mdadm: hot removed /dev/sda9 from /dev/md0 [[email protected] md0]# mdadm /dev/md0 -r /dev/sda8 mdadm: hot removed /dev/sda8 from /dev/md0 [[email protected] md0]# mdadm -D /dev/md0 ...省略部分输出... State : clean, degraded Active Devices : 3 Working Devices : 3 Failed Devices : 0 Spare Devices : 0 ...省略部分输出... Number Major Minor RaidDevice State 0 8 5 0 active sync /dev/sda5 1 8 6 1 active sync /dev/sda6 2 8 7 2 active sync /dev/sda7 6 0 0 6 removed
#做数据改动
[[email protected] md0]# dd if=/dev/zero of=datafile2 bs=1M count=80 80+0 records in 80+0 records out 83886080 bytes (84 MB) copied, 0.1969 s, 426 MB/s [[email protected] md0]# ls -lh total 181M -rw-r--r-- 1 root root 100M Mar 15 19:26 datafile -rw-r--r-- 1 root root 80M Mar 15 19:41 datafile2 drwx------ 2 root root 12K Mar 15 19:20 lost+found
#模拟添加新硬盘,查看同步状态
[[email protected] md0]# mdadm /dev/md0 -a /dev/sda9 mdadm: added /dev/sda9 [[email protected] md0]# mdadm /dev/md0 -a /dev/sda8 mdadm: added /dev/sda8 [[email protected] md0]# mdadm -D /dev/md0 ...省略部分输出...状态变成了clean, degraded, recovering State : clean, degraded, recovering Active Devices : 3 Working Devices : 5 Failed Devices : 0 Spare Devices : 2 ...省略部分输出... Rebuild Status : 72% complete ...省略部分输出... Number Major Minor RaidDevice State 0 8 5 0 active sync /dev/sda5 1 8 6 1 active sync /dev/sda6 2 8 7 2 active sync /dev/sda7 4 8 9 3 spare rebuilding /dev/sda9 5 8 8 - spare /dev/sda8
#稍后片刻,同步数据完成
[[email protected] md0]# mdadm -D /dev/md0 ...省略部分输出... State : clean Active Devices : 4 Working Devices : 5 Failed Devices : 0 Spare Devices : 1 ...省略部分输出... Number Major Minor RaidDevice State 0 8 5 0 active sync /dev/sda5 1 8 6 1 active sync /dev/sda6 2 8 7 2 active sync /dev/sda7 4 8 9 3 active sync /dev/sda9 5 8 8 - spare /dev/sda8
#实验完成,打扫战场。/dev/md0会自动消失的
[[email protected] ~]# umount /dev/md0 [[email protected] ~]# mdadm -S /dev/md0 mdadm: stopped /dev/md0
#如果后悔了,现在还能装载回来
[[email protected] ~]# mdadm -A /dev/md0 /dev/sda{5..9} mdadm: /dev/md0 has been started with 4 drives and 1 spare. [[email protected] ~]# mount /dev/md0 /mnt/md0 [[email protected] ~]# ls /mnt/md0 datafile datafile2 lost+found