Linux&&RAID
了解
RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)
功能:
将多个相对便宜的磁盘组合起来,形成一个磁盘阵列组,使性能达到单个高价格、大容量的硬盘效果。
通过将完全相同的硬盘组成一个逻辑扇区,可以在服务器上作为一个硬盘使用。
标准RAID
RAID 0
条带卷
RAID0称为条带化存储(striping),将数据分段存储于各个磁盘中,读写均可以并行处理。
因此其读写速率是单个磁盘的N倍(N为组成RAID0的磁盘个数)。
但是由于缺乏数据冗余,单个磁盘的损坏会导致数据的不可修复。
最少两块磁盘构成。
容量为单块磁盘的N倍
适用于追求性能,不考虑安全性的环境。
原理
大多数striping的实现允许管理者通过调节两个关键的参数来定义数据分段及写入磁盘的方式,这两个参数对RAID0的性能至关重要。
STRIPE WIDTH
strip width 是指可被并行写入的stripe的个数,即等于磁盘阵列中磁盘的个数
STRIPE SIZE
也可称为block size(chunk size,stripe length,granularity),指写入每个磁盘的数据块大小。
以块分段的RAID通常可允许选择的块大小从2KB到512KB不等,必须是2的指数倍。
以字节分段的RAID(如RAID3)一般的stripe size为1字节或512字节,且用户不能调整。
通常,减少stripe size大小,文件会被分成更小的块,传输数据会更快,却需要更多的磁盘保存,增加positioning performance。
RAID 1
镜像卷
镜像存储(mirroring),没有数据校验,数据被同等的写入两个或多个磁盘中。
因此写入速度较慢,但读取速度较快。读取速度接近所有磁盘吞吐量的总和,写入速度受限于最慢的磁盘。
RAID1也是磁盘利用率最低的一个。
容量为磁盘总数的二分之一。
最少两块磁盘构成。
性能为单块磁盘的N/2倍
允许损坏一份数据可恢复。
如果用两个不同大小的磁盘建立RAID1,可以用空间较小的那一个,较大的磁盘多出来的部分可以用作他用,减少浪费。
RAID 2
RAID 0的改良版,加入了汉明码错误校验。
汉明码能够检测最多两个同时发生的比特错误,并且能够更正单一比特的错误。
因此写入效率较低。
RAID 3
带奇偶校验的条带卷
需要单独的磁盘存储校验信息
至少需要三块磁盘构成
性能为单块磁盘的N-1倍
容量为单块磁盘的N-1倍
校验盘容易形成瓶颈。
损害单块磁盘可恢复。
类似于RAID 2,数据条带化存储于不同的硬盘,数据以字节为单位,只是RAID3使用单块磁盘存储简单的奇偶校验信息,所以最终磁盘数量为N+1.
当这N+1个硬盘中的其中一个硬盘出现故障时,从其他N个硬盘中的数据也可以恢复原始数据,当更换一个新硬盘后,系统可以重新恢复完整的校验容错信息。
允许损坏任意一块磁盘。
由于在一个硬盘阵列中,多于一个硬盘同时出现故障率的几率很小,所以一般情况下,使用 RAID3,安全性是可以得到保障的。RAID 3会把数据的写入操作分散到多个磁盘上进行,不管是向哪一个数据盘写入数据, 都需要同时重写校验盘中的相关信息。因此,对于那些经常需要执行大量写入操作的应用来 说,校验盘的负载将会很大,无法满足程序的运行速度,从而导致整个RAID系统性能的下降。 鉴于这种原因,RAID 3更加适合应用于那些写入操作较少,读取操作较多的应用环境,例如 数据库和WEB服务器等。
RAID 4
与RAID3类似,但RAID4是按块(扇区)存取。无须像RAID3那样,哪怕每一次小I/O操作也要涉 及全组,只需涉及组中两块硬盘(一块数据盘,一块校验盘)即可,从而提高了小量数据 I/O速度。
RAID 5(带分布式存储的奇偶校验的条带卷)
至少需要两块磁盘
性能、容量是单块磁盘的N-1倍
允许损坏一块磁盘可恢复。
奇偶校验(XOR),数据以块分段条带化存储。校验信息交叉地存储在所有的数据盘上。
容量、性能小于等于单块磁盘容量的N-1倍。允许损坏一块磁盘可恢复,至少由三块磁盘构成。
RAID5把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和 相对应的数据分别存储于不同的磁盘上,其中任意N-1块磁盘上都存储完整的数据,也就是 说有相当于一块磁盘容量的空间用于存储奇偶校验信息。因此当RAID5的一个磁盘发生损坏 后,不会影响数据的完整性,从而保证了数据安全。当损坏的磁盘被替换后,RAID还会自动 利用剩下奇偶校验信息去重建此磁盘上的数据,来保持RAID5的高可靠性。
用的最多。
RAID 5可以理解为是RAID 0和RAID 1的折衷方案。RAID 5可以为系统提供数据安全保障,但 保障程度要比镜像低而磁盘空间利用率要比镜像高。RAID 5具有和RAID 0相近似的数据读取 速度,只是因为多了一个奇偶校验信息,写入数据的速度相对单独写入一块硬盘的速度略慢。
RAID 6(双份奇偶校验信息的条带卷)
至少需要两块磁盘
性能、容量是单块磁盘的N-2倍
允许损坏二块磁盘可恢复。
允许损坏两块磁盘可恢复。性能低于RAID5。可用容量是单块磁盘容量的N-2倍,允许损害两块磁盘可恢复。效率低。类似RAID5,但是增加了第二个独立的奇偶校验信息块,两个独立的奇偶系统使用不同的算法, 数据的可靠性非常高,即使两块磁盘同时失效也不会影响数据的使用。但RAID 6需要分配给 奇偶校验信息更大的磁盘空间,相对于RAID 5有更大的“写损失”,因此“写性能”非常差。
由图所知,每个硬盘上除了都有同级数据XOR校验区外,还有一个针对每个数据 块的XOR校验区。当然,当前盘数据块的校验数据不可能存在当前盘而是交错存储的。从数 学角度来说,RAID 5使用一个方程式解出一个未知变量,而RAID 6则能通过两个独立的线性 方程构成方程组,从而恢复两个未知数据。
伴随着硬盘容量的增长,RAID6已经变得越来越重要。TB级别的硬盘上更容易造成数据丢失, 数据重建过程(比如RAID5,只允许一块硬盘损坏)也越来越长,甚至到数周,这是完全不可接受的。而RAID6允许两 块硬盘同时发生故障,所以渐渐受到人们的青睐。
伴随CD,DVD和蓝光光盘的问世,存储介质出现了擦除码技术,即使媒介表面出现划痕,仍然可以播放,大多数常见的擦除码算法已经演变为上世纪60年代麻省理工学院林肯实验室开 发的Reed-Solomon码。实际情况中,多数RAID6实现都采用了标准的RAID5教校验比特和Reed-Solomon码 。而纯擦除码算法的使用使得RAID 6阵列可以失效两块以上的硬盘,保护力度更强,有些实现方法提供了多种级别的保护,甚至允许用户(或存储管理员)指定保护级别。
混合RAID
RAID 01
RAID01与RAID10的区别,谁在前,谁就做底层配置
顾名思义,是RAID0和RAID1的结合。先做条带(0),再做镜像(1)。
RAID 10
同上,但是先做镜像(1),再做条带(0)
RAID01和RAID10非常相似,二者在读写性能上没有什么差别。但是在安全性上RAID10要好于 RAID01。如图中所示,假设DISK0损坏,在RAID10中,在剩下的3块盘中,只有当DISK1故障, 整个RAID才会失效。但在RAID01中,DISK0损坏后,左边的条带将无法读取,在剩下的3快盘 中,只要DISK2或DISK3两个盘中任何一个损坏,都会导致RAID失效。
RAID10和RAID5也是经常用来比较的两种方案,二者都在生产实践中得到了广泛的应用。 RAID10安全性更高,但是空间利用率低。至于读写性能,与cache有很大关联,最好根据实 际情况测试比较选择。
非标准RAID
DRFS
DRFS,即DistributedRaidFileSystem,是一种尝试将RAID与Hadoop的DFS结合起来的技术。 通常的HDFS在实践中需要将replication factor设为3以保证数据完整性,而如果利用 RAID的stripe和partity(奇偶校验)技术,将数据分为多个块,并且存储各个块的校验信 息(XOR或擦除码)。有了这些措施,块的副本数就可以降低并且保证同样的数据可靠性,就能节省相当一部 分的存储空间。
DRFS包含以下几个组件:
- DRFS client: 提供应用程序访问DRFS的接口,在发现读取到的文件有损坏时修复,整个操作对应用程序透明
- RaidNode: 创建,维护检验文件的daemon
- BlockFixer: 周期性地检查文件,重新计算校验和,修复文件.
- RaidShell: 类似于hadoop shell.
- ErasureCode: 即DRFS所使用的生成校验码的算法,可为XOR或者Reed-Solomon算法。 XOR仅能创建一个校验字节,而Reed-Solomon则可以创建无数位(位数越多,能恢复的数 据也越多),如果使用Reed-Solomon,replication甚至可以降为1,缺点是降低了数据读 写的并行程度(只能从单机读写)。
实现
软RAID:
软件管理磁盘的方式
硬RAID:
通过专门的盘柜进行磁盘管理,比软RAID性能高,但价格昂贵。
实现RAID 5
环境:准备7块SCSI磁盘,其中4块构建磁盘整列,1块用作预备(spare)磁盘,两块用作RAID扩展
#查看磁盘环境
fdisk -l
#创建RAID
mdadm --create --auto=yes /dev/md0 --level=5 --raid-devices=4 --spare-devices=1 /dev/sd[b-f]
#查看RAID是否成功创建且正常运行
mdadm --detail /dev/md0
cat /proc/mdstat
#格式化并挂载
mkfs -t ext4 /dev/md0
mkdir /mnt/raid5
mount /dev/md0 /mnt/raid5/
#使用创建的RAID
touch /mnt/raid5/test
–create : 代表创建raid
–auto=yes /dev/md0 : 代表新建软件磁盘阵列设备为md0,md序号可以为0-9
–level=5 //磁盘阵列的等级,此处指raid5
–raid-devices : 代表用作磁盘阵列的磁盘块数
–spare-devices : 代表用作预备(spare)磁盘的块数
/dev/sd[b-f] : 磁盘阵列所用设备
对于大容量磁盘(超过2T),采用格式化成xfs(centos 7.0才支持)的方式效率更高
yum -y install xfsprogs
mkfs -t xfs -f /dev/md0
设置开机自动启动及自动挂载
touch /etc/mdadm.conf
mdadm --detail /dev/md0 | grep UUID > /etc/mdadm.conf
vim /etc/mdadm.conf
ARRAY /dev/md0 UUID=879d0808:2020e23w1:12asui78:78asd78a
vim /etc/fstab
/dev/md0 /mnt/raid5 ext4 defaults 0 0
扩容RAID磁盘阵列
#查看当前磁盘阵列组成情况
cat /proc/mdstat
#添加新磁盘设备到磁盘阵列
mdadm --add /dev/md0 /dev/sdg
#将raid 5阵列/dev/md0 修改为5个设备
mdadm --grow /dev/md0 -n5
#再次查看当前磁盘阵列组成情况
cat /proc/mdstat
#对md0重新更新文件系统
resize2fs -f /dev/md0
xfs文件系统用 : xfs_growfs /dev/md0
模拟RAID磁盘损坏、修复
#将磁盘/sdd设置为出错状态
mdadm --manage /dev/md0 --fail /dev/sdd
#此时预备(spare)磁盘自动替换损坏磁盘
mdadm --detail /dev/md0
#将出错的磁盘删除
mdadm --manage /dev/md0 --remove /dev/sdd
#并加入新的磁盘
mdadm --manage /dev/md0 --add /dev/sdh
#查看磁盘阵列运行情况
mdadm --detail /dev/md0
关闭RAID软件
#卸载磁盘阵列
umount /dev/md0
#注销固化挂载
vim /etc/fstab
#/dev/md0 /mnt/raid5 ext4 defaults 0 0
#注销配置文件mdadm.conf
vim /etc/mdadm.conf
#ARRAY /dev/md0 UUID=879d0808:2020e23w1:12asui78:78asd78a
#停止raid设备
mdadm --stop /dev/md0
#删除raid中的所有磁盘
mdadm --misc --zero-superblock /dev/sd[b-h]