[关闭]
@JCChan 2015-07-30T11:31:11.000000Z 字数 3690 阅读 2240

磁盘阵列实战

大话存储


一、操作系统中RAID的实现

     感觉这种软RAID和虚拟化非常的像,虚拟化是基于CPU的运算能力远大于需求,因此使用了ESXi对整个Kenrel进行管理。然后使用vCenter或者登录vSphere就可以建立多台VM Machine了。在这里,RAID做的也是这个思路,我可以看到所有的硬件情况,也就是SCSI ID,然后按照用户需求做成需要的RAID后,就不能仅仅从物理层面去看硬盘了,而是要从逻辑层面去看,所以应该使用LUN ID。
     书上的解释是,当然,因为RAID程序需要使用磁盘上的部分空间来存放一些RAID信息,所以实际容量会变小,经过RAID程序的处理之后,这6块硬盘最终变成两块虚拟磁盘,如果是在windows系统中,打开磁盘管理器只能看到两块硬盘,之后,可以对这两块盘进行格式化,格式化程序丝毫不会感觉到有多快物理硬盘正在写入数据。
     通常软RAID有以下五个选项:简单卷,类似磁盘分区;跨区卷:相当于不做条带化的RAID 0;带区卷:相当于条带化的RAID 0;镜像卷:RAID 1;RAID 5卷:做RAID 5的卷

二、RAID 卡

  1. 软件RAID存在着缺点:
    (1)占用内存空间
    (2)占用CPU资源
    (3)软件RAID程序无法将安装有操作系统的那个磁盘分区做成RAID模式,因为RAID程序是运行在其上面的,一旦操作系统挂了,RAID程序也会无法运行,磁盘数据变成一堆无用的东西。
  2. 要在硬件上实现RAID的功能,必须找一个物理硬件作为载体,SCSI卡或者主板上的南桥无疑就是这个载体,只需要增加额外的芯片就可以实现RAID功能了,也可以是ASIC这样的高成本高速度运算芯片,也可以是通用指令CPU这样的通用代码执行芯片,可以从ROM中加载代码直接执行,也可以先载入RAM后执行,从而实现RAID功能。
  3. 在主板南桥芯片上也可以实现RAID功能,由于南桥中的芯片不能靠CPU来完成它们的功能,所以这些芯片完全靠电路逻辑来自己运算,尽管速度很快,但是相对插卡式的RAID卡要弱,板载RAID芯片就是指南桥中有实现RAID功能的芯片。
  4. 对于硬件RAID来说,操作系统根本无法感知底层的物理磁盘,而只能通过厂家提供的RAID卡的管理软件来查看卡上所连接的物理磁盘。而且,配置RAID卡的时候,也不能在操作系统下完成,而必须通过进入这个硬件来完成,一般的RAID卡都是在开机自检的时候,进入它的ROM配置程序来配置各种RAID功能。
  5. 带CPU的RAID卡是一个小的计算机系统,有自己的CPU、内存、ROM、总线和IO接口,只不过这个小计算机是为大计算机服务的。
  6. SCSI RAID卡上一定要包含SCSI控制器,因为其后端连接的依然是SCSI物理磁盘,其前端连接到主机的PCI总线上,所以一定要有一个PCI总线控制器来维护PCI总线的仲裁、数据发送和接受等功能,还需要一个ROM,一般都是用Flash芯片作为ROM,其中存放着初始化RAID卡必须的代码以及实现RAID功能所需的代码。RAM的作用首先是数据缓存,提高性能,其次作为RAID卡上的CPU执行RAID运算需要的内存空间,XOR芯片专门用作RAID3、5、6这种校验型的RAID。
  7. 条带化之后,RAID程序是代码就操控SCSI控制器向OS层驱动程序代码提交一个虚拟化之后的所谓的逻辑盘,也称之为LUN。
  8. RAID卡的初始化和配置过程:初始化就是说在系统加电之后,CPU执行系统总线特定地址上的第一句指令,这个地址便是主板BIOS芯片的地址,执行到一定阶段的时候,有一条指令会让CPU寻址总线上其他设备的ROM地址,从而可以进入其他设备的ROM等。
  9. 0通道RAID卡:0通道的意思是说这块卡的后端没有SCSI通道,将这块子卡插入PCI插槽后,就可以利用在PCI插槽上的SCSI卡,操控通道实现RAID,需要主板上为0通道子卡专门设计的逻辑电路,即ICR逻辑电路,用来解惑CPU发送的地址信号和发给CPU的中断信号,被重定向到了RAID子卡处。而RAID子卡和SCSI卡之间的通信,不会被重定向。
  10. 无驱RAID:即使用SATA接口连接到计算机上,从而不需要任何驱动就可以被大多数操作系统使用。
  11. RAID On Chip技术:利用SCSI控制芯片内部的RISC处理器完成一些简单的RAID类型,适合于在低级服务器中做RAID阵列。
  12. RAID上的内存:缓存,也就是缓冲内存,只要在通信的双方之间起到缓冲作用就可以了,CPU与内存之间是L2 Cache,比内存的RAM速度还要高,但是没有CPU速度高。同理RAID控制器和磁盘通道控制器也需要一个缓存来适配。
  13. 缓存的两种写模式:
    (1)WriteBack模式:上层发过来的数据,RAID控制器将其保存到缓存中,立即通知主机IO已经完成,但是这种模式有一个致命缺点,如果这时候掉电,RAM中数据将完全丢失,所以需要一颗电池作为保护
    (2)WriteThrough模式:上层的IO只要切实的RAID控制器写入磁盘后才会通知主机IO完成,但是这时缓存的提速作用就没有优势了。
  14. 读缓存时有一种算法PreFetch:预取,即从磁盘上猜测主机会读取连续IO,所以预先缓存。另外一种算法,先读取出一段诗句,如果这些数据被主机的写IO更改了,也不会写入磁盘保存,而是继续留在缓存中,因为它假设主机最近可能还要读取这些数据。
  15. RAID配置完后的初始化过程:在设置完RAID参数并应用了RAID设置后,RAID控制器需要对所有磁盘进行一个初始化的过程,具体来说,就是往磁盘上所有的0或1,否则没有一个正确的数据关系开始的话,就会出现校验数据与数据块不一致。

