RAID:
old Redundant Arrays of Inexpensive Disks (廉价磁盘冗余阵列)
new Redundant Arrays of Independent Disks (独立磁盘冗余阵列)
Berkeley: A case for Redundent Arrays of Inexpensive Disks RAID
功能: 提高IO能力:磁盘并行读写; 提高耐用性:磁盘冗余来实现。但是raid不能取代数据备份,raid只是减少磁盘对于数据的影响。人为操作数据无法恢复。
级别:多块磁盘组织在一起的工作方式有所不同;
RAID实现的方式: 外接式磁盘阵列:通过扩展卡提供适配能力 内接式RAID:主板集成RAID控制器 Software RAID:
级别:level
RAID-0:0, 条带卷,strip;
RAID-1: 1, 镜像卷,mirror;
RAID-2
..
RAID-5:
RAID-6
RAID10
RAID01
RAID-0: 读、写性能提升; 可用空间:N*min(S1,S2,...)(所有磁盘中的最小值,下同) 无容错能力 最少磁盘数:2, 2+
RAID-1: 读性能提升、写性能略有下降; 可用空间:1*min(S1,S2,...) 有冗余能力 最少磁盘数:2, 2+
RAID-4: 1101, 0110, 1011 (对应位做亦或计算,相同得0,相反得1) 第三块做校验盘。 如果一块坏了,那就是降级进行使用。缺陷:单块盘做检验盘,该盘压力过大,是性能瓶颈。 改进方案:使用一块盘做空闲盘,热备
RAID-5: 读、写性能提升。 可用空间:(N-1)*min(S1,S2,...) 有容错能力:1块磁盘 最少磁盘数:3, 3+, 原理同raid4,也可有热备盘,与raid4区别,三块盘轮流做检验盘,有左对称和右对称方案; 多块盘做亦或运算,结果存放到校验盘,X1亦或X2亦或X3亦或X4
RAID-6: 读、写性能提升 可用空间:(N-2)*min(S1,S2,...) 有容错能力:2块磁盘 循环校验 最少磁盘数:4, 4+
- RAID-10: 读、写性能提升 可用空间:N*min(S1,S2,...)/2 有容错能力:每组镜像最多只能坏一块; 最少磁盘数:4, 4+
- RAID-01: 先做raid0,在做raid1,容错性没有raid10好。
- RAID-50,先做raid5再做raid0,最小磁盘数和raid5划分有关。
- RAID7:商业公司自己开发的,性能不错价格昂贵
- JBOD:Just a Bunch Of Disks 功能:将多块磁盘的空间合并一个大的连续空间使用,可以存放大型单个文件。可用空间:sum(S1,S2,...)
- 常用级别:RAID-0, RAID-1, RAID-5, RAID-10, RAID-50, JBOD
- 选择Raid级别:RAID 012345 到底哪一种适合你,不只是成本问题,容错功能和传输性能的考虑以及未来之可扩充性都应该符合应用的需求。
实现方式:
硬件实现方式
-
软件实现方式
CentOS 6上的软件RAID的实现:结合内核中的md(multi devices)
mdadm:模式化的工具
命令的语法格式:mdadm [mode] <raiddevice> [options] <component-devices>
支持的RAID级别:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10;
模式:
创建:-C
装配: -A
监控: -F
管理:-f, -r, -a <raiddevice>: /dev/md#
<component-devices>: 任意块设备 -C: 创建模式
-n #: 使用#个块设备来创建此RAID;
-l #:指明要创建的RAID的级别;
-a {yes|no}:自动创建目标RAID设备的设备文件;
-c CHUNK_SIZE: 指明块大小;
-x #: 指明空闲盘的个数; 例如:创建一个6G可用空间的RAID5;
]# fdisk -l ##查看硬盘分区
新添加一块硬盘sdb
]# fdisk /dev/sdb ##进行硬盘分区,做raid5至少需要三块盘,热备需要第四块,分区完成后需要修改分区系统id,修改成软raid的id:fd。
]# partx /dev/sdb
# 1: 63- 6313544 ( 6313482 sectors, 3232 MB)
# 2: 6313545- 12627089 ( 6313545 sectors, 3232 MB)
# 3: 12627090- 18940634 ( 6313545 sectors, 3232 MB)
# 4: 18940635- 41929649 ( 22989015 sectors, 11770 MB)
# 5: 18940698- 25254179 ( 6313482 sectors, 3232 MB)
]# mdadm -C /dev/md0 -n 3 -l 5 -a yes /dev/sdb1 /dev/sdb2 /dev/sdb3
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
]# cat /proc/partitions ##创建完分区后可以再分区表中看到此分区。
major minor #blocks name
8 0 20971520 sda
8 1 512000 sda1
8 2 10240000 sda2
8 3 1048576 sda3
8 4 1 sda4
8 5 1048576 sda5
8 6 8119296 sda6
8 16 20971520 sdb
8 17 3156741 sdb1
8 18 3156772 sdb2
8 19 3156772 sdb3
8 20 1 sdb4
8 21 3156741 sdb5
9 0 6308864 md0
]# mke2fs -t ext4 /dev/md0 ##对此分区进行格式化
mke2fs 1.41.12 (17-May-2010)
文件系统标签=
操作系统:Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
394352 inodes, 1577216 blocks
78860 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=1619001344
49 block groups
32768 blocks per group, 32768 fragments per group
8048 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
This filesystem will be automatically checked every 26 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
]# mdadm -D /dev/md0 ##查看该raid详情
/dev/md0:
Version : 1.2
Creation Time : Sat Dec 10 09:50:50 2016
Raid Level : raid5 ##级别
Array Size : 6308864 (6.02 GiB 6.46 GB) ##阵列大小
Used Dev Size : 3154432 (3.01 GiB 3.23 GB) ##分区大小
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Sat Dec 10 09:52:48 2016
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric ##左对称
Chunk Size : 512K ##Chunk(块)大小
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : 13a8fd25:5be7dd96:4c771ae8:74ac609b
Events : 18
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 18 1 active sync /dev/sdb2
3 8 19 2 active sync /dev/sdb3
-D:显示raid的详细信息;
mdadm -D /dev/md#
管理模式:
-f: 标记指定磁盘为损坏;
-a: 添加磁盘
-r: 移除磁盘
观察md的状态:
cat /proc/mdstat
停止md设备:
mdadm -S /dev/md#
]# mkdir /mydata
]# mount /dev/md0 /mydata/
]# cp /etc/fstab .
]# ls
fstab lost+found
]# mdadm /dev/md0 -f /dev/sdb3
mdadm: set /dev/sdb3 faulty in /dev/md0
]# cat /proc/mdstat ##可以看到有一块盘已经丢失
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb3[3](F) sdb2[1] sdb1[0]
6308864 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
unused devices: <none>
]# cat /mydata/fstab ##发现文件依然可以访问
#
# /etc/fstab
# Created by anaconda on Sat Dec 10 05:24:03 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=c4bee2fc-f632-4c0d-ad60-a70097b85da1 / ext4 defaults 1 1
UUID=99a8652d-1f4d-4798-8054-443ffb502393 /boot ext4 defaults 1 2
UUID=62afe289-b0a8-4fdd-b6e2-9701f59f5d36 /home ext4 defaults 1 2
UUID=d7bfc5f4-5a4c-4432-ad7a-abe6ea722c32 /var ext4 defaults 1 2
UUID=2293a8a9-530c-42d4-a5c8-846f23ed69c7 swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
]# mdadm /dev/md0 -a /dev/sdb5 ##添加一个分区
mdadm: added /dev/sdb5
]# cat /proc/mdstat ##正在恢复分区。
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb5[4] sdb3[3](F) sdb2[1] sdb1[0]
6308864 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
[=====>...............] recovery = 25.5% (806924/3154432) finish=1.3min speed=28818K/sec