RAID分类
1. RAID在数据库存储上的应用
随着单块磁盘在数据安全、性能、容量上呈现出的局限,磁盘阵列(Redundant Arrays of Inexpensive/Independent Disks,RAID)出现了,RAID把多块独立的磁盘按不同的方式组合起来,形成一个磁盘组,以获得比单块磁盘更高的数据安全、性能、容量。
一. 常见的RAID 级别
RAID有RAID0~RAID7几种级别,另外还有一些复合的RAID模式,比如:RAID10、RAID01、RAID50、RAID53。
常用的RAID模式有RAID0、RAID1、RAID5、RAID10。
1. RAID0
RAID0也就是常说的数据条带化(Data Stripping),数据被分散存放在阵列中的各个物理磁盘上,需要2块及以上的硬盘,成本低,性能和容量随硬盘数递增,在所有的RAID级别中,RAID 0的速度是最快的,但是RAID 0没有提供冗余或错误修复能力,如果一个磁盘(物理)损坏,则所有的数据都无法使用。
对于有容灾模式的RAID阵列,某块磁盘损坏时,只要换上新的硬盘即可,阵列系统会自动同步数据到新的硬盘。(不支持热插拔的话,需要先关机再开机)
2. RAID1
RAID1也就是常说的数据镜像(Data Mirroring),2块及以上的硬盘(偶数个),被分为2组,数据在每组磁盘中各有一份,若其中一组有磁盘损坏,另一组可以保证数据访问不会中断。RAID1同RAID0一样,有很好的读取速度,但是写的速度,有所下降。

3. RAID5
RAID 5 是一种数据安全、性能、容量、成本、可行性都相对兼顾的解决方案,正因此,类似的RAID2、RAID3、RAID4、RAID6很少得以实际应用。
RAID5需要3块及以上的硬盘, 它不是对存储的数据直接进行备份,而是把数据和相对应的奇偶校验信息存储到组成阵列的各个磁盘上,简单来说就是:任意坏掉一块盘时,另外的N-1块盘可以利用奇偶校验信息,把这块坏掉的磁盘上的数据恢复出来。
RAID 5可以理解为是RAID 0和RAID 1的折衷方案,有和RAID 0相近似的数据读取速度,有比RAID1低的容灾能力(RAID5只允许一块磁盘损坏),因为多了奇偶校验信息,写入数据的速度比RAID1慢。

4. RAID10
RAID10,名称上便可以看出是RAID0与RAID1的结合体,显然需要至少4块磁盘。不过,先RAID0后RAID1,还是先RAID1后RAID0,是不一样的。
RAID01,是先做RAID0,然后对2组RAID0再做RAID1,假设此时某个RAID0坏掉一块磁盘,这个RAID0随即不可用,所有的IO全部指向剩下的那个RAID0;

