Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1094186
  • 博文数量: 286
  • 博客积分: 3124
  • 博客等级: 中校
  • 技术积分: 5186
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-24 23:42
个人简介

Bomi

文章存档

2015年(1)

2013年(1)

2012年(281)

2008年(3)

分类: 系统运维

2012-02-05 00:48:11

如何在ZFS中实现RAID结构
    RAID是“Redundant Array of Independent Disk”的缩写,中文意思是独立冗余磁盘阵列。冗余磁盘阵列技术诞生于1987年,由美国加州大学伯克利分校提出。
    RAID技术在存储领域的有着非常重要的作用,满足了不同的需求。RAID按照实现原理的不同分为不同的级别,不同的级别之间工作模式是有区别的。整个的 RAID结构是一些磁盘结构,通过对磁盘进行组合达到提高效率,减少错误的目的,不要因为这么多名词而被吓坏了,它们的原理实际上十分简单。下面我就给大家简单介绍一下在ZFS中可以实现的三种RAID技术:RAID 0、RAID 1和RAID Z(RAID 5的改进)。
RAID 0:无差错控制的带区组
    要实现RAID0必须要有两个以上硬盘驱动器,RAID0实现了带区组,数据并不是保存在一个硬盘上,而是分成数据块保存在不同驱动器上。RAID0分为串联卷和并两卷两种。
    串联卷写数据是按照顺序写进不同的可用分片,当第一个分片写满时才写第二个分片,这种存储方式只是为我们提供了一种方便的管理结构,便于我们将多个硬盘组合起来,却没有实现更好的性能。
    并联卷在写数据时,是将数据平均分布到各个分片上。因为将数据分布在不同驱动器上,所以数据吞吐率大大提高,驱动器的负载也比较平衡。如果刚好所需要的数据在不同的驱动器上效率最好。它不需要计算校验码,实现容易。它的缺点是它没有数据差错控制,如果一个驱动器中的数据发生错误,即使其它盘上的数据正确也无济于事了。不应该将它用于对数据稳定性要求高的场合。如果用户进行图象(包括动画)编辑和其它要求传输比较大的场合使用RAID0比较合适。同时,RAID0可以提高数据传输速率,比如所需读取的文件分布在两个硬盘上,这两个硬盘可以同时读取。那么原来读取同样文件的时间被缩短为1/2。在所有的级别中,RAID 0的速度是最快的。但是RAID 0没有冗余功能的,如果一个磁盘(物理)损坏,则所有的数据都无法使用。
    在ZFS文件系统里,我们可以很容易的实现这种结构,在我们组建存储池的过程中,我们就可以建立我们需要的RAID结构的存储池,而在默认情况下,ZFS建立的就是RAID0结构的存储池。
    例如:命令  Tonsen#zpool create mypool c0d0 c0d1 就是将c0d0和c0d1组成了一个RAID0结构的存储池,以后向这个池中增加数据时,它的数据分布就是采用平均分布的形式。
RAID 1:镜象结构
    对于使用这种RAID1结构的设备来说,RAID控制器必须能够同时对两个盘进行读操作和对两个镜象盘进行写操作,所以必须有两个驱动器。因为是镜象结构在一组盘出现问题时,可以使用镜象,提高系统的容错能力。它比较容易设计和实现。每读一次盘只能读出一块数据,也就是说数据块传送速率与单独的盘的读取速率相同。因为RAID1的校验十分完备,因此对系统的处理能力有很大的影响,通常的RAID功能由软件实现,而这样的实现方法在服务器负载比较重的时候会大大影响服务器效率。当您的系统需要极高的可靠性时,如进行数据统计,那么使用RAID1比较合适。而且RAID1技术支持“热替换”,即不断电的情况下对故障磁盘进行更换,更换完毕只要从镜像盘上恢复数据即可。当主硬盘损坏时,镜像硬盘就可以代替主硬盘工作。镜像硬盘相当于一个备份盘,可想而知,这种硬盘模式的安全性是非常高的,RAID 1的数据安全性在所有的RAID级别上来说是最好的。但是其磁盘的利用率却只有50%,是所有RAID级别中最低的。
    在ZFS文件系统里,我们可以通过在命令中增加mirror参数来构建镜像结构的存储池。
    例如:命令 Tonsen#zpool create mypool mirror c0d0 c0d1 就是将c0d0和c0d1组成了一个RAID1结构的镜像存储池,以后向这个池中增加数据时,它的数据分布是会写到它所有的镜像盘上。
    使用命令 Tonsen#zpool status 我们可以很清楚的看到镜像结构,如下:
  pool: mypool
