企业级磁盘阵列是由一组设备构成的存储系统,主要包括两种类型的设备,分别是控制器和扩展柜,其中控制器只有一台,扩展柜可以没有,也可以有多台。在EMC的Unity中分别称为DPE(Disk Processor Enclosure)和DAE(Disk Array Enclosure),在华为的OceanStor里面称为控制框和硬盘框。
企业级磁盘阵列也称为集中式存储。之所以称其为集中存储是因为相对于分布式存储系统,企业级磁盘阵列通常只有一个统一的入口,也就是其控制器。在控制器后面连接着大量的硬盘,这些硬盘以扩展柜为单位进行管理。控制器和扩展柜之间通过线缆进行连接,通常为SAS线。
这其中控制器是最复杂(无论是硬件还是软件),也是成本最高的部件。如下图是EMC Unity系列存储的控制器后端,可以发现控制器包含很多部件,比如电源模块和各种端口,其中端口分为前端端口和后端端口。后端端口用来连接硬盘扩展柜的,而前端端口则是用来接收计算节点访问的。
目前企业级磁盘阵列的后端大多采用SAS接口,但也有些产品采用其它协议,比如PCIe协议等。前端端口一般是FC端口或者以太网端口。随着以太网通信带宽优势的不断增加,以太网端口也越来越重要。
为了更加清晰的了解一下Unity的硬件,我们看一下上面的实物图。如果大家仔细观察就会发现,Unity的机头其实是有两个独立的控制器,分别是控制器SPA和控制器SPB。这两个控制器具备相同的硬件配置、端口和软件,其主要目的是实现双机互备。原因很简单,任何系统在运行的时候都有可能出现故障,没有双机互备的情况下就会导致计算节点访问的中断。所以,存储系统在设计的时候采用双机互备的方式,当其中一个系统出现问题的时候,另外一个系统可以接管服务,从而保证存储服务的连续性。
在Unity当中,这两个控制器是可以热插拔的,当其中一个控制器出现硬件故障的时候可以随时拔下来更换里面的硬件。其实不光控制器可以热插拔,其中的很多部件也是可以热插拔的,比如电源模块和IO端口。所以,除了CPU和内存,其它部件都不需要控制器关机就可以更换,从而更进一步的提高系统的可用性,降低业务中断的时间。
其实业界存储系统的设计普遍采用这种双控制器、可插拔部件的方式。如下是华为存储的后端视图,在一个机箱里面有两个独立的控制器,电源模块可插拔,通过拉手可以将电源模块拉出。IO模块和BBU也是可以独立拉出的。
可以看出,存储系统的硬件设计确实要比服务器复杂一些,但是最复杂的地方其实不在硬件,而是其软件。企业级磁盘阵列最基本的功能是提供大容量、高性能的存储服务,另外还有很多附加的功能,比如数据保护、数据效率和业务隔离等等。
对于其基本功能,IBM V7000的管理界面可以比较清晰的加以说明。如下图是V7000的管理界面,在该界面中最左侧的是物理硬盘,包括控制器内置硬盘和扩展柜的硬盘。然后是硬盘组,硬盘组将若干硬盘化成一组,并通过相应的算法实现数据冗余保护,一般是RAID。接着是多个硬盘组构建成一个存储池。在存储池的基础上可以根据用户的需要划分逻辑卷,并通过协议导出给计算节点使用。
对于软件架构,可以从EMC公布的关于Unity的软件栈获取一些信息,可以看出其整体实现逻辑与IBM V7000是一致的。其实大多数存储厂商的软件栈大体都是这样的,只是实现细节可能略有不同。
在企业级磁盘阵列中,硬盘被构建为一个存储池,其目的是为了资源的均衡。存储池其实就是一个存储资源虚拟化的过程,通过该技术,所有存储资源被抽象为一个存储池,用户所需要的空间通过分配逻辑卷(逻辑资源)来提供。由于逻辑卷与物理硬盘没有硬性的对应关系,因此当用户需要调整逻辑卷容量时可以随意调整。当然,存储池 的功能并不仅限于此,还有其它很多功能。
存储软件栈的最上层是协议层。我们知道计算节点与存储是通过某种网络进行连接的,可以是SAN或者以太网。既然是网络连接,两个节点之间要通信就需要遵循某种协议。因此,在存储系统中就必现实现相应的协议。对于块存储(SAN)来说,通常是通过FC或者iSCSI来实现计算节点与存储节点的交互,而对于文件存储(NAS)来说,则通常是通过NFS或者CIFS来实现两者之间的交互。
除了基本功能外,存储系统通常会实现很多附加的功能,华为官方文档中给出的是增值功能。这些功能是通常是为了保护用户的数据、提升服务质量或者减轻用户管理存储的负担。如下图是华为存储的软件功能模块示意图。
可以看出存储系统的软件功能还是非常多的,限于篇幅,这里就不再展开结束了。后面我们会详细的介绍每一个软件功能的实现原理,并结合一些开源软件介绍一下代码实现。