RAID小结
RAID – Redundant Arrays of Inexpensive Disks
很多小容量便宜的磁盘作为大容量磁盘使用的方法.
RAID Levels
概念
比较
RAID5中, 1个写操作, 对应4个IO. 为什么呢?
假设5块盘组成一个RAID5. 那么奇偶校验(Parity)的部分当用如下公式计算
Ep = E1 + E2 + E3 + E4 (XOR 异或)
当执行一次写入操作的时候, 必须读取老的Ep old, 和老的数据E4 old, 就是两次读.
Ep new = Ep old – E4 old + E4 new (XOR 异或)
算出Ep new之后, 要执行写入Ep new和E4 new, 就是两次写.
所以一次RAID5的写操作后台对应一共是4次IO操作. 如图:
同理, RAID6的一次写操作对应的是6次后台IO(write penalty), 即三次读, 三次写.
如何计算某应用程序在某种RAID下需要多少块盘?
==========================
假设有一个每秒需要5200个IO的应用程序, 即5200IOPS, 其中60%是读.
RAID5 Disk Load = 0.6 × 5,200 + 4 × (0.4 × 5,200) = 11,440 IOPS
RAID1 Disk Load = 0.6 × 5,200 + 2 × (0.4 × 5,200) = 7,280 IOPS
如果选择使用的硬盘的规格能承受的最大的IOPS是180, 那么为了满足该应用程序的IO工作量, 所需要的磁盘的数量计算如下:
- RAID 5: 11,440 / 180 = 64 disks
- RAID 1: 7,280 / 180 = 42 disks (最接近的偶数)
RAID 10 和 RAID 01什么区别?
==========================
RAID 1+0 is also called striped mirror. The basic element of RAID 1+0 is a mirrored pair, which means that data is first mirrored and then both copies of data are striped across multiple HDDs in a RAID set. When replacing a failed drive, only the mirror is rebuilt. In other words, the disk array controller uses the surviving drive in the mirrored pair for data recovery and continuous operation. Data from the surviving disk is copied to the replacement disk.
RAID 1+0也叫做striped mirror(条纹镜像). RAID 1+0的基本元素是一个镜像对, 也就是数据首先被镜像, 然后两份数据的拷贝会被分作条(stripe)后分布到RAID磁盘组的许多HDD中. 当取代一个出问题的磁盘的时候, 只有镜像被重建. 换句话说, 磁盘阵列控制器镜像对中使用幸存下的驱动器来恢复数据和保持操作的连续性. 数据被从幸存的磁盘拷贝到替换的磁盘.
RAID 0+1 is also called mirrored stripe. The basic element of RAID 0+1 is a stripe. This means that the process of striping data across HDDs is performed initially and then the entire stripe is mirrored. If one drive fails, then the entire stripe is faulted. A rebuild operation copies the entire stripe, copying data from each disk in the healthy stripe to an equivalent disk in the failed stripe. This causes increased and unnecessary I/O load on the surviving disks and makes the RAID set more vulnerable to a second disk failure.
RAID 0+1也叫做mirrored stripe(镜像了的条纹). RAID 0+1的基本元素是一个stripe(条). 这意味着, 跨多个HDD的对数据的分条工作首先执行, 然后, 整个stripe被镜像. 如果一个磁盘出问题了, 那么整条stripe出错. 重建动作会拷贝整个stripe, 从健康stripe中拷贝数据到一个等价的挂了的stripe的磁盘. 这会导致存活下来的stripe上增加的, 且不必要的I/O负载, 而且也使得整个RAID set在可能的第二次磁盘出问题面前显得很脆弱.
RAID性能特征
=====================
不同的RAID Level有不同的性能和可用性, 这取决于采用的RAID的类型和在RAID Group中的磁盘的数目. 一种RAID的类型和RAID Group的大小会在某种特定工作量的时候才比较适合.
什么时候应该使用RAID 0?
-----------------
我们不推荐对任何有商业价值的数据使用RAID 0.
RAID 0 group可以被用在不重要的, 需要高速度的, 尤其是高写入速度, 容量低成本的情形下, 其中重建不会影响商业程序. RAID 0 group应该已经被备份, 或者在受保护的存储中被复制过的. RAID 0没有提供任何等级的冗余. Proactive hot sparing对于RAID group是没有开启的. RAID 0 group中的单个磁盘挂掉会导致整个group中全部的数据丢失. 不可恢复的媒体错误会导致部分的数据丢失. RAID 0 group的可能的使用场合是用于临时存储的草稿磁盘.
什么时候应该使用RAID 1?
------------------
我们不推荐使用RAID 1. RAID 1 group是不能扩展的. 应该使用RAID 1/0 (1+1) group作为单个镜像了的RAID Group.
什么时候使用RAID 3?
------------------
为了满足大块的顺序读取的工作量的需要, RAID 3可以提供相对于其他选项多出几MB/s或更高的带宽. 在下面的条件下, RAID 3能够提供最高的读取带宽
- 磁盘是瓶颈
- 顺序流比2MB大
- 文件系统不是成碎片的, 或者是使用原始存储的.
- Block size是64KB或更大.
RAID 3可以被高效地使用在backup-to-disk应用程序中. 这种情况下, 应该配置RAID Group为(4+1)或(8+1). 每个LUN不要使用超过5个backup steams.
总体来说对RAID 5的使用的推荐是超过RAID3的. RAID 3仅应该被使用在高度序列化的I/O工作量中, 因为RAID 3在随机写的时候瓶颈在Parity drive上. 还有, 当多于一个RAID 3 group在back-end bus上执行顺序读取时, bus很快就会成为瓶颈, 性能跟RAID 5别无二致.
什么时候使用RAID 5?
----------------
RAID 5适合消息(messaging), 数据挖掘(data mining), 中等性能的媒体服务(medium-performance media serving), DBA主要使用先读后写的RDBMS系统. 如果host OS和HBA能够处理比64KB更大的数据传输, 那么RAID 5是非常强烈的选择. 下面的应用程序使用RAID 5是比较理想的.
- 适中的IOPS-per-gigabyte这样的工作量.
- 高性能的随机I/O, 其中写占整个工作量的30%以下.
- 顺序访问的DSS(descision support system)数据库.
- 任何RDBMS表空间, 其中记录比64KB要大, 并且访问是随机的(比如说带有二进制内容的个人信息, 比方说照片).
- RDBMS Log活动.
- Messaging applications.
- Video/Media
什么时候使用RAID 6?
----------------
RAID 6提供了对媒体错误和Parity RAID Group中两块磁盘同时挂掉的增强保护. 它的性能跟RAID 5相似, 但是需要更多的存储用于放置额外计算出来的Parity. 这额外的存储不能存放数据. 在对可用性有更高要求超过填加另外的parity磁盘的成本的时候, RAID 6可以被用来作为RAID 5的替代.
RAID 6 group可以有4到16个磁盘. 一个小的group是6个磁盘(4+2). 中等的group是12块磁盘(10+2). 小的group对stream的性能是不错的. 然而, 小量的随机写就能引发性能下降, 并且对系统的写缓存的效率产生消极影响. 中等的group对顺序的工作量和随机的工作量的表现都不错. 最佳的RAID 6的group是10块盘(8+2)和12块盘(10+2).
在选择RAID Group大小的时候, parity占数据的比率是一项非常重要的考虑因素. 每个RAID 6的group中有两块盘是不能用于存放用户数据的. 另外, 额外的parity计算对于IO性能也有影响. 比如说5块盘的RAID 5(4+1)迁移到RAID 6(4+2)的group中, 用户数据容量一样, 但却要多计算一次parity.
RAID 6, RAID 5和RAID 1/0性能的比较
-----------------
当effect磁盘数目相同的时候, 对于随机的workload, RAID 6跟RAID 5在读操作上性能一样. 随机写是不一样的. 比RAID 5多出来的额外的parity磁盘会增加RAID 6后端的50%的workload. 这还会是写缓存比RAID 5更快的被填满. 然而, 只要workload不被缓存的forced flushing干扰, RAID 5和RAID 6在host response time的观点上行为是相似的.
对于相同数目的磁盘, 对于顺序的workload, 读性能是基本上一样的. 顺序写的workload, RAID 6性能大概会差10%左右.
然而RAID 6可以抵抗group中两块磁盘同时挂掉的情形. 这甚至提供了比RAID 1/0更高的可用性. RAID 1/0的磁盘和其镜像磁盘同时出错对于RAID 1/0 group是致命的. 所以, RAID 6比RAID 1/0有容量优势, 高可用性的优势, 但是RAID 1/0却能在小块的写workload的时候提供超过其他任何RAID 类型的高性能.
由于RAID 6的双磁盘保护, RAID 6 group对于高优先级重建是最合适的. 假设重建率的瓶颈是一个共享的bus, 大RAID 6 group的重建速率跟大RAID 5 group的一样. 中等规模的RAID 6 group需要大概比相同规模的RAID 5 group的10%的更多时间. 小规模的RAID 6需要多花25%的额外时间. 当RAID group分散在不同的bus上的时候, RAID 5在任何规模的group上都有速度优势.
什么时候使用RAID 1/0?
------------------
RAID 1/0在小的, 随机的, 写强度很大的环境中能提供最好的性能. 写强度大的workload的定义是写操作占总操作的超过30%. 一些随机, 小IO写的应用程序如下:
- 高交易率的Online transaction processing(OLTP).
- Large messaging installation
- 实时数据/手续费记录
- 包含小记录的RDBMS数据table, 比如说经常更新的账户余额.
RAID 1/0还对降格了的RAID模式能通提供性能优势. 这些模式包括写缓存被关掉了的RAID group, 或者其中有挂掉了的磁盘的RAID group. RAID 1/0 group在(3+3)和(4+4)在性能和容量两方面有着很好的平衡.
资料来源
======================
<<Information Storage Management>>