state: ONLINE
scrub: none requested
config:
    NAME           STATE     READ WRITE CKSUM
    mypool         ONLINE       0     0     0
      mirror       ONLINE       0     0     0
        c0d0       ONLINE       0     0     0
        c0d1       ONLINE       0     0     0
errors: No known data errors
    我们甚至可以在ZFS中将RAID0和RAID1组合起来,形成一个综合的RAID结构。
    例如:命令 Tonsen#zpool create mypool mirror c0d0 c0d1 mirror c1d0 c1d1  就是将c0d0、c0d1和c1d0、c1d1分别组成两个镜像,然后这两个镜像又构成一个RAID0的结构。这种结构既提高了可靠性也提高了性能。
    使用命令 Tonsen#zpool status 查看一下它的结构,如下:
  pool: mypool
state: ONLINE
scrub: none requested
config:
    NAME           STATE     READ WRITE CKSUM
    mypool         ONLINE       0     0     0
      mirror       ONLINE       0     0     0
        c0d0       ONLINE       0     0     0
        c0d1       ONLINE       0     0     0
      mirror       ONLINE       0     0     0
        c1d0       ONLINE       0     0     0
        c1d1       ONLINE       0     0     0
errors: No known data errors
RAID 5:分布式奇偶校验的独立磁盘结构
    它的奇偶校验码存在于所有磁盘上,其中的p0代表第0带区的奇偶校验值,其它的意思也相同。RAID5的读出效率很高,写入效率一般,块式的集体访问效率不错。因为奇偶校验码在不同的磁盘上,所以提高了可靠性,允许单个磁盘出错。RAID 5也是以数据的校验位来保证数据的安全,但它不是以单独硬盘来存放数据的校验位,而是将数据段的校验位交互存放于各个硬盘上。这样,任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据。硬盘的利用率为n-1。但是它对数据传输的并行性解决不好,而且控制器的设计也相当困难。而对于RAID 5来说,大部分数据传输只对一块磁盘操作,可进行并行操作。在RAID 5中有“写损失”,即每一次写操作,将产生四个实际的读/写操作,其中两次读旧的数据及奇偶信息,两次写新的数据及奇偶信息。
RAID Z:是RAID5的改进版本,是solaris10里ZFS特有的一种Raid级别。
    容错能力与RAID 5相同,但是对于RAID 5的写入漏洞问题提供了软件解决方案,使用动态的条带化。传统的RAID 5都存在着“写漏洞”,就是说如果RAID 5的stripe在正写数据时,如果这时候电源中断,那么奇偶校验数据将跟该部分数据不同步,因此前边的写无效;RAID-Z用了“variable- width RAID stripes”技术,因此所有的写都是full-stripe writes。之所以能实现这种技术,就是因为ZFS集成了文件系统和设备管理,使得文件系统的元数据有足够的信息来控制“variable-width RAID stripes”。理论上说,创建RAID-Z需要至少三块磁盘,这跟RAID 5差不多。
    例如:Tonsen#zpool create mypool raidz c0d0 c0d1 c1d0 c1d1 就是创建了一个由c0d0、c0d1、c1d0和c1d1四块硬盘组成的raidz结构。
    使用命令 Tonsen#zpool status 来查看它的结构如下:
pool: mypool
state: ONLINE
scrub: none requested
config:
    NAME           STATE     READ WRITE CKSUM
    mypool         ONLINE       0     0     0
      raidz1       ONLINE       0     0     0
        c0d0       ONLINE       0     0     0
        c0d1       ONLINE       0     0     0
        c1d0       ONLINE       0     0     0
        c1d1       ONLINE       0     0     0
errors: No known data errors
    在ZFS文件系统里,我们可以通过很简单的方式,就能组织我们需要的各种RAID结构的存储单元,这为我们提供了异常强大的存储管理能力。

阅读(446) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~