Linux RAID部署
欢迎来到 来到大浪涛天的博客 !
一、Linux RAID部署
1. RAID简介
RAID的出现最开始是由于scsi硬盘的兴起,当很多SCSI硬盘的出现的时候,之前的IDE的硬盘缺点开始展现,比如硬盘容易故障,速度较低等等。但是相对于SCSI硬盘来说,IDE的硬盘便宜,适合中小型用户大量使用。
于是伯克利大学的一个教授出版了一个专题: A Case for Reundundent Arrays of Inexpenive Disks RAID。随着RAID的技术的发展,以及RAID它扩展了单块硬盘的速度和安全方面的局限性,让RAID广泛流行,
2. RAID的优势及实现的方式
- 提高IO能力,磁盘并行读写;
- 提高耐用性,磁盘冗余来实现;
- 各种级别:多块硬盘组织在一起实现的工作方式有所不同;
- RAID的实现方式:
- 外接式磁盘阵列:通过扩展卡提供适配能力,扩展卡包含有独立的cpu和内存及BBU,当有数据存储的时候是先存储到内存在写入硬盘,所以BBU异常的重要,当数据写到一半关机或者停电了,BBU能够撑住将扩展卡内部内存的数据写入到硬盘。
- 内接式的RAID:主板集成RAID控制器
- Software RAID:依赖于操作系统,由内核的md模块提供模拟RAID控制器来进行冗余读写。
3. RAID 级别的介绍
- RAID0,条带卷,strip,优势如下:
- 读写性能提升;
- 可用空间:N*min(s1,s2,......),N块硬盘的容量是,最小硬盘容量的N倍
- 无容错能力,且故障率因为硬盘数量的提升而加倍增大,因为这一个严重缺陷,导致基本上无人使用RAID0
- 最少磁盘数量为2,2+
- RAID1,镜像卷,mirror,优势如下:
- 读性能提升,写的性能略有下降
- 可用空间:总的硬盘数的二分之一
- 带有容错能力
- 最少硬盘为2或者2的N倍
- RAID3和RAID4很相似,都是有一块单独的硬盘用做校验盘,其余硬盘做为数据盘来做数据存储,优势是具有冗余能力,读有提升,写的话受限于校验盘计算,有所下降,而且校验盘压力较高,性能较差。
- RAID5,RAID3和RAID4的升级版本,校验盘不局限于某块单独的硬盘,而是写数据和校验信息每块硬盘轮流写,这样把校验的压力均衡在了所有硬盘上,带来的优势有:
- 读写性能的提升
- 可用空间:(N-1)*min(s1,s2,......)
- 有容错能力:1块硬盘
- 最少磁盘数:3,3+
- RAID6和R,RAID5类似,但是它包含有两块校验盘,具有更好的容错能力
- 读、写性能提升
- 可用空间:(N-2)*min(s1,s2,......)
- 有容错能力:2块硬盘
- 最少的磁盘数:4,4+
- RAID10,先把硬盘两两分组,分别做成镜像卷,然后再做成条带化,这样既发挥了RAID0的优势性能大幅提升,又发挥了RAID1的优势,容错能力大幅提升,在每个镜像卷当中都可以损坏一块硬盘。
- 读、写性能提升
- 可用空间:N*min(s1,s2,......)/2
- 有容错能力:每个镜像卷当中都可以损坏一块硬盘
- 最少的磁盘数:4,4+
- RAID01 先把硬盘平分为两组,每组硬盘再做成条带卷,和RAID10类似,但是容错方面比RAID10低很多,因为同一组镜像卷当中损坏的一块硬盘几率相对较低,而不同镜像组都坏一块硬盘的几率大很多,这就造成了RAID01的劣势。
所以一般企业都是采用的RAID10级别来构建RAID。
4. RAID的实现方式
4-1. 1. 软件实现方式
centos上是采用内核中md模块(multi devices)
4-2. 2. 硬件实现方式
通过扩展卡提供适配能力,扩展卡包含有独立的cpu和内存及BBU,当有数据存储的时候是先存储到内存在写入硬盘,所以BBU异常的重要,当数据写到一半关机或者停电了,BBU能够撑住将扩展卡内部内存的数据写入到硬盘。
5. Linux 上实现软RAID的方式
5-1. 1. mdadm命令
mdadm支持的RAID级别有:LINEAR md devices, RAID0 (striping), RAID1 (mirroring), RAID4, RAID5, RAID6, RAID10, MULTIPATH, FAULTY, and CONTAINER;
语法格式:
mdadm [mode] <raiddevice> [options] <component-devices>
raiddevice: /dev/md#
component-devices:任意块设备
模式[mode]:
- 创建:-C
- -n #:使用#个块设备来创建此RAID;
- -l #:指明要创建RAID的级别;
- -a {yes/no}:是否自动创建目标设备的RAID设备文件;
- -c CHUNK_SIZE:指明块大小;
- -x #:指明空闲盘(相对于热备盘)的个数;
- 例如创建一个10G可用空间的RAID5
[root@test01 ~]# cat /proc/mdstat
[root@test01 ~]# mdadm -C /dev/md0 -n 3 -a yes -l 5 -x 1 /dev/sdb{5..8}
- 装配:-A
- 监控:-F
- 管理:-f,-r,-a,D
例如:
- 查看RAID组的状态
[root@test01 ~]# mdadm -D /dev/md0
- 标记RAID组中的某块硬盘故障
[root@test01 ~]# mdadm -f /dev/md0 /dev/sdb8
mdadm: set /dev/sdb8 faulty in /dev/md0
- 移除故障硬盘
[root@test01 ~]# mdadm -r /dev/md0 /dev/sdb8
mdadm: hot removed /dev/sdb8 from /dev/md0
- 添加硬盘
[root@test01 ~]# mdadm -a /dev/md0 /dev/sdb8
mdadm: added /dev/sdb8
[root@test01 ~]# mdadm -D /dev/md0
- 观察md的状态
[root@test01 ~]# cat /proc/mdstat
持续观察
[root@test01 ~]# watch -n1 "cat /proc/mdstat"
- 如果需要删除md设备的话,必须先停止md设备
[root@test01 ~]# mdadm -S /dev/md0
mdadm: stopped /dev/md0