RAID10,是先做RAID1,然后对2组RAID1再做RAID0,假设此时某个RAID1坏掉一块磁盘,当前RAID1仍然能提供服务,并且另一个RAID1也同时可以坏掉一块磁盘。
所以,我们通常选择RAID10,而不是RAID01。
5. 不同RAID级别的读写性能
假设都用4块磁盘,RAID0,RAID1,RAID5,RAID10在多线程/多CPU情况下,都可以同时读取多块磁盘,读的性能都很不错;
写的性能(IOPS)依次递减,大致是:RAID0 > RAID10 > RAID1 > RAID5。
二. RAID的空间计算
在做RAID时,通常选择统一规格的磁盘,如果真的有不同空间大小、不同读写速度的磁盘,阵列系统会以空间小、速度低的为标准,空间大、速度高的磁盘向下兼容。比如:100G,50G的2块磁盘做RAID0,得到的空间为50G*2 = 100G。
RAID的空间计算公式:
RAID0的空间:Disk Size * N
RAID1的空间:(Disk Size * N)/2
RAID5的空间:((N-1)/N) * (Disk Size * N) = (N-1) * Disk Size
RAID10的空间:(Disk Size * N/2)/2 + (Disk Size * N/2)/2 = (Disk Size * N)/2
假设都用4块磁盘,每块磁盘都为100G
RAID0的空间:100G * 4 = 400G
RAID1的空间:(100G * 4)/2 = 200G
RAID5的空间:(4-1) * 100G = 300G
RAID10的空间: (100G * 4)/2 = 200G
三. RAID的IOPS计算
1. 单块硬盘的IOPS是固定的
关于单块磁盘IOPS的计算,在” 0. 磁盘读写与数据库的关系”中有详细的方法,但通常这个值是相对固定的,不需要重复计算,参考如下:
可以发现,同样转数,不同型号的单块磁盘,IOPS都维持在一个类似的数量级。
2. RAID的IOPS计算
有了单块磁盘的IOPS,那么多块磁盘的IOPS计算就很简单了,比如,对于RAID0或者单纯串联磁盘(JBOD: just a bunch of disks)的存储来说,10块175 IOPS的磁盘的总IOPS就是10*175 = 1750 IOPS。
但是对于其他RAID级别并不是这样,因为RAID有多次写IO的开销存在,简单来说就是:对RAID发起一次写IO,RAID内部会有不止一次的写IO发生,RAID内部的IO开销如下:
从图中得到公式:用户读IO+N*用户写IO = 总IOPS (N就是RAID内部的IO开销次数)
假设用户读写请求各一半(50%),同样还是以10块175 IOPS的磁盘为例:
50% * 用户总IO请求数 + N * (50% * 用户总IO请求数) = 175 IOPS * 10
以RAID1为例,那么N = 2,上式变为:1.5 *用户总IO请求数 = 1750 IOPS
用户总IO请求数 = 1167 IOPS
这就是10块175 IOPS的磁盘做了RAID1,所能提供的IOPS。
3. RAID的IOPS计算在现实中的应用
在实际使用中,我们通常不是计算现有RAID的IOPS,而是反过来:选择好磁盘规格,RAID模式,测试出系统的读写比例,系统需要达到的IOPS,然后看看,需要多少块硬盘来完成阵列,才能达到这样的IOPS需求?
假设:选择了175 IOPS的磁盘,做RAID1,系统读写比例为60%:40%,系统需要达到2000 IOPS
问:要配置多少块这样规格的硬盘?
把上面的公式改为通用公式:
reads * Workload_IOPS + writes_impact * (writes * Workload_IOPS) = 175 * M
60% * 2000 + 2 * (40% * 2000) = 175 * M
M = 16 (也就是说,要达到指定的2000 IOPS,RAID1需要配置16块175 IOPS的磁盘)
可能有人会觉得,系统的读写请求比例,系统需要达到多少IOPS,并不知道,如果没有前期测试的话,那么只能根据经验来估测了。
四. RAID在数据库存储上的应用
以SQL Server数据库为例,看下不同的RAID级别适用于什么场景:
RAID0,由于没有容灾机制,很少被单独使用。
有人提到过tempdb可以放在RAID0,因为tempdb不用担心丢数据,事实上tempdb故障了,SQL Server是不能正常运行的,所以这么做是不推荐的,建议把tempdb当成用户数据库来对待;
RAID1,操作系统、SQL Server实例、日志文件;
RAID5,数据文件,备份文件;
RAID10,所有类型都适用,不过考虑成本,通常不会全部使用RAID10
RAID分类的更多相关文章
- Raid分类说明 (from mongodb权威指南)
RAID(Redundant Array of Independent Disk,独立磁盘冗余阵列,旧称Redundant Array of InexpensiveDisk,廉价磁盘冗余阵列) 是一种 ...
- Raid与DAN、SAN、NAS基础
一. 磁盘基本知识 1. Raid分类 Raid磁盘阵列是由多个磁盘组合成的磁盘组,可将数据分割成许多区段,分别存放在各个磁盘上:同时利用不同排列技术,可提高磁盘性能和数据安全性.下列简单介绍几种Ra ...
- 双机相关知识(原理、LVM、Raid技术)
1 双机知识 1.1 预备知识 1.1.1 基本概念 双机热备:双机热备双机管理软件可以根据心跳自动检测环境运行情况,如果发现一个节点挂掉了,会自动切换到另外一个 ...
- Linux阵列 RAID详解
主要内容:(笔记总结--会不定时补充.修改,如有错误,欢迎指正探讨) 一. RAID详解 二. mdadm工具介绍 三. 创建一个RAID的基本过程 四. 磁盘阵列的管理 五. ...
- 存储可靠性技术之 --RAID
云计算项目交付时,不可避免的需要考虑存储磁盘采用何种RAID.例如:我们的项目工程师可能会建议大家连接克隆虚拟机系统盘组RAID 10,完整复制虚拟机数据盘 使用RAID5或者RAID6等,那么RAI ...
- 001.RAID简介
一 RAID介绍 独立磁盘冗余数组(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余数组(RAID,Redundant Array of Ine ...
- Linux阵列 RAID详解 (转)
原文链接:http://molinux.blog.51cto.com/2536040/516008 一. RAID详解 二. mdadm工具介绍 三. 创建一个RAID的基本过程 四. ...
- Raid阵列之简单介绍
1.raid分类 软raid:用软件模拟raid芯片 硬raid:集成的后来添加的 2.raid基本简介 (1)raid是由廉价磁盘冗余阵列发展成为独立磁盘冗余阵列 (2)linux是借助MD(Mui ...
- linux_RAID
什么是RAID? 磁盘阵列,把多个磁盘组合成一个磁盘组,在逻辑上看起来就是一块大的磁盘,提供单个物理磁盘的存储量和更高的存储性能,同时提供不同级别的冗余备份的一种技术,不同的RAID技术对应不同级别 ...
随机推荐
- HIDKomponente使用读写Hid设备(转)
源:HIDKomponente使用读写Hid设备一瞥 HIDKomponente 是delphi中使用的第三方Hid控件库,可以检测.控制连接到电脑的Hid设备.一般情况下多为usb设备. HIDKo ...
- 微信小程序之----加载中提示框loading
loading loading只有一个属性hidden .wxml <view> <loading hidden="{{hidden}}"> 加载中... ...
- C++中类的大小计算方法总结《网络+总结》
C++中类的成员函数,静态成员是不占类的大小的.类的大小等于基类的大小+子类个non-static成员变量的大小再+非虚基类大小,如果有多态性还要考虑vptr(可能不止一个)大小,这里成员变量是会被字 ...
- 动态添加试题选项按钮 radioButton(一)
最近在做WebView加载试题的功能,但是选项按钮如果放的WebView中,点击时反应很慢.于是把选项用原生的RadioButton,而试题题目和答案放在WebView中.但是选项的个数不确定,所以需 ...
- 阿里CEO张勇:阿里蚂蚁20亿元扶持开发者
https://bbs.taobao.com/catalog/thread/508895-318032179.htm?spm=a21bo.7724922.8439-0.2.tkjSOl 阿里CEO张勇 ...
- MySQL in不走索引
优化前 SELECT* FROM erp_helei mg WHERE mg.num = 602 AND mg.pid IN (10002559,10002561,10002562,10 ...
- 使用XML布局文件和Java代码混合控制UI界面
完全使用Java代码来控制UI界面不仅烦琐.而且不利于解耦:而完全利用XML布局文件来控制UI界面虽然方便.便捷,但难免有失灵活.因此有些时候,可能需要混合使用XML布局文件和代码来控制UI界面. 当 ...
- Java线程:锁
一.锁的原理 Java中每个对象都有一个内置锁,当程序运行到非静态的synchronized同步方法上时,自动获得与正在执行的代码类的当前实例(this实例)有关的锁.获得一个对象的锁也称为获取锁.锁 ...
- MVC使用HandleErrorAttribute自定义异常
MVC中,有一个Filter可以捕捉错误,但是它的用法是利用Attribute来实现的,而且只能加在Controller和Action上,所以不能捕捉别出的错误 其实理论上所有的错误肯定产生于Cont ...
- js运算符单竖杠“|”的作用
在js整数操作的时候,相当于去除小数点,parseInt.在正数的时候相当于Math.floor(),负数的时候相当于Math.ceil() 注: 1. Math.ceil()用作向上取整. 2. M ...