三、磁盘阵列

  1. RAID 50:控制器在接收到主机发来的数据之后,按照RAID 0的映射关系将数据分块,一部分存放于左边的RAID 5系统,另一部分放在右边的RAID 5系统,然后再根据内部映射关系继续存放。
  2. RAID 10:先1后0,两个1组成一个space,再进行0,冗余度为2
  3. RAID 01:先0后1,两个硬盘先组成0,再做镜像,冗余度只有1

四、虚拟磁盘

  1. 划分逻辑盘与分区的区别:每个逻辑按对于OS来说都认成一块单独的物理磁盘,分区是在一块逻辑盘上再做划分。
  2. 做RAID的磁盘,会在最后的1MB空间做一个空间数据结构,有了这个记录,RAID模块孩子要读取同一个RAID子系统中每块盘上的记录,就能了解RAID信息,每种类型的RAID可以组成一个RG。

五、卷管理层

  1. PV:LVM将操作系统识别到的物理磁盘的叫法
  2. VG:多个PV可以放入一个VG中,组成大的存储池
  3. PP:逻辑上再将一个VG分割成许多小块,这是一个最小的整块单位
  4. LP:PP组成的逻辑区块。
    通过以上这四个,如同RAID控制器对硬盘做条带化一样,我们将RAID控制器上交的LUN重新划分,引入虚拟化的概念,以后就利用卷来管理我们的硬盘,某个卷想增加多少就增加多少,只要还有剩余空间。
  5. 实际上,LVM会记录每个PP对应的磁盘区域,这种记录区域的地方叫做VGDA,通过读取它就能获得LVM的配置信息。在灵活的扩容时,会调用总线驱动,查询出这个硬件的信息,因为是虚拟化的卷,只需要给RAID控制器说,读写哪个LBA地址就可以了。
  6. VGDA:我们可以把它类比做MBR,这样就非常好理解了,高级VM做逻辑卷的时候,MBR和VGDA的数据都会更新,在MBR中,用于启动基本操作系统,单独存放于一个小分区中,表明分区类型为bootable。

六、大型磁盘阵列

  1. JOBD:因为主机内部空间有限,我们可以做一个带有独立电源和散热系统的磁盘柜子,在接口方面就是一条SCSI线缆,用来连接主机上的SCSI卡的。在盘阵中,SCSI控制器份逻辑上分为两个部分,一部分作为前端,被动的控制器,受主机上的SCSI控制器操控,另一部分作为后端,主动的控制器,用于操控所有硬盘。
  2. 内部接口和外部接口:内部接口是指盘阵RAID控制器链接其内部磁盘时用的接口,盘阵控制器是一个虚拟化引擎,它的前后端可以完全不一致,因为对主机都是报告LUN。
  3. 双控制器:为了避免SPOF,一般的磁盘阵列中都会有两个控制器,有以下两种状态
    (1)Active-Standby:两个控制器同一时刻只有一个在工作,另一个做镜像,一旦主控制器发生故障,马上接替主控制器,这样的话,在消耗了两个SCSI ID后,剩余14个ID可以分配给磁盘使用。
    (2)Dual-Active:两个控制器同时工作,平时每个总线只有一个控制器管理,即各自为政,一旦其中一个坏了,另一个控制器马上包揽下所有的总线。为了防止Split Brain,即两个控制器通信中断,导致争抢对方的总线,磁盘可以设计最后把控制器交给谁,或者使用电源控制器,发送信号使对方stangby,这种已经到了SCSI Reserve操作了。
  4. 扩展柜:因为RAID控制器可以类比CPU,其性能远比处理15个磁盘那么简单,所以在JBOD中,常常会有多个扩展接口,组成模块化的磁盘阵列,通过开发多种配套的芯片,完全可以带动多个扩展柜,形成了大的磁盘阵列,现在更有甚者是利用一台主机服务器来充当控制器。
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注