-
RAID是什么
RAID 即是磁盘阵列,全名为Redundant Array of Independent Disks 容错独立磁盘阵列 ,是通过一些技术(软件或硬件)将多个较小的磁盘整合成为一个较大的磁盘设备;不仅可以存储数据,还可以保护数据。
RAID 的由来
时势造英雄,很多东西的由来都是因为需要,当时硬盘的容量也就是几十GB,而且性能还很差,为了提高计算机的运算性能,迫切需要一个高性能大容量的硬盘,此时1987由加利福尼亚大学伯克利分校(University of California-Berkeley),发表了:“A Case for Redundant Arrays of Inexpensive Disks”。文章中,谈到了RAID这个词汇,而且定义了RAID的5层级。 另外,研究小组也设计出容错(fault-tolerance),逻辑数据备份(logical data redundancy),而产生了RAID理论。研究初期,便宜(Inexpensive)的磁盘也是主要的重点,但后来发现,大量便宜磁盘组合并不能适用于现实的生产环境,后来Inexpensive被改为independent,许多独立的磁盘组。
磁盘阵列的优点
数据的安全与可靠性:指的并非信息安全,而是当硬件损毁时,数据还可以 安全救援或只用。
读写性能:例如RAID 0可以提高读写性能,让系统I/O可以得到改善
容量:可以把多块磁盘组合起来,让单一文件系统可以有相当大的容量。
-
RAID的level
由于组合方式不同,raid 又分为不同的等级,例如level 0,1,2,3,4,5,6,7,10,50, (数字仅表示不同的组合方式,不代表优先级)但常用的 也就是 0, 1 ,5 还有 1与0的组合 10或者01 下表提供了6个raid级别的简单定义,大家先有个大概印象,后面我们会详细说明
①RAID 0 (硬盘分段)
数据按系统规定的chunk 为单位依次写入多块磁盘,因此它的读写性能很高,但没有容错能力 ,即任何一块磁盘坏了,数据 就丢失了,而且多块磁盘组合,损坏的几率大大增大。但磁盘利用率为100%
②RAID 1(磁盘镜像)
它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据,这样它的写入性能没有提高,因为同样的数据要存储多次,但提供了百分之百的数据冗余,两个磁盘互为镜像,所以无论哪个磁盘坏了,都不会影响数据的读取,因此容错性能非常好,并可以提高读数据的速度;但缺点就是需要双份硬盘,因此价格较高。磁盘利用率只有50%
③ RAID 4
将数据条块化并分布于不同的磁盘上,但使用一块磁盘作为校验盘,每次写操作都需要访问校验盘,这时校验盘会成为写操作的瓶颈,因此RAID 4在商业环境中也很少使用。如图所示。disk 3 压力会很大,每次读写数据都要访问,容易损坏。
④RAID 5
数据存储和raid 4 基本一样,只是校验值不在放在一个固定的磁盘上了,而是轮流放在每个磁盘上,这样每块磁盘的压力 就一样了。
raid 4 和raid 5 一样只允许一块磁盘损坏,有一块磁盘损坏是,数据还可以读取,但读取速度较慢,而且这是还会增大其他磁盘损坏的几率,当有一块磁盘损坏时,应立即换取下这块坏磁盘,换一块好的。
⑤RAID 10 或01
raid 0 性能好但是数据不安全,raid 1 的数据安全但是性能不佳,于是就产生了 10 组合 或是 01组合 。
raid 01: 就是先让两块磁盘组成raid 0而且这样的组合有两组,再把这两组raid 0 组合成raid 1 。
raid 10 就是先组合RAID 1 在组合RAID 0
由于RAID 0 的优点,性能得以提升,由于RAID 1 的优点,数据的已备份,但也有与RAID 1 的缺点,容量会少一半用来备份。
-
RAID的实现方式
硬件磁盘阵列:
通过磁盘阵列卡来完成数组的目的,磁盘阵列卡上有一个专门的芯片来处理RAID的任务,内核不会识别各个磁盘,内核中识别阵列卡。不会重复消耗原本系统的I/O总线,性能比较好,但是磁盘阵列卡价格有点贵 。因此就产生了软件磁盘阵列。在blos界面配置。操作系统装在RAID上。但内核要可以识别RAID.设别文件名为/dev/sd[a-p].
软件磁盘阵列:
利用软件来仿真磁盘阵列的功能,但会消耗过多的系统资源,例如cpu的运算与I/O总线的资源。硬盘直接连在主板上,且内核能识别每一块磁盘。MD会把内核识别的磁盘再次封装成RAID,输入到用户空间。因此设别名为/dev/md0,/dev/md1 .不过现在我们的计算机速度都很快,这些速度限制已不再是问题,所以 我们下面就玩玩软件磁盘阵列。
-
软件磁盘阵列的设置
mdadm软件在用户空间提供一个程序,可以配置raid,把我们的命令送给MD模块,并组织对应的磁盘设备,成为软RAID.
mdadm的配置文件在/etc/mdadm.conf
设备被识别为/dev/md0 /dev/md1
mdadm 可以把底层的块设备组成软RAID
底层块设别 可以是整块磁盘也可以是分区 但如果使用的是分区 创建RAID 1意义就不打了,就一块磁盘 ,磁盘坏了,数据备份多少次都没意义了。但我们做实验可以用分区,来练习一下。
mdadm可以创建的级别有RAID 0 ,RAID 1 ,RAID 4 ,RAID 5 ,RAID 6,RAID 10
还有 linear 模式 即是线性模式,存满一块磁盘再存另外一块磁盘。
格式:
mdadm [mode] <raiddevice> [options] <component-devices>
modes :
assemble 装配模式 -A
create 创建模式 -C
follow or monitor 监控模式 -F
grow 增长模式 -G
manage 管理模式 –add -fail –remove
<raiddevice>:
要创建的设别名,例如 /dev/md0,/dev/md1 系统默认只 有 /dev/md0 ,如果想创建 /dev/md1 要自己创建。
[options]:
不同模式下的选项意义不同
-C ,–create create a new array
-n 几块磁盘
-x 几块空闲盘 –spare-devices
-c –chunk 块大小 默认64KB 数据存储时要分为块
-l 级别 0,1,5,
-p layout 左对称 右对称 做非对称 右非对称
-a yes 自动创建 设备名。
–manage 模式下的参数有:
–fail:把后面的设备设置成出错状态
–add:将后面的设备加入到这个MD中
–remove:将后面的设备从这个MD中删除。
我们来创建一个RAID 5 来演示一下
RAID 5 的环境 :
- 利用4个分区组成RAID5;
- 每个分区约为1G,
- 把一个分区作为sparedisk
- 将RAID 5挂载到/mnt/raid目录下
1、构建所需的磁盘设备
用fdisk创建5个1G的分区 类型改为fd
- #fdisk /dev/sdb
- /dev/sdb5 1 123 987934+ fd Linux raid autodetect
- /dev/sdb6 124 246 987966 fd Linux raid autodetect
- /dev/sdb7 247 369 987966 fd Linux raid autodetect
- /dev/sdb8 370 492 987966 fd Linux raid autodetect
- /dev/sdb9 493 615 987966 fd Linux raid autodetect
- #partprobe
2、以mdadm创建RAID
- [root@localhost ~]# mdadm -C /dev/md0 -a yes -l 5 -n 4 -x 1 /dev/sdb5 /dev/sdb6 /dev/sdb7 /dev/sdb8 /dev/sdb9
- mdadm: array /dev/md0 started.
- [root@localhost ~]# mdadm –detail /dev/md0 #查看/dev/md0 的详细信息
- /dev/md0: #设备文件名
- Version : 0.90
- Creation Time : Wed Jun 20 19:23:34 2012 #创建时间
- Raid Level : raid5 #等级
- Array Size : 2963520 (2.83 GiB 3.03 GB) #可用容量
- Used Dev Size : 987840 (964.85 MiB 1011.55 MB)#每个设备的容量
- Raid Devices : 4 #用作RAID的设备个数
- Total Devices : 5 #总设备个数
- Preferred Minor : 0
- Persistence : Superblock is persistent
- Update Time : Wed Jun 20 19:24:20 2012
- State : clean
- Active Devices : 4 #启用的设备个数
- Working Devices : 5 #可用的设备个数
- Failed Devices : 0
- Spare Devices : 1 #预备的设备个数
- Layout : left-symmetric
- Chunk Size : 64K
- UUID : c4d40765:514c4618:bbdd9c4c:56d359b0
- Events : 0.4
- Number Major Minor RaidDevice State
- 0 8 21 0 active sync /dev/sdb5
- 1 8 22 1 active sync /dev/sdb6
- 2 8 23 2 active sync /dev/sdb7
- 3 8 24 3 active sync /dev/sdb8
- 4 8 25 – spare /dev/sdb9
3、格式化与挂载使用RAID 5
- #mke2fs -j /dev/md0
- #mkdir /mnt/raid
- #mount /dev/md0 /mnt/raid
- [root@localhost ~]# df
- Filesystem 1K-blocks Used Available Use% Mounted on
- /dev/mapper/vol0-root
- 29741864 5016520 23190164 18% /
- /dev/mapper/vol0-home
- 4951688 141376 4554724 4% /home
- /dev/sda1 101086 31952 63915 34% /boot
- tmpfs 517336 0 517336 0% /dev/shm
- /dev/md0 2916920 69952 2698792 3% /mnt/raid
这样RAID 5 就创建好了 可以使用了
#mke2fs -j -b 2048 -E stride=32 /dev/md0
(-b 1024 2048 4096 )
( -c默认 64k) 写明 数据分割的chunk 与磁盘的block 的关系 可以提高写入性能 -L data 卷标
扩展磁盘容量
我们现在的raid 5 的容量是4G 如果我们现在需要5G 的空间 可以再加入一块磁盘 假设/dev/sdb10是1G的可以使用
1、加入磁盘
#mdadm -a /dev/md0 /dev/sdb10
#mdadm -G /dev/md0 -n 5 -G增长模式 -n5 增加为5个设备
2、重塑文件系统边界
# resize2fs /dev/md0 默认是重塑到和物理边界一样大 也可以跟具体的容 量(3G扩展或减缩)
#df -lh 查看一下
[解释一下为什么需要重塑文件系统边界,每一个设备都有两个边界,一个是物理边界,既是物理实际的大小,另外一个是文件系统边界,既是格式化以后可以使用的边界,增长的只是物理边界,所以要重塑一下文件系统边界 ]
仿真RAID错误的救援模式
让一块磁盘坏掉,然后让sparedisk自动启用
1、先复制一些数据
#cp /etc/fstab /mnt/raid
2、假设/dev/sdb5 坏了
#mdadm –manage /dev/md0 –fail (-f) /dev/sdb5
- [root@localhost ~]# mdadm –detail /dev/md0
- /dev/md0:
- Version : 0.90
- Creation Time : Wed Jun 20 19:23:34 2012
- Raid Level : raid5
- Array Size : 2963520 (2.83 GiB 3.03 GB)
- Used Dev Size : 987840 (964.85 MiB 1011.55 MB)
- Raid Devices : 4
- Total Devices : 5
- Preferred Minor : 0
- Persistence : Superblock is persistent
- Update Time : Wed Jun 20 20:22:01 2012
- State : clean, degraded, recovering
- Active Devices : 3
- Working Devices : 4
- Failed Devices : 1
- Spare Devices : 1
- Layout : left-symmetric
- Chunk Size : 64K
- Rebuild Status : 1% complete
- UUID : c4d40765:514c4618:bbdd9c4c:56d359b0
- Events : 0.6
- Number Major Minor RaidDevice State
- 4 8 25 0 spare rebuilding /dev/sdb9
- 1 8 22 1 active sync /dev/sdb6
- 2 8 23 2 active sync /dev/sdb7
- 3 8 24 3 active sync /dev/sdb8
- 5 8 21 – faulty spare /dev/sdb5
可以看到/dev/sdb9 已经启用 在重建数据
或者使用 watch -n1 ‘cat /proc/mdstat’
一段时间后 数据重建好了
- 0 8 25 0 active sync /dev/sdb9
- 1 8 22 1 active sync /dev/sdb6
- 2 8 23 2 active sync /dev/sdb7
- 3 8 24 3 active sync /dev/sdb8
- 4 8 21 – faulty spare /dev/sdb5
将出错的磁盘删除并加入新的磁盘
#mdadm –manage /dev/md0 –add /dev/sdb10 –remove (-r) /dev/sdb5
这一切都可以在开机的状态下进行 不影响正常操作
开机自动启动RAID并自动挂载
设置mdadm的配置文件
[root@localhost ~]# mdadm –detail (-D)/dev/md0 |grep -i uuid
UUID : c4d40765:514c4618:bbdd9c4c:56d359b0
[root@localhost ~]# vim /etc/mdadm.conf
ARRAY /dev/md0 UUID=4d40765:514c4618:bbdd9c4c:56d359b0e
设置开机自动挂载
#vim /etc/fstab
/dev/md0 /mnt/raid ext3 defaults 1 2
#umount /dev/md0
#mount -a 测试一下是否可以挂载
#df 查看
关闭软件RAID
1、先卸载并删除配置文件 并删除/etc/fstab 中刚写入的那行
2、直接关闭
#mdadm –stop(-S) /dev/md0
3、重新启用
[root@localhost ~]# mdadm -A /dev/md0 /dev/sdb{6,7,8,9}
4、将md0的信息保存到配置文件里
[root@localhost ~]# mdadm –examine –scan >>/etc/mdadm.conf
[root@localhost ~]# cat /etc/mdadm.conf
ARRAY /dev/md0 UUID=4d40765:514c4618:bbdd9c4c:56d359b0e
ARRAY /dev/md0 level=raid5 num-devices=4 UUID=c4d40765:514c4618:bbdd9c4c:56d359b0
拙笔小结,望路过的多多指教。
转载于:https://blog.51cto.com/5122542/904914
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/110382.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...