大话存储第六章-磁盘阵列
磁盘阵列简单理解就是装成百上千块磁盘的大柜子。
外置磁盘柜应用探索
找一个箱子内部有SCSI线缆,可以固化到电路板上。外边放一个接口,用来连接主机上的SCSI卡。如果主机装的SCSI卡不带RAID功能,那么主机会看到磁盘箱中的所有磁盘,箱子里有多少块,OS磁盘管理器就会显示多少块。如果主机的SCSI卡带RAID功能,那么可以用这个RAID卡先对认识到的磁盘做RAID,划分逻辑盘,然后OS识别到的是逻辑盘,不会是箱子里的物理磁盘。
这种磁盘箱叫做JBOD,“Just a Bound Of Disks”
结合RAID卡实现外置磁盘阵列
把RAID功能做到磁盘箱中,这样主机就不用再配置RAID,直接连接就能识别到逻辑盘了。
- 把自带RAID控制器的磁盘箱叫做“磁盘阵列”,自此大家默认凡是JBOD都叫磁盘柜,凡是自带RAID控制器的盘柜就叫磁盘阵列或盘阵。
- 盘阵就是在盘柜的基础上,将内部的磁盘经过自带的RAID控制器虚拟化成逻辑磁盘,然后经过外部SCSI接口连接到主机端的SCSI接口。此时盘阵对主机来说就是主机SCSI总线上的一个或多个设备,具有一个或多个SCSI ID,所有逻辑盘都以LUN的形式呈现给主机。
- 图6-3中S1对外提供服务叫做前端,S2面向自己内部管理的磁盘而外部不需要了解的叫做后端。内部接口和外部接口类型可以不同,外部接口也可以是多个,将不同的逻辑磁盘只分配到特定的外部接口。
- LUN是SCSI协议中的名词,是SCSI ID的更细一级的地址号,每个SCSI ID(Target ID)下边还会有更多的LUN ID(视ID字段长度而定)。磁盘阵列可以在一个SCSI ID下虚拟多个LUN地址,每个LUN地址对应一个虚拟磁盘,如此可以在一条主线上生成多个虚拟磁盘。后来人们把硬件层面生成的虚拟磁盘统一为“LUN”。而由软件生成的虚拟磁盘,统一称为”卷“。
双控制器的高安全性磁盘阵列
如果盘阵内部只有一个控制器模块叫SPOF(Single Point Of Failure)即单故障点。高端磁盘内部都有两个控制器,互为冗余,分给其中一个控制器的LUN逻辑卷,可以在这个控制器故障失效的时候自动分配给另一个工作正常的控制器接管,继续处理针对这个LUN的读写请求。两个控制器平时都管理各自的LUN,一旦发现对方故障,会把所有的LUN接管过来。因此两个控制器之间需要通信。两个控制器的连接可以是两种方式:
- Active-Standby / HA(High Availability)
两个控制器中同时只有一个在工作,另外一个处于等待、同步、监控状态,一旦主控制器故障,备份控制器立刻接管工作。为了预防脑分裂,备份控制器在接管之前需要通过某种机制将主控制器断电或者重启,释放其总线使用权,然后自己接管前后端总线。
- Dual-Active
两个控制器都在工作,可以将后端一半数量总线交由一个控制器管理,另一半交由另一个控制器管理。一个控制器损坏,另一个控制器接管所有总线。
- 脑分裂(Split Brain)
连接两个控制器之间的线路出现问题导致互相以为对方故障,两者都尝试接管所有总线,可能造成有两个活动控制器操控所有后端设备。为了预防通常引入仲裁者,比如用两者都能访问到的磁盘,控制器向其上写入自己的仲裁信息,一旦发生脑分裂,二者就参考这个磁盘,谁最后写入信息就把控制权给谁。
实际中SCSI盘阵比较低端,一般没有这种设计模式的产品。
连接多个扩展柜
后来给扩展柜也增加了探测磁盘温度等二线辅助功能模块。
主机和磁盘阵列本身是一家
盘阵控制器本身就是一个简单的主机系统:RAID控制器芯片(CPU)、内存、总线、IO接口(SCSI接口等)和RAID芯片执行的代码(软件)。这样完全可以用一台主机服务器来充当存储系统的控制器。比如在这台主机上插入几张SCSI卡作为前端接口卡,再插入若干SCSI卡作为后端连接磁盘箱的接口卡,设计软件读写数据,经过处理或虚拟化之后再传送给前端的主机服务器。
目前有两种趋势:一种是趋向使用现成的主机充当控制器载体、另一种是趋向使用高集成度的芯片作为控制器的核心。
盘阵的类型:按照前后端接口来分,有SCSI-FC盘阵、FC-FC盘阵、SATA-FC盘阵、SCSI-SCSI盘阵等。SCSI-FC表示后端用SCSI接口,前端用FC接口连接主机。下图的FC-FC盘阵是目前最高端的盘阵所采用的架构,五个机柜中间的机柜是控制器,其余机柜中均为磁盘扩展柜。
SAN
RAID控制器相当于一个路由器,协议转换器。将磁盘放到主机外部,存储设备和主机之间形成一个独立的网络:存储区域网络(Storage Area Network,SAN)。数据在这种网络中来回穿梭,格式不断转换和还原。