- RAID:Redundant Arrays of Inexpensive Disks/廉价冗余磁盘阵列
- 后来改成:Redundant Arrays of Independent Disks/独立冗余磁盘阵列
- Berkeley大学一位教授的一篇论文:A case for Redundant Arrays of Inexpensive Disks RAID
- 提高IO能力:通过磁盘并行读写实现
- 提高耐用性:通过磁盘冗余来实现
- 级别:多块磁盘组织在一起的工作方式有所不同
- RAID的实现方式:
- 外接式磁盘阵列:通过扩展卡提供适配能力
- 内接式RAID:主板集成RAID控制器
- Software RAID:通过软件的方式提供RAID
- 级别:Level
- 级别没有好坏高低之分,仅仅表示磁盘组织形式上的不同
- RAID-0:以0表示,又叫条带卷/strip
-
-
- 读写性能提升
- 可用空间:N*min(s1,s2...)
- 无容错能力
- 最少磁盘数:2
- RAID-1:以1表示,又叫镜像卷/mirror
-
-
-
- 读性能提升,写性能略有下降
- 可用空间:1*min(s1,s2...)
- 有容错能力
- 最少磁盘数:2
-
-
- RAID-2,3,4不常用
- RAID-4:
- RAID-2,3,4不常用
-
-
- 第三块盘存放校验码,一般为前两块盘数据的异或
- 允许坏掉一块盘
- 但是校验盘的IO容易成为系统瓶颈
-
-
- RAID-5:
-
-
- 与RAID-4类似,但是轮流做校验盘
- 读写性能提升
- 可用空间:(N-1)*min(s1,s2...)
- 有容错能力:1块磁盘
- 最少磁盘数:3
-
-
- RAID-6:
-
-
- 用两块磁盘做校验盘
- 读写性能提升
- 可用空间:(N-2)*min(s1,s2...)
- 有容错能力:2块磁盘
- 最少磁盘数:4
-
以下为混合类型的RAID:
-
- RAID10
-
-
- 先组织成RAID-1,再组织成RAID-0
- 读写性能提升
- 可用空间:N*min(s1,s2...)/2
- 有容错能力:每组镜像最多只能坏一块
- 最少磁盘数:4
-
-
- RAID01
-
-
- 先组织成RAID-0,再组织成RAID-1
- RAID01不好,因为每组坏一块的概率还是比较大的,此时数据就损坏了;而RAID10中,只要不是一组中的两个磁盘同时坏了,数据就不会损坏
- RAID50
- 先组织成RAID5,再组织成RAID-0
- RAID-7:某公司的产品,IO性能特别好,但是价格特别贵
- JBOD:Just a Bunch Of Disks
- 将多块磁盘的空间合并成一个大的连续空间使用
- 可用空间:sum(s1,s2...)
- 常用级别:RAID-0,RAID-1,RAID-5,RAID-10,RAID-50,JBOD
-
- 实现方式
- 硬件实现方式
- 软件实现方式:在生产环境中,不会用软RAID
- CentOS 6上的软件RAID的实现
- 结合内核中的md模块(multi disks)
- mdadm:模式化的工具
- mdadm [mode] <raid device> [options] <component devices>
- 支持的RAID级别:LINEAR(类似JBOD),RAID-0,RAID-1,RAID-4,RAID-5,RAID-6,RAID-10,等等
- raid device:/dev/md#
- 查看当前系统中是否存在md设备:
- cat /proc/mdstat
- ls /dev | grep "md"
- 查看当前系统中是否存在md设备:
- component devices:任意块设备
- 模式/mode:
- 创建模式:-C
- options
- -n #:使用#个块设备来创建此RAID
- -l #:指明要创建的RAID的级别
- -a {yes | no}:是否自动创建目标RAID设备的设备文件
- -c CHUNK-SIZE:指明块大小
- -x #:指明冗余或空闲盘的个数
- 例如:创建一个10G空间的RAID-5
- mdadm -C /dev/md0 -a yes -n 3 -x 1 -l 5 /dev/sda{7,8,9,10}
- 创建完以后,格式化:mke2fs -t ext4 /dev/md0
- 格式化完以后,挂载:mount /dev/md0 /mydata
- 往/mydata里写文件,就会按照RAID的模式工作了
- options
- 装配模式:-A
- 监控模式:-F 管理模式:-f,-r,-a
- -f:标记损坏,例如:mdadm /dev/md0 -f /dev/sda7 (此时上面创建的RAID5就会利用空闲盘自动修复了,再坏一块磁盘也是没有问题的,降级使用,即两个磁盘工作,没有校验盘了)
- -r:移除坏的磁盘,例如:mdadm /dev/md0 -r /dev/sda7
- -a:添加一个磁盘,例如:mdadm /dev/md0 -a /dev/sda7
- 查看详细信息:-D,例如:mdadm -D /dev/md0
- 停止md设备:-S,例如:mdadm -S /dev/md0
- 补充:watch -n# COMMAND:每隔#秒刷新一下命令结果,例如:watch -n1 'ifconfig etho',再例如:watch -n1 'cat /proc/mdstat'
- 创建模式:-C
- CentOS 6上的软件RAID的实现
练习1:创建一个可用空间为10G的RAID1设备,要求其chunk大小为128k(默认为512k),文件系统为ext4,有一个空闲盘,开机可自动挂载至/backup目录
练习2:创建一个可用空间为10G的RAID10设备,要求其chunk大小为256k(默认为512k),文件系统为ext4,开机可自动挂载至/mydata目录
注:RAID不能代替备份策略,RAID可以保证磁盘损坏后不影响系统运行,但是无法阻止人为错误引起的数据丢失,比如不小心删除,所以备份数据依然是要有的