企业级存储系统数据可靠性及高可用架构

本号计划推出一个系列文章,介绍一下传统企业级中高端存储的基础架构和核心技术。企业级存储系统的最为基础和关键的是可用性和可靠性,其次是性能。因此,本号开篇第一文首先介绍一下企业级存储的可用性和可靠性架构设计。

在介绍存储系统可用性和可靠性架构设计之前,本文先简单介绍一下什么是可用性和可靠性。可用性(Availability)是关于系统可供使用时间的描述,以丢失的时间为驱动(Be Driven By Lost Time)。可靠性(Reliability)是关于系统无失效时间间隔的描述,以发生的失效个数为驱动(Be Driven By Number of Failure)。举一个简单的例子,如果从时间上衡量,系统A在过去一年有5分钟不能正常工作,而系统B有1小时不能正常工作,那么系统A的可用性大于系统B的可用性。而从故障次数衡量,系统A在过去一年中虽然只有5分钟不能正常工作,但总共出现过50次,而系统B近出现过1次,那么系统B的可靠性大于系统A的可靠性。

企业级存储必须最大限度的保证其可靠性和可用性,因为短时间的中断都有可能给企业造成巨大的损失。企业级存储的可靠性(以后不做特殊说明,在单独出现“可靠性”情况下,均表示可用性和可靠性)不仅体现在存储系统本身,同时体现在计算节点(或者服务器节点)到存储系统的整个数据路径。下面我们给出一个整体物理拓扑图,如图1所示。从图1可以看出,在服务器端有2个连接分别连接到2个独立的交换机,而每个交换机与存储系统的其中一个控制器连接。这样,整个链路中任何部件故障都不会影响从服务器端到存储端的访问,进而最大限度的保证了系统的可靠性。

企业级存储系统数据可靠性及高可用架构

图1 企业级应用硬件整体拓扑

这里重点说明一下存储系统,从图1可以看出,在一个存储系统中是有2个控制器的,这2个控制器之间是热备的,也就是存储系统允许任何控制器宕机,而不影响存储系统对外提供服务。

控制器的可靠性

前文我们简单介绍了一下控制器的冗余设计,其实在企业级存储系统中除了控制器本身,几乎所有部件都是冗余设计的,包括电源模块、HBA卡、风扇和磁盘组等等。同时,这些部件都可以实现热插拔,也即在出现故障的情况下可以在线更换。本节重点介绍控制器本身是如何实现可靠性的,其它方面后续介绍。

我们知道存储系统首先在硬件层面是冗余设计,另外在软件层面也需要配合才行。企业级存储通常有很多软件功能,比如缓存、快照和备份等等。因此,在硬件冗余的基础上,软件层面也必须能够做到冗余,从而保证任何故障的情况下整个存储系统的可靠性。从本质上说,存储系统两个控制器间的关系可以理解为一个高可用集群,在存储系统内部也有一个类似集群管理系统的软件来实现对控制的管理。

企业级存储系统数据可靠性及高可用架构

图2 企业级存储控制器高可用设计

存储系统的软件非常复杂,如图2是一个简化的软件架构图。其中,从上到下依次是协议接口层、功能软件层、缓存层和磁盘管理层。协议接口层是存储系统的入口,服务器通过该层与存储系统内部交互。功能软件层实现了存储系统的附加功能,比如快照、克隆、远程复制和数据加密等等。缓存层实现热点数据的缓存功能。磁盘管理层实现对磁盘的管理,它将普通的物理磁盘抽象为存储资源池,然后划分为逻辑磁盘,也就是所谓的LUN。

本节重点介绍一下缓存层,缓存层的主要功能是根据应用访问数据的局部性原理,实现对热点数据的缓存,这样可以极大的提升存储系统的性能。但有个问题,就是如果出现控制器宕机或者掉电等问题,将会导致缓存数据丢失,因此,这里缓存需要特别设计。存储系统的缓存除了主功能外,还要额外的实现另外2个功能,一个是缓存镜像,另外一个是缓存掉电保护。

缓存镜像类似于磁盘的RAID1,其实现跨越控制的缓存间的数据镜像,也就是对于写入数据,会同时写到2个控制器的缓存之后,才会给服务器返回写入成功。这样,任何控制器的宕机都不会影响导致数据的丢失。缓存镜像的策略依赖存储系统内的集群管理软件进行控制,因为实际异常情况非常多,包括控制器宕机、掉电、心跳链路故障和磁盘故障等等。因此,集群软件根据实际情况进行调度,保证整个系统的可用性和可靠性。

缓存掉电保护是是针对缓存易失性的另外一个保障手段。在每个控制器中都有一个电池和SSD磁盘,当出现系统掉电情况是,该子系统可以通过电池维持工作,然后将数据从内存写入SSD硬盘中。而系统恢复时再将数据写入后端磁盘中。关于缓存的内容本身是非常复杂的,本节概括性的介绍其架构,关于更多细节本号后续再详细介绍。

磁盘系统的可靠性

磁盘在整个存储系统中是最为易损的部件。虽然在消费级的产品中磁盘几年都不会出现故障,但企业应用中磁盘的故障率确实最高的。这是因为,在企业应用中磁盘通常是满负荷运行的,对磁盘的消耗非常之大。因此,在数据中心,普通机械磁盘运行3年左右出现故障的概率会大于90%。鉴于上述原因,企业级存储必须解决磁盘故障的问题。

企业级存储保证磁盘子系统可靠的通用方法是通过RAID实现,RAID有多个级别,分别实现不同的数据保护等级(请参考本号历史文章)。所谓RAID其实就是将多个磁盘构成一个磁盘组,磁盘间通过冗余数据进行保护,这样当出现磁盘故障的时候可以通过其它非故障磁盘的数据恢复故障磁盘中的数据。比如RAID5可以保证在有一块磁盘出现故障的情况下正常工作,而RAID6则可以保证有2块磁盘同时出现故障的情况下仍能正常工作。

现代企业存储在原生RAID的基础上进行有深度优化,可以构建一个存储资源池,池中的磁盘通过类似RAID的数据校验方式进行数据保护。而磁盘资源则是在该存储资源池的基础上划分。

数据传输可靠性

企业级应用对数据的可靠性的要求非常苛刻,以银行为例,如果差了一个数字可能会造成不可估量的后果。因此,企业级存储系统对数据可靠性的设计也是非常苛刻的。在数据传输中,企业级存储实现了一种称为T10 DIF的技术,该技术实现端到端的数据正确性保障。这样即使是存储系统中的CPU故障、内存错误和HBA等错误都能及时发现,并保障数据的正确性。

由于篇幅问题,本文先到这里,后续详细介绍每种技术的实现细节。

相关推荐