1. RAID
RAID(Redundant Array of Inexpensive Disks)称为廉价磁盘冗余阵列。RAID 的基本原理是把多个便宜的小磁盘组合到一起,成为一个磁盘组,使性能达到或超过一个容量巨大、价格昂贵的磁盘。
RAID技术大致分为两种:基于硬件的RAID技术和基于软件的RAID技术。
在 Linux下通过自带的软件就能实现RAID功能,这样便可省去购买昂贵的硬件 RAID 控制器和附件就能极大地增强磁盘的 IO 性能和可靠性。由于是用软件去实现的RAID功能,所以它配置灵活、管理方便。同时使用软件RAID,还可以实现将几个物理磁盘合并成一个更大的虚拟设备,从而达到性能改进和数据冗余的目的。 基于硬件的RAID解决方案比基于软件RAID技术在使用性能和服务性能上稍胜一筹,具体表现在检测和修复多 位错误的能力、错误磁盘自动检测和阵列重建等方面。
1.1. RAID级别对比
RAID级别 | 优缺点 |
---|---|
RAID 0 | 存取速度最快 没有容错 |
RAID 1 | 完全容错 成本高 |
RAID 2 | 带海明码校验,数据冗余多,速度慢 |
RAID 3 | 写入性能最好 没有多任务功能 |
RAID 4 | 具备多任务及容错功能 Parity 磁盘驱动器造成性能瓶颈 |
RAID 5 | 具备多任务及容错功能 写入时有overhead |
RAID 0+1/RAID 10 | 速度快、完全容错 成本高 |
其他还有RAID 6、7、5E、5EE、DP、ADG之类的就不一一介绍了。每种RAID的详细介绍网上一搜一堆,之一。
1.2. RAID 5 和 RAID 10 对比
RAID 0、10、5、ADG对比表格:
上表在可用磁盘空间计算,假设以下条件成立:
- 1)阵列中所有的物理磁盘容量一致;
- 2)没有使用热备硬盘;
- 3)RAID 5中不超过14块硬盘;
- 4)RADI ADG中不超过56块硬盘。
一般raid5会多配一块热备盘,因为raid5本身只允许有1块磁盘损坏,而raid10,每组允许损坏1块,2组就是各1块,4组就是各4块,但是同组内不允许有2块损坏。
读方面:磁盘阵列读操作的关键更多的体现在cache的命中率上。所以,RAID5和RAID10在读数据上面,他们基本是没有差别的。
连续写:在连续写操作过程,如果有写cache存在,并且算法没有问题的话,RAID5比RAID10甚至会更好一些,差别不大,因为这个时候的RAID校验是在cache中完成,如4块盘的RAID5,可以先在内存中计算好校验,同时写入3个数据+1个校验。而RAID10只能同时写入2个数据+2个镜相。如果没有写缓存存在,RAID5写性能不如10。
随机写:假定要把一个数字2变成数字4,那么对于RAID5,实际发生了4次io:
先读出2与校验6,可能发生读命中 然后在cache中计算新的校验 写入新的数字4与新的校验8
对于RAID10,同样的单个操作,最终RAID10只需要2个io,而RAID5需要4个io。这里考虑的是没有缓存的情况。
总结:小io的数据库类型操作,建议采用RAID10,而大型文件存储,数据仓库,则从空间利用的角度,可以采用RAID5。