用于在可组合基础设施中保持存储设备故障容差的方法和系统与流程

文档序号:24790875发布日期:2021-04-23 15:32阅读:107来源:国知局
用于在可组合基础设施中保持存储设备故障容差的方法和系统与流程
用于在可组合基础设施中保持存储设备故障容差的方法和系统
1.发明人:james g.hanko(j
·
g
·
汉科),christopher unkel(c
·
温克尔),jean

francois remy(j

f
·
雷米)
技术领域
2.本发明涉及其中计算设备(服务器)通过网络或其他通信机制访问磁盘驱动器(在服务器外部)的方法和系统,并且涉及用于实现此类方法和系统的设备。根据一些实施例,磁盘驱动器被组织成存储组(例如,使得每个存储组中的驱动器具有至少一种耦合故障机制)并且根据驱动器的存储组成员关系来将驱动器分配给服务器(并且通常也将数据项放置在服务器中)。


背景技术:

3.以下定义贯穿本说明书(包括权利要求中)适用:
[0004]“存储设备”表示被配置成存储和检取数据的设备(例如,磁盘驱动器或闪存)。通常使用逻辑块地址(lba)和数个块来访问存储设备。逻辑块是总存储容量的固定大小的块(例如,512字节或4096字节);
[0005]“磁盘驱动器”(或“驱动器”)表示大容量数据存储设备。磁盘驱动器的示例包括(但不限于):包含旋转磁介质或闪存单元的驱动器,或实现至少一种其他数据存储技术的驱动器;
[0006]“jbod”(或集束磁盘(just a bunch of disks))表示包含一组至少两个磁盘驱动器的外壳。该外壳通常具有冗余电源和数据通信连接;
[0007]“可组合基础设施”表示用于设计包括服务器(各自实现至少一个计算元件)和磁盘驱动器的系统(例如,数据中心)的技术,其中磁盘驱动器在服务器外部(并且使用数据网络或其他通信机制附连到或耦合到服务器),使得磁盘驱动器的子集可分配(可指派)给服务器中的各个服务器,并且每个服务器能够使用在其外部并且已经分配给其的磁盘驱动器中的至少一个磁盘驱动器(例如,在其上存储数据)。本文中通信机制有时被称为(具有可组合基础设施的系统的)“通信子系统”。每个服务器还可以(但不是必须)包括(例如,直接包含)至少一个内部磁盘驱动器,但是此类内部磁盘驱动器(如果有的话)不是前面句子中提到的(外部的且可分配的)磁盘驱动器中的一者。例如,服务器中的至少一个服务器可包括仅用于引导其操作系统的内部磁盘驱动器(本文中有时被称为“引导”驱动器)。作为另一个示例,服务器中的至少一个服务器可以不包括任何内部磁盘驱动器。作为另一个示例,服务器中的至少一个服务器可包括内部磁盘驱动器(例如,das磁盘驱动器),服务器将该内部磁盘驱动器用于除了引导服务器的操作系统之外的至少一个操作,但是该内部磁盘驱动器不是系统的外部和可分配驱动器中的一者。在该上下文中,内部磁盘驱动器(其在服务器内部)可被包含在服务器的底架内,或者尽管它不被包含在服务器的底架内,但它可被直接线接到服务器的计算元件(计算子系统)。根据(本段中)上述技术设计的系统(例如,数据中
心)在本文中有时被称为可组合基础设施(或可组合架构)、或具有可组合基础设施(或可组合架构)的系统。具有可组合基础设施的系统的驱动器通常(但不一定)作为“原始”存储设备被(它们被分配给的服务器)直接访问,而(除了由服务器本身提供的之外)没有提供raid、快照处理、去重服务等(这些服务传统上在nas和san环境中可获得)的能力。在一些实施例中,具有可组合基础设施的系统的驱动器可作为“原始”存储设备被raid控制器直接访问,以将来自可组合基础设施的服务器的数据存储在驱动器上;
[0008]“服务器”表示一种计算设备(计算机或处理器),该计算设备(计算机或处理器)被配置成运行应用并且通常还用于跨网络(或其他通信机制)访问和使用存储设备(例如,磁盘驱动器)以存储和检取数据(例如,文件和/或应用)。服务器通常包括被编程为和/或以其他方式配置成运行应用的至少一个计算子系统(本文中有时称为“计算元件”);
[0009]“适配器”表示一种设备,该设备被配置成将存储设备(例如,磁盘驱动器)或包括两个或更多个存储设备的存储系统(例如,包含两个或更多个磁盘驱动器的jbod)的设备连接到具有可组合基础设施的系统的通信子系统(例如,网络)。在题为“method and system for balancing storage data traffic in converged networks(用于在融合网络中平衡存储数据流量的方法和系统)”的美国专利9,794,112中描述了适配器的示例;
[0010]“服务器接口”表示一种服务器部件,该服务器部件将服务器连接到具有可组合基础设施的系统的通信子系统(例如,网络),并且“适配器接口”表示一种适配器部件,该适配器部件将适配器连接到具有可组合基础设施的系统的通信子系统(例如,网络)。服务器接口(或适配器接口)的示例是物理设备(即,网络接口控制器(nic))和多个nic的软件定义的包装器(如用于链路聚合)。在本发明的一些实施例中,服务器接口(或适配器接口)是在融合网络中具有其自己的因特网协议(ip)地址的硬件或软件元件;
[0011]
在可组合架构中,“计算机架”表示服务器的机架。通常,每个服务器不包含用于大容量存储的任何磁盘驱动器(但是经常地,其包含用于引导其操作系统的磁盘驱动器)。
[0012]
服务器的“das”(或“直接附加存储”)表示用于(服务器的)计算元件的大容量存储的一个或多个磁盘驱动器,其中每个这样的磁盘驱动器(有时被称为“das驱动器”)直接线接到服务器的计算元件(计算子系统)。通常,服务器的每个das驱动器被包含在服务器的底架内。有线连接技术的示例包括(但不限于)sata、sas和nvme;
[0013]“数据节点”表示被配置成执行针对横向扩展(scale

out)应用(例如,hadoop)的存储操作的服务器(或由服务器实现的虚拟机或服务器的其他元件)。
[0014]“横向扩展应用”表示一种应用,服务器被配置成运行该应用(通常,用软件对服务器进行编程以执行该应用)以协调该服务器的行为与(使用数据网络或其他通信机制)附连到或耦合到该服务器的其他服务器(通常也被配置成运行相同应用)的行为,从而允许该服务器与其他服务器中的至少一个服务器协作以执行处理操作(例如,从而以分布式方式解决问题)。例如,为了以分布式方式解决问题,所有服务器(各自被配置成运行相同的横向扩展应用)可以运行协调它们的行为的横向扩展应用;
[0015]“hadoop”表示由阿帕奇基金会(apache foundation)提供的一种横向扩展应用;
[0016]
应用(例如,横向扩展应用)的“数据放置策略”表示(多个)规则,运行该应用的服务器根据该(多个)规则放置数据项(例如,向一个或多个其他服务器发送数据项)和/或(例如,在服务器外部的磁盘驱动器上)存储数据项。“数据复制策略”表示一种数据放置策略,
服务器根据该数据放置策略的(多个)规则在服务器外部的磁盘驱动器上以冗余方式存储数据项;
[0017]“nas”(或“网络附加存储”)表示一种数据存储架构,其中外部文件服务器(即,向至少一个其他服务器的计算元件)提供对文件形式的数据的访问。nas系统通常提供错误容差、去重以及快照服务,尽管是以比das高得多的成本;
[0018]
本文中“raid”(最初表示“廉价磁盘的冗余阵列”)或“raid技术”或“raid功能”表示用于通过在多个磁盘驱动器上以冗余方式存储数据来组合磁盘驱动器(例如,不可靠磁盘驱动器)(或组合磁盘驱动器的操作)以创建可靠存储机制的技术。在其上数据项是通过或根据raid技术或raid功能(以冗余方式)存储的数据的磁盘驱动器在本文中被称为“raid阵列”或“raid集”。
[0019]“san”(或“存储区域网络”)表示一种存储架构,其中外部存储头提供(即,向服务器的计算元件提供)到存储的块级访问。san系统通常提供错误容差、去重以及快照服务,尽管是以比das高得多的成本;
[0020]“软件定义的存储”表示一种基础设施,其中软件模块或系统负责为服务器供应(例如,向每个服务器的计算元件提供)存储。
[0021]“存储组”表示一组磁盘驱动器(例如,通过被编程的计算设备组织在一起成一个集合的一组),该一组磁盘驱动器可提供分配池(例如,替换池),并且当被构造成对应于至少一个共同故障场景时,该一组磁盘驱动器可用于确保服务器(或应用)对数据项的访问能够在故障中幸存。在本文中,(服务器的)分配池表示可用于分配给服务器的一组驱动器。分配的示例是替换,在当驱动器(先前被分配给服务器)故障时的意义上,将另一个驱动器分配给服务器(作为故障驱动器的替换)是分配的实例,有时被称为故障驱动器的“替换”。存储组的示例包括:在一个或多个jbod中的所有驱动器,以及在一个或多个存储机架中的所有驱动器;
[0022]
(例如,如在与驱动器有关的“共同故障”风险、或关注模式、或场景中)磁盘驱动器的“共同故障”表示作为驱动器的共同依赖性的结果,所有驱动器一起发生的故障。例如,安装在单个机架(其中机架耦合到网络,并且一组电源连接和网络交换机附连到机架)中的磁盘驱动器具有对机架状态的共同依赖性,并且因此通常受制于由于机架的故障而将导致所有驱动器故障(即,变得不可经由网络访问)的共同故障风险。受制于一个共同故障风险(或共同故障风险的单个集合)的所有驱动器的集合有时被称为“共模域”;并且
[0023]
在可组合基础设施中,“存储机架”表示磁盘驱动器的机架和/或包括磁盘驱动器的jbod的机架,并且还可选地包括用于提供对驱动器(包括每个jbod中的驱动器)的访问的设备(例如,适配器)。可(与至少一个磁盘驱动器和/或jbod一起)被包括在存储机架中的适配器的示例是drivescale存储适配器。
[0024]
磁盘驱动器(旋转磁介质或闪存)通常用于在计算机上的大量数据的存储。各个磁盘驱动器可能故障,并且由此丢失存储在它们上的所有数据。如果重要数据仅存储在一个磁盘驱动器上并且它发生故障,则对企业的运营可能有巨大的负面影响。作为结果,已经使用各种技术来确保任何一个存储设备的故障不会破坏恢复数据的能力。
[0025]
在历史上,用于存储用于计算服务器的数据的磁盘驱动器直接连接到服务器(称为直接附加存储或“das”)、或通过网络连接到文件服务器(网络附加存储或“nas”)或块存
储头(存储区域网络或“san”)。在san存储的情况下,块存储头可连接到数据网络并且计算服务器也可以连接到数据网络,使得磁盘驱动器(被连接到存储网络的,存储网络与数据网络不同)经由块存储头连接到数据网络。用于每种类型的连接的技术是类似的,但是细节基于连接类型而变化。
[0026]
对于在单个系统上的直接附加存储(das),可由实现raid(廉价磁盘的冗余阵列)软件的硬件和软件部件来提供对数据丢失的数据保护,以确保一个磁盘驱动器的丢失不导致数据的丢失。类似地,在分别用于提供san和nas存储的所谓的存储头或文件服务器中使用raid技术。这些技术总体上防止数据的丢失。然而,在大部分情况下,单个服务器或存储头的故障可导致大量的时间来恢复对数据的访问。
[0027]
创建了被称为横向扩展架构的新应用架构,以解决大于任何一个计算机可以处理的问题。在这样的架构中,多个计算机(通常,大量的较便宜的计算机,每个计算机包括至少一个das驱动器)中的每个计算机执行横向扩展应用,使得工作的各片段被散布到诸计算机,并且部分的结果被合并回到一起(例如,到一个计算机)以形成期望的答案(最终结果)。计算机是通过通信机制(例如,数据网络)耦合在一起的服务器,并且每个服务器运行横向扩展应用,横向扩展应用协调它们的行为以解决问题。然而,在许多计算机对解决方案做贡献的情况下,通常会有许多情况其中它们中的至少一个计算机坏掉或者以其他方式不能正确地操作。虽然经常可能在一定时间之后从坏掉的计算机中恢复数据,但是在数据中的一些不可用的情况下可能不能计算出问题的完全答案。处理数据可用性问题的最初想法是应用(其被安装在许多服务器上并且协调它们的行为)将确保将数据中的每个项被提供给数个这样的服务器(有时被称为数据节点),其中假设每个服务器将(例如,在服务器的das磁盘驱动器上)存储该项,使得服务器中的任一者的故障(例如,服务器的das磁盘驱动器的故障)将即使在短时间内也不会丢失任何数据或不会使数据不可用。使用在多个服务器的das驱动器上的此类冗余存储,在任何单独的服务器内(或直接线接到任何单独的服务器)的das驱动器上使用任何raid技术将是降低效率的,因为一个服务器本身的丢失将移除对在其内(或在直接线接到其的das驱动器上)复制的数据的访问,同时仍引起用于数据复制的额外存储空间的成本。
[0028]
已经实现一些横向扩展应用以考虑到由于安装在单个数据中心机架上而可能一起故障的设备组,其中认识到可以将许多服务器和它们的磁盘驱动器安装到数据中心机架中,其中一组电源连接和网络交换机附连到每个机架。为了避免因为机架的电源或网络连接的故障而丢失对数据的访问的可能性,一些横向扩展应用(例如,hadoop)实现数据放置策略以将每个数据片段(块)放置在不同机架中的服务器上,以确保每个片段被存储在多于一个机架上。然而,此类方法没有识别或解决如何以考虑到共同故障风险的方式(例如,高效方式)(向可组合架构的每个服务器)指派服务器外部的驱动器,并且此类方法的数据放置策略不能考虑到许多共同故障风险。例如,如果在机架中存在可组合架构的多个设备集合,并且这些集合中的每个集合共享不同的共同故障风险,常规方法不能考虑到此类不同的共同故障风险。作为另一个示例,即使常规方法将单个数据片段的副本放置到多个机架中的服务器上,如果所有这些服务器将数据存储在具有共同故障风险的驱动器(例如,全都在单个jbod中的驱动器)上,则共同故障(例如,包括所有驱动器的单个jbod的故障)的发生可使数据不可访问。
[0029]
随着时间推移,传统的数据中心环境从das移动到其他附连类型(例如,nas和san),因为(根据das)将计算元件和(多个)存储元件放置在单个设备中使得在计算元件相对于存储元件的相对需求改变时难以进行调整。在横向扩展应用中的服务器上使用das存储允许数据中心的总体成本更低并且使数据中心与基于nas和san的传统数据中心架构相比递送更高的性能,但是它引入了与最初使das在传统数据中心被很大程度上放弃的不灵活性相同的不灵活性。
[0030]
现代数据中心正在开始使用新的“可组合基础设施”的概念。在可组合基础设施中,服务器中的计算元件(数据节点)通过通信机制连接到存储(至少一个磁盘驱动器)。通信机制可以是网络(例如,标准数据网络),或者它可以实现另一种通信技术(例如,pcie,其中“pcie”表示外围组件快速互连,一种串行计算机扩展总线标准)。
[0031]
通常,(可组合基础设施的)许多磁盘驱动器被收集到被称为jbod(集束磁盘)的盒中,使得可经由通信机制访问每个磁盘。jbod(或多个jbod)可安装在同一机架中作为(多个)服务器,或者jbod(或多个jbod)和(多个)服务器可放置在分开的机架中。在一些方式中,该布置类似于传统san,但是为了降低成本并提高性能,每个远程磁盘驱动器被提供为原始驱动器,而不作为可提供诸如raid之类的特征的存储阵列的一部分。因此,如上所述,在横向扩展应用架构(其中每个服务器包括至少一个das驱动器)中,在横向扩展应用架构的单独服务器内或直接线接到横向扩展应用架构的单独服务器的das驱动器上实现raid将是低效率的,在(可组合基础设施的)数据连接机制中的raid特征的缺少在没有缺点的情况下(相对于横向扩展应用架构)提供了成本和性能益处。
[0032]
因此,用于横向扩展应用的可组合基础设施的使用可提供das的低成本和高性能,同时避免了das在调整以改变存储与计算设备的比率方面的不灵活性。然而,可组合基础设施的常规实现尚未解决如何在任何设备故障的情况下防止丢失对数据的访问同时确保可分配存储资源的池足够大的问题。为了使资源分配有效,期望确保用于分配的资源池尽可能大。否则,数据中心面临被称为资源筒仓(silo)的问题。即,通过将资源划分成筒仓并且限制可使用哪个筒仓,可以经常达到这样的情况,使得存在足够资源以执行期望的分配,但也使得资源在筒仓中,不能用于操作。但是,如果磁盘驱动器到服务器的分配不受限制,则这可导致以下情况:一台设备的故障可能引起数据项的丢失。例如,如果磁盘驱动器到服务器的分配不受限制,并且应用(例如,hadoop)将单个数据片段的副本放置到多个机架中的服务器上,并且可组合基础设施已经为来自单个jbod的所有这些服务器提供磁盘驱动器,则一个jbod盒的故障可使数据不可访问(例如,违反了hadoop保持数据始终可访问的承诺)。发明人已经认识到,在用于横向扩展应用的可组合基础设施中,对磁盘驱动器到服务器的分配进行严格或粗略的限制是不期望的(例如,因为它们可导致资源筒仓问题或导致其他低效率),但是需要一些此类限制以防止由于设备故障(例如,单个设备的故障)而造成数据丢失。
[0033]
本发明的典型实施例提供了确保能够满足横向扩展应用的耐久性和可用性要求、同时保留可组合基础设施中供应的软件定义的存储的性能、成本和灵活性益处的方法和系统。
[0034]
发明简述
[0035]
本发明的优选实施例的一个方面是根据涉及驱动器的至少一种耦合故障机制(例
如,安装在同一jbod中和/或在同一机架内)将磁盘驱动器组织成被称为存储组的集合。随后可以由存储组中的一个存储组中的每个相关驱动器的成员关系来引导(例如,根据存储组中的一个存储组中的每个相关驱动器的成员关系来作出)驱动器分配和数据放置决策。例如,如果驱动器的第一子集受制于第一耦合故障风险并且驱动器的第二子集受制于第二耦合故障风险,则可将驱动器组织成第一存储组(由驱动器的第一子集组成或包括驱动器的第一子集)和第二存储组(由驱动器的第二子集组成或包括驱动器的第二子集),并且可将驱动器分配给服务器并且实现数据放置策略以确保将每个数据项的副本(将由服务器存储在第一存储组中的驱动器中)从服务器发送到至少一个其他服务器(以供由其他服务器存储在第二存储组中的驱动器中),从而确保第一子集中的任何驱动器(或驱动器的jbod)的故障不能消除对任何数据项的访问。在一个优选实施例中,在具有许多存储机架的大型数据中心中有用的是,存储组由一个物理机架内的所有驱动器和jbod组成。在另一个优选实施例中,在较小数据中心中有用的是,在每个存储机架中的jbod被分成两个或更多个存储组。在其他实施例中,每个jbod、或者甚至每个磁盘驱动器被指定为其自己的存储组。可以确定各种大小的存储组以实现不同的益处。
[0036]
在一类实施例中,驱动器(组织在存储组中)与具有可组合基础设施的系统(例如,数据中心)中的服务器一起使用。服务器中的每个服务器被配置成(例如,编程为)执行至少一个应用(例如,横向扩展应用,其可以是例如hadoop或另一机架感知(rack

aware)横向扩展应用)。根据存储组中的驱动器中的每个驱动器的成员关系(根据横向扩展应用,或者根据实现raid技术的应用来确定raid集)将驱动器指派(即,分配)给服务器中的至少一个服务器(例如,对于服务器中的每个服务器,分配给该服务器的所有驱动器都属于每个服务器的单个存储组)。而且通常,服务器中的至少两个服务器运行公共应用(例如,由服务器运行的横向扩展应用是相同或兼容的应用),该公共应用允许服务器中的每个服务器访问已经分配给它的驱动器,但不访问未分配给它的驱动器,并且根据指派给服务器的驱动器的存储组成员关系来设置公共应用的数据放置策略(例如,以确保将根据应用存储的每个数据块或其他数据项以冗余方式存储组至少两个不同的存储组中)。例如,如果公共应用是横向扩展应用,则数据放置策略可要求将数据项的副本(将由第一服务器存储)从第一服务器发送到至少一个其他服务器(用于由其他服务器存储),其中选择该其他服务器以确保数据项将冗余地存储在至少两个不同的存储组中(例如,以确保任何驱动器、jbod或存储机架的故障不能消除对任何数据项的访问)。
[0037]
在一些实施例中,驱动器(组织在存储组中)与具有可组合基础设施的系统(例如,数据中心)中的服务器(并且可选地还有在服务器中的每一者以及驱动器中的每一者外部的至少一个raid控制器)一起使用。驱动器在服务器外部并且可指派给服务器。服务器中的至少一个服务器(或至少一个所述raid控制器)被配置成运行应用(例如,不是横向扩展应用的应用),该应用允许服务器(或raid控制器)实现raid技术以将数据存储在包括系统的驱动器的raid集中(例如,以存储数据本身,和/或将数据放置在存储该数据的至少一个其他服务器上)。通常,为服务器(或与服务器交互的raid控制器)分配属于至少两个存储组的磁盘驱动器,以确保存储来自服务器的冗余数据的raid集(例如,raid

1或raid

10集)包括属于不同存储组的驱动器。可确定存储组并分配驱动器,使得每个raid集的驱动器包括不具有共同故障机制的驱动器(例如,raid集包括不同jbod的驱动器,并且在可能的情况下,
包括不同存储机架的驱动器)。在一些此类实施例中,为了实现raid技术,服务器的子系统可用作raid控制器,并且在服务器上运行的应用可用作raid主机。服务器(或服务器外部的raid控制器)构造raid集,使得对于所存储的每个数据项,不同存储组的驱动器存储数据项的副本(例如,使得存储数据项并且其驱动器属于单个存储组的任何jbod的故障将不防止由服务器对数据项的访问)。例如,在一个此类实施例中,n是用于要存储的每个数据项的复制因子(例如,n=2或n=3),raid集的驱动器被确定为使得驱动器中的不超过1/n属于单个存储组。因此,用于保持同一数据项的副本的raid集的n个驱动器属于不同的存储组。
[0038]
本发明的一些实施例是具有可组合基础设施的系统(例如,数据中心)。其他实施例是对于实现此类系统有用的设备(例如,服务器)。在一些实施例中,系统包括耦合到通信机制(例如,网络)的服务器和磁盘驱动器,已经将驱动器组织成存储组(通常,使得存储组中的至少一个存储组由具有至少一种耦合故障机制的驱动器中的那些驱动器组成或包括具有至少一种耦合故障机制的驱动器中的那些驱动器),并且没有磁盘驱动器被直接包含在任何服务器中。通常,服务器中的每个服务器是或者包括被配置成(例如,编程为)运行应用(例如,横向扩展应用)的计算元件。根据存储组中的驱动器中的每个驱动器的成员关系(例如,通过服务器运行的应用)为服务器中的每个服务器分配驱动器的不同子集。而且通常,在(例如,根据服务器运行的应用)服务器中的每个服务器的操作中,所述服务器中的每个服务器根据数据放置策略(例如,由在所述服务器中的每个服务器上运行的应用实现)在指派(即,分配)给它的驱动器中存储数据,其中已经根据指派给所述服务器中的每个服务器的驱动器中的每个驱动器的存储组成员关系来设置数据放置策略(例如,以确保将每个所存储的数据块或其他数据项存储在至少两个不同的存储组中)。系统还可包括不包括在任何存储组中的附加的磁盘驱动器(例如,服务器中的至少一个服务器可直接包含用于引导其操作系统的引导驱动器,但是此类引导驱动器不是已经被组织成存储组的磁盘驱动器中的一者)。
[0039]
在一些实施例中,系统包括管理员,管理员运行管理应用以实现管理过程,包括通过根据存储组中的成员关系将驱动器分配给系统的服务器,并且通常还通过实现针对驱动器所分配给的服务器的数据放置策略。管理员通常是服务器,该服务器被配置成(例如,编程为)运行管理应用并且与运行在系统的其他服务器上和/或至少一个raid控制器上的应用进行交互(例如,以将驱动器分配给其他服务器和/或将其他服务器配置成根据数据放置策略进行操作、和/或配置raid控制器)。
[0040]
在一些实施例中,服务器(不是管理员)接合可组合基础设施以根据存储组中的驱动器的成员关系发起驱动器到至少一个其他服务器的分配(例如,考虑到每个其他服务器的特定用例)。在这些实施例中,(多个)其他服务器可以实现由第一服务器分配给该(多个)其他服务器的任务,包括通过例如响应于来自在第一服务器上运行的软件框架(例如,用于通常在短时间内将任务部署到多个服务器以供执行的编排系统)的请求而执行驱动器的分配(和随后的释放)(以及根据用于确保在不同存储组中的数据的冗余存储的数据放置策略来放置数据)。在一些实施例中,第一服务器(不是管理员)通过可组合基础设施的raid控制器来请求数据项的存储,并且raid控制器(响应于该请求)通过实现raid技术来进行操作,以将数据项以冗余方式存储在不同存储组中的驱动器上。
[0041]
在典型实施例中,可通过调整存储组组成来实现各种水平的故障容差和驱动器分
配(包括驱动器替换)灵活性。
[0042]
在本发明的一些实施例中,如果最大资源分配灵活性是数据中心的主要目标,则受制于任何单个项目故障(直到机架级别)将不使任何数据项不可访问的约束,将数据中心中的所有存储机架划分成两个存储组,其中两个存储组之间具有大约相同数量的驱动器和存储容量。通过仅从一个存储组分配针对数据中心的每个服务器的所有驱动器,并且设置数据复制(放置)策略(例如,调整由服务器执行的横向扩展应用的可调整数据放置策略),以确保每个数据项被复制在使用至少两个不同存储组的(至少两个计算机架中的)至少两个服务器上(使得数据项驻留在至少两个存储组中),可以达到最大资源分配灵活性的目标。如果任何驱动器故障,则可从数据中心中的基本上一半的驱动器中选择它的替换,而不造成故障容差的任何损失(即,替换可来自存储组中的任何jbod,该存储组涵盖数据中心的一半)。
[0043]
在本发明的一些实施例中,如果故障容差是主要目标,则在任何单个项目的故障(直到机架级别)将不会使任何数据项的可访问性减少超过一个副本的意义上,可以将数据中心中的所有存储机架划分为三个大小大致相等的存储组,并且可将每个数据项放置在至少三个存储组中。通过全部从(任何)一个存储组分配针对每个服务器的驱动器并且在至少三个计算机架中的服务器上要求数据副本,任何两个驱动器、服务器、jbod或机架的故障不能移除对任何数据项的访问。如果一个驱动器需要替换,则数据中心中的大约三分之一的驱动器将有资格替代它,而不损害数据访问中的错误容差。
[0044]
在一些实施例中,分配给服务器的所有驱动器都在同一存储组中。这确保由服务器存储的每个数据项将在存储组中,而与由服务器选择的用于保持数据的驱动器无关。还优选地将横向扩展应用(在服务器上运行)的数据放置策略设置为确保所有数据项由一个服务器发送(放置)到至少一个其他服务器,使得每个项被存储在至少两个不同的存储组中。
[0045]
在横向扩展应用能够控制到磁盘驱动器级的(由服务器对数据项的)数据放置的一些实施例中,分配给服务器(并由服务器使用)的驱动器可属于多个存储组。如果将不同存储组中的驱动器分配给服务器,则优选地将横向扩展应用(在服务器上运行)的数据放置策略设置为确保每个单独数据项的副本散布在存储组之间(即,每个项被存储在至少两个存储组中的每一者中),以确保没有单个故障可以防止对任何项的访问。
[0046]
在一些实施例中,一个或多个适配器用于将驱动器(在jbod中或通过其他方式连接)耦合到网络,并且服务器也耦合到网络。将驱动器组织成存储组,使得适配器的连接性与驱动器的故障特性兼容。本发明的各方面包括:适配器;与此类适配器集成的磁盘驱动器(或其他存储设备);与此类适配集成的jbod(或其他存储设备系统);以及服务器(编程为和/或以其他方式配置成实现本发明的方法的实施例)。
[0047]
在一些实施例中,本发明是一种方法,用于配置具有可组合基础设施的系统,使得系统的从驱动器被组织成存储组(通常使得每个存储组中的驱动器具有至少一种耦合故障机制),包括通过根据驱动器的存储组成员关系将驱动器分配给系统的服务器(并且通常还设置系统的数据放置策略,使得将数据项放置在服务器中)。其他实施例是用于在此类系统的驱动器上存储数据的方法(包括用于在包括驱动器的raid阵列中存储数据的raid方法)、用于将数据项放置在此类系统的服务器上以存储在系统的驱动器中的方法、以及用于配置
或控制此类系统的设备(例如,服务器或raid控制器)的方法。其他实施例包括配置成执行任何此类方法的系统、以及配置成实现此类方法或用于在此类系统中使用的设备。本发明的各方面是在本发明的系统、适配器、磁盘驱动器、jbod、服务器或其他设备的任何实施例的操作中执行的方法。
[0048]
本发明提供了用于确保能够满足横向扩展应用(以及实现raid技术的应用)的耐久性和可用性(即,故障容差)要求、同时保留可组合基础设施中供应的软件定义的存储的性能、成本和灵活性益处的方法和系统。根据本发明的典型实施例解决的技术问题包括如何实现:
[0049]
具有故障容差、更高效率并且因此降低成本(即,通过降低或消除“资源筒仓”情况,在“资源筒仓”情况中,由于对如何能够分配存储的低效限制,可用存储未被分配给任何计算设备(服务器))、以及高性能(通过确保每个计算设备有足够存储来以高性能操作)的灵活的(具有对于每个计算设备的可调的磁盘驱动器存储与计算设备的比率)横向扩展架构。可通过在可组合基础设施中(使用根据本发明的实施例的存储组)实现横向扩展应用的来在降低成本的情况下满足横向扩展应用(以及实现raid技术的应用)的耐久性和可用性(即,故障容差)要求,由此保留可组合基础设施中供应的软件定义的存储的性能和灵活性益处;以及
[0050]
具有故障容差、以及更高效率并且因此降低成本(即,通过降低或消除“资源筒仓”情况,在“资源筒仓”情况中,由于对如何能够分配存储的低效限制,可用存储未被分配给服务器)的可组合基础设施。通过(根据本发明的实施例)使用存储组实现可组合基础设施来达到故障容差和提高的效率以及降低成本的益处,由此保留在可组合基础设施中供应的软件定义的存储的灵活性(可调的存储与计算设备比率)和高性能益处。
附图说明
[0051]
图1是具有可组合基础设施的本发明的系统的实施例的框图。
[0052]
图2是实现用于执行本发明的方法或其步骤的实施例的代码(例如,可执行以执行本发明的方法或其步骤的实施例的代码)的非瞬态存储的有形计算机可读介质。
[0053]
本发明的实施例的详细描述
[0054]
将参考图1描述具有可组合基础设施的本发明的系统的实施例的示例(以及根据本发明的实施例的在其配置和操作期间执行的方法)。
[0055]
图1的系统(其为数据中心)具有可组合基础设施。在图1的系统中,服务器1、3和30(以及可选地还有其他服务器)、适配器21、23和25(以及可选地还有其他适配器)、磁盘驱动器28以及jbod 27和29(以及可选地还有其他磁盘驱动器和/或jbod(例如,被包括在存储机架12中的那些))中的每一者都耦合到网络20。jbod 22通过适配器21耦合到网络20,磁盘驱动器24通过适配器23耦合到网络20,并且jbod 26通过适配器25耦合到网络20。每个jbod包括多个磁盘驱动器。系统的一些实现方式还包括耦合到网络20的raid控制器40。
[0056]
元件1、3、30和40中的每一者都是被编程为运行应用软件的服务器。更具体地,服务器1被配置成包括(例如,被编程为用软件实现)应用子系统4,并且因此有时被描述为被配置成运行应用4。服务器3被配置成包括(例如,被编程为用软件实现)应用子系统5,并且因此有时被描述为被配置成运行应用5。服务器30被配置成包括(例如,被编程为用软件实
现)应用子系统31,并且因此有时被描述为被配置成运行应用31。raid控制器40是被配置成包括(例如,被编程为用软件实现)应用子系统41的服务器,并且因此有时被描述为被配置成运行应用41。每个服务器包括被配置成将服务器连接到网络20的服务器接口(例如,服务器1的服务器接口1a、服务器3的服务器接口3a以及服务器30的服务器接口30a)。每个服务器还可包括磁盘驱动器(例如,仅用于引导的驱动器),根据本发明的任何实施例,该磁盘驱动器(例如,仅用于引导的驱动器)不可指派(或不可分配)给图1系统的任何其他服务器。
[0057]
每个适配器(例如,适配器21、23和25)包括被配置成将适配器连接到网络20的适配器接口(例如,适配器被编程为用软件实现或以其他方式被配置成实现适配器接口子系统)。在一些实施例中,图1系统的至少一个(例如,每个)适配器接口和/或至少一个(例如,每个)服务器接口可被实现为物理设备(即,网络接口控制器(“nic”))、或多个nic的软件定义的包装器、和/或是具有其自己的因特网协议(ip)地址的硬件或软件元件。
[0058]
通常,图1系统的服务器中的至少一个服务器(例如,元件1、3、30和40中的任一者、或耦合到网络20的另一服务器(图1未示出))被实现为管理员(如下所述),管理员具有的应用子系统与不是管理员的系统的其他服务器的应用子系统不同。
[0059]
服务器1和服务器3(以及可选地还有其他服务器)安装在机架10(其为“计算机架”,因为其仅包括服务器)中。元件21、22、23、24、25和26安装在机架11(其为“存储机架”,因为其包括用于为驱动器提供网络访问的磁盘驱动器和适配器,而不包括任何服务器或raid控制器)中。存储设备27、28和29以及服务器30(以及可选地还有其他存储设备和/或服务器)安装在机架13中。
[0060]
网络20是承载存储数据话务(traffic)和其他(非存储数据)话务两者的(有时被称为“融合网络”的类型的)网络。在一个实施例中,网络20是基于以太网的网络,在该网络上在耦合到网络的服务器(例如,服务器1、3和30、以及控制器40)和耦合到网络的存储设备之间发送所有话务。这样的基于以太网的网络的元件(例如,服务器1、3和30、控制器40、以及适配器21、23和25)可被配置成根据iscsi(以太网小型计算机系统接口)联网协议来在网络上通信。在一些实施例中,网络20通过另一类型的连接(例如,roce、光纤通道(fibre channel)、无限带宽(infiniband)、pcie、或一些其他连接类型)耦合系统的服务器和存储设备。替代地,通过将系统的服务器和存储设备耦合在一起的另一通信机制(例如,上述pcie技术)来替换网络20。存储设备中的一些经由适配器(例如,适配器21、23和25)耦合到元件20,并且存储设备(例如,jbod 27、磁盘驱动器28以及jbod 29)中的一些在不使用适配器或单独地实现的适配器的情况下耦合到元件20。
[0061]
可组合基础设施的磁盘驱动器(例如,驱动器22、24、25、27、28、29、以及在机架12中的驱动器)被组织成存储组,并且可根据存储组中的驱动器的成员关系来将驱动器指派给可组合基础设施的服务器(例如,服务器1、3和30)。驱动器可指派到的服务器中的每一者(例如,服务器1、3和30中的每一者)被编程为执行横向扩展应用(例如,应用4、5和31中的每一者都是横向扩展应用),例如,横向扩展应用可以是hadoop或另一机架感知横向扩展应用。根据横向扩展应用,服务器中的每一者可在指派给其的驱动器中的一者上(但不在未指派给其的驱动器中的任一者上)存储数据。在至少两个此类服务器运行公共应用的情况下(即,在由服务器运行的横向扩展应用是相同的或兼容的应用的情况下),可根据指派给服务器的驱动器的存储组成员关系来设置公共应用的数据放置策略(例如,以确保将根据应
用存储的每个数据块或其他数据项以冗余方式存储在至少两个不同的存储组中)。因此,每个服务器可以(根据公共应用的数据放置策略)在至少一个另一个服务器上放置数据项(将由服务器存储),以供由所述每个另一个服务器在被指派给所述每个另一个服务器的驱动器上存储(例如,以确保将数据项以冗余方式存储在至少两个不同的存储组中)。
[0062]
可根据存储组中的驱动器的成员关系将可组合基础设施的磁盘驱动器(例如,驱动器22、24、25、27、28、29、以及机架12中的驱动器)由raid控制器40(即,根据实现raid技术的应用41)指派给可组合基础设施的服务器(例如,服务器1、3和30),因为raid控制器被配置成运行应用41以(根据存储组中的驱动器的成员关系)确定驱动器的raid集并且在raid集上存储(或以其他方式导致存储)来自服务器中的任一者的数据项。
[0063]
例如,在一个实施例中,对于服务器1、3和30中的每一者,分配给服务器的所有驱动器属于每个服务器的单个存储组(即,指派给服务器1的驱动器属于第一存储组,指派给服务器3的驱动器属于第二存储组,,并且指派给服务器30的驱动器属于第三存储组)。服务器1、3和30运行公共应用(即,应用4、5和31是相同的或兼容的横向扩展应用),并且根据指派给服务器的驱动器的存储组成员关系来设置公共应用的数据放置策略(以确保将根据应用存储的每个数据块或其他数据项以冗余方式存储在至少两个不同的存储组中)。具体而言,数据放置策略可要求服务器1向服务器3和服务器30中的每一者发送数据项(将由服务器1存储在指派给服务器1的属于第一存储组的驱动器上)的副本(使得数据项将由服务器3存储在指派给服务器3的属于第二存储组的驱动器上,并且还将由服务器30存储在指派给服务器30的属于第三存储组的驱动器上)。可确定存储组以确保系统的任何驱动器、jbod或存储机架的故障不能消除对任何数据项的访问。
[0064]
通常,可组合基础设施的服务器中的一个服务器(例如,服务器1、3或30)被配置成(例如,编程为)作为管理员操作。在典型实施例中,管理员被编程为运行应用(管理应用),该应用实现管理过程,包括通过根据存储组中的成员关系将驱动器分配给系统的服务器、并且通常还通过实现针对驱动器所分配给的服务器的数据放置策略(据此,公共应用运行在其他服务器上,例如,以确保每个数据项在不同的存储组中的冗余存储)。运行在管理员上的管理应用可配置(或重新配置)数据中心,包括通过根据存储组中的成员关系将驱动器分配给数据中心的服务器(以及可选地还向数据中心的raid控制器通知分配和存储组信息)。管理员通常被配置成(例如,编程为)运行管理应用并且与运行在系统的其他服务器上和/或至少一个raid控制器上的应用进行交互(例如,以将驱动器分配给其他服务器和/或将其他服务器配置成根据数据放置策略进行操作、和/或配置raid控制器)。当管理程序已经被配置成具有关于可用于分配给服务器的驱动器以及与驱动器有关的耦合故障风险的知识时,管理程序本身可以确定存储组,或者管理程序可由用户配置成根据用户指定的存储组进行操作。管理应用通常具有允许人类用户输入对存储组确定的约束的用户界面。在一些情况下,用户界面可允许用户指定哪些是存储组。在操作中,例如,管理员与运行在每个服务器上的应用进行交互,以根据存储组成员关系将可组合基础设施的驱动器指派给每个服务器。
[0065]
例如,分别运行在服务器1、3和30上的(图1的)应用4、5和31、以及运行在机架10中的其他服务器上的应用可实现与由常规hadoop应用实现的那些功能类似的功能,其中(例如)应用4被实现为管理应用(实现与hadoop的资源管理器(resourcemanager)和名称节点
(namenode)的那些功能类似的功能)。与常规hadoop应用不同,管理应用(4)将(根据本发明的实施例)确定存储组,并且与应用5和应用31(以及运行在机架10中的其他服务器上的那些应用)进行交互以确保根据存储组成员关系将驱动器分配给服务器3和服务器30(以及机架10中的其他服务器),并确保服务器3和服务器30(以及机架10中的其他服务器)根据分配给其的驱动器的存储组成员关系来实现数据放置策略。数据放置策略可要求还将数据块(在一个服务器中)放置在两个其他服务器上,使得三个服务器将该块存储在至少两个(例如,三个)不同的存储组的驱动器中。管理员(服务器1)将跟踪系统的哪些其他服务器已经接收到每个块。
[0066]
在一些实施例中,管理软件被分解成两个或更多个单独的协作件(例如,软件子系统),这些协作件可被包括在单个设备(例如,服务器)或两个或更多个单独的设备(例如,两个或更多个服务器)中(并被配置成在单个设备(例如,服务器)或两个或更多个单独的设备(例如,两个或更多个服务器)上运行)因此,在一些实施例中,本发明的系统的管理员可以被实现为两个或更多个单独的设备(各自运行管理软件的不同子系统)。
[0067]
除了管理员之外的(本发明的系统的实施例的)服务器可以运行与管理应用兼容的应用。或者,管理员(其为服务器)和其他服务器都可运行相同的应用,但是在管理员上运行的应用被配置成(作为管理应用进行操作)具有特权(例如,根据存储组成员关系分配驱动器或确定数据放置策略的能力和权限),该特权在其他服务器上运行的应用中不被启用。
[0068]
本发明的系统的实施例的管理员可以与在系统的服务器上运行的应用进行交互,以授权(mandate)服务器实现raid功能。服务器本身可执行raid功能。或者,服务器可以使用可组合基础设施的raid控制器(例如,raid控制器40)来执行raid功能。通常,raid控制器(例如,raid控制器40的应用子系统41)也已经由管理员配置。服务器可通过向raid控制器发送(要存储的)数据来使用raid,使得作为响应,raid控制器构造raid阵列(包括通过根据存储组成员关系选择可组合基础设施的驱动器)并在其上存储数据。
[0069]
在实现raid技术的典型实施例中,服务器(例如,图1的服务器1、3和30中的任一者)在内部实现raid功能,以将数据存储在其经由可组合基础设施访问的外部驱动器上(通常,驱动器可由服务器经由可组合基础设施作为原始驱动器访问)。这与传统系统(不具有可组合基础设施)形成对比,在传统系统中,在服务器中(对于直接附加存储)或在存储阵列控制器中(对于nas和san)的(多个)磁盘驱动器的位置处执行raid功能。在典型实施例中,管理员可以(例如,通过网络20)向服务器断言用于将在服务器上执行的raid功能的指令(并且通常还有所需的故障容差水平),并且随后服务器实现raid功能,这包括通过确定raid阵列(例如,包括通过根据存储组成员关系选择可组合基础设施的驱动器来防止单点故障)。
[0070]
经常将raid与传统文件系统结构(非常类似于pc硬盘驱动器上的文件夹)一起使用,使得在计算设备(例如,服务器)上运行的应用除了将数据存储到其“本地”文件系统中之外不作出进一步放置决策,并且计算设备的raid控制器功能(软件子系统)实现raid技术以存储数据。本发明的一方面是使用可组合基础设施的远程驱动器(按存储组组织)以在远程驱动器上(根据存储组中的驱动器的成员关系)冗余地存储数据(来自服务器)的服务器中的raid控制器功能(通常在软件中,但替代地具有硬件加速或使用完整的硬件实现)或在服务器外部的raid控制器的性能。因为可组合基础设施,所以驱动器可用且可指派。
[0071]
在一些实施例中,使用raid技术将来自服务器(例如,图1的服务器1、3或30中的任一者)的数据(使用存储组信息)冗余地存储在远程驱动器上,其中由服务器外部的设备(例如,图1的raid控制器40)实现raid控制器功能,其中raid控制器、驱动器和服务器经由可组合基础设施的通信机制(例如,图1的网络20)耦合。传统的外部raid控制器具有预先指派的一组具有已知故障关系的驱动器。相反,根据本段中描述的实施例,raid控制器使用存储组信息来识别来自可组合基础设施的驱动器(并将它们组合以构建raid阵列),以在驱动器上实现数据(来自服务器)的冗余raid存储(以确保故障独立性)在这些实施例中,raid控制器通常被(例如,由管理员)通知驱动器的存储组,以便构建raid阵列。例如,raid控制器可被适当地编程(例如,可包括被适当地编程的服务器代理)以使用所提供的存储组信息以构建raid阵列。
[0072]
在典型实施例中,数据中心(具有可组合基础设施)的每个服务器的应用子系统(例如,服务器1的应用子系统4、服务器3的应用子系统5或服务器30的应用子系统31)或数据中心(具有可组合基础设施)的一些服务器中的每个服务器的应用子系统(例如,服务器1的应用子系统4、服务器3的应用子系统5或服务器30的应用子系统31)可被配置成发起服务器对耦合到数据中心的通信机制(例如,网络20)的磁盘驱动器(例如,根据本发明的实施例的已经分配给服务器的磁盘驱动器)的访问,并且数据中心的至少一个raid控制器的应用子系统(例如,raid控制器40的应用子系统41)被配置成访问耦合到数据中心的通信机制(例如,网络20)的磁盘驱动器,以(根据驱动器的存储组成员关系)在驱动器的raid阵列上以冗余方式存储来自数据中心的服务器的数据。在典型操作中,系统的管理员已经向应用子系统通知系统的驱动器的存储组成员关系。
[0073]
通常,由对于服务器考虑了特定用例的管理员(或服务器外部的另一设备)作出采用可组合基础设施来将驱动器分配给服务器的决策。例如,服务器1的应用子系统4可以实现管理应用,根据该管理应用,服务器1(作为管理员进行操作)根据存储组中的驱动器的成员关系来将磁盘驱动器分配给图1系统的其他服务器(并且通常还确定和/或实现数据放置策略)。然而,在本发明的一些实施例中,例如,响应于软件框架(例如,kubernetes,kubernetes是用于通常在短时间内将任务部署到多个服务器以用于执行的编排系统)的请求,由服务器本身实现将驱动器分配给一个或多个服务器的决策(和/或一个或多个服务器使用所分配的驱动器来实现raid技术的决策)。为了执行(例如,由kubernetes或类似的软件)指派给其的任务,服务器(例如,图1的服务器1、3和30中的任一者)可以(根据存储组成员关系)与任务指派一致地管理磁盘驱动器到一个或多个服务器的指派和释放。
[0074]
在常规横向扩展应用软件中,服务器通常被建模为具有das驱动器,使得每个单独服务器中的(多个)驱动器的唯一公共故障域是包含服务器的底架。有时根据服务器驻留的机架来管理每个服务器(以及其中包含的每个das驱动器)的故障域,使得一个机架中的数据的冗余副本被放置在第二机架中。如果在可组合基础设施(其中可指派的磁盘驱动器在服务器外部)中的服务器中使用,则此类横向扩展应用软件可能引入横向扩展应用的数据放置策略无法预料的耦合故障。然而,通过根据本发明的实施例为每个此类服务器指派所有驱动器(例如,通过对每个服务器仅从单个存储组指派驱动器),可以(根据本发明的实施例)将耦合故障域约束为被应用的标准数据放置覆盖。
[0075]
例如,具有可组合基础设施的数据中心可包括装满计算服务器的机架(“计算机
架”)和装满磁盘驱动器的jbod的其他机架(“存储机架”)。如果每个计算机架中的所有服务器仅从特定存储机架分配驱动器,则将数据放置在服务器上使得数据被存储在至少两个存储机架中的常规数据放置策略(例如,常规hadoop数据放置策略)也将确保数据的至少一个副本将驻留在与服务器相关联的存储机架之外。因此,任何单个驱动器、服务器、jbod、计算机架或存储机架的故障不能移除对数据的访问。根据本发明的实施例的存储组的使用可以简化此类操作,例如,将在每个存储机架中的所有jbod(并且由此,所有驱动器)分组到每个机架的唯一存储组。随后通过(根据本发明的实施例)仅将来自特定存储机架(即,存储组)的驱动器指派给计算机架中的所有服务器来简化驱动器到服务器的分配。根据本发明的分配的示例的益处在于,不需要改变横向扩展应用(例如,hadoop)的数据放置策略。然而,该分配的示例限制将驱动器指派给服务器时的灵活性。例如,如果每个计算机架中所需要的驱动器比由存储机架所提供的驱动器更多或更少,则剩余的资源可能会被浪费。
[0076]
一些横向扩展应用(例如,hadoop)允许安装修改数据放置算法以限制数据的副本的放置,以避免未由横向扩展应用直接建模的其他故障耦合机制。已经引入了许多此类特征来处理在虚拟机内的数据节点实例,其中若干此类数据节点实例可被托管在单个物理计算服务器上。使用这些特征,可以将附加的约束置于数据放置上,使得单个数据项的两个副本不能被放置到指定数据节点集合(例如,在物理服务器上的两个虚拟机)内的成员上。可以将这些特征与存储组组合(即,根据本发明的实施例,以新的方式使用),以提供防止横向扩展应用中的耦合故障的手段,同时很大程度上保留服务器和驱动器分配的灵活性以避免浪费资源。
[0077]
例如,假设具有许多存储机架和计算机架的大数据中心。进一步假设(根据本发明的实施例)确定存储组,使得每个存储组是整数个整个存储机架(即,第“i”存储组由n
i
个整个存储机架组成,其中n
i
是整数,并且指数i在存储组的数量的范围内),使得存在许多可用的存储组。随后,通过从一个存储组指派用于服务器的所有驱动器并(根据本发明的实施例)修改横向扩展应用的数据放置策略以确保所有数据项被发送到服务器、使得每个项被存储在至少两个不同的存储组中,可以确保任何驱动器、jbod或存储机架的故障不能消除对任何数据项的访问。结合确保至少两个计算机架中的服务器具有副本的横向扩展应用的通常策略,则确保任何驱动器、服务器、jbod、存储机架或计算机架的故障不能消除对任何数据项的访问是可能的。另外,取决于对每个存储组中的存储机架的数量(n
i
)的选择,与服务器相关联的(指派或分配给)驱动器可来自期望数量(例如,预定的大量)的存储机架,因此基本上消除了浪费资源的问题。
[0078]
鉴于本文的描述,对于本领域普通技术人员将显而易见的是,在各个机架中对存储和计算设备进行组合(而不是防止任何一个机架包括存储设备和计算设备两者)不改变本发明的适用性和价值。例如,假设横向扩展应用用于小的计算问题,并且所有存储资源(包括jbod)和计算资源适配在一个机架(例如,图1的机架11)中。尽管本发明不提供对一个机架的故障的保护(因为该机架包含所有资源),但是通过将jbod集合分成两个或更多个存储组,本发明仍可来用于在面对机架中任何单个部件的故障时(当有足够资源(例如,jbod和服务器)可用时)确保对数据的可访问性。在该环境中,将从一个存储组中指派每个服务器的所有驱动器。随后,通过(根据本发明的实施例)配置横向扩展应用的数据放置策略来确保每个数据项都被复制在使用至少两个不同存储组的至少两个服务器上,管理员可以确
保在机架中没有服务器、驱动器或jbod的故障能够消除对任何数据项的访问。
[0079]
由于典型的横向扩展应用仅基于具有要存储的数据的服务器来作出数据放置决策,所以我们已经描述了存储组的使用的示例,在所述存储组中分配给服务器的所有驱动器都在同一存储组中。这确保由服务器存储的每个数据项将在存储组中,而与由服务器选择的用于保持数据的驱动器无关。在此类示例中,优选地将横向扩展应用的数据放置策略设置为确保所有数据项由一个服务器发送到至少一个其他服务器,使得每个项被存储在至少两个不同的存储组中。然而,如果横向扩展应用具有控制到磁盘驱动器级的数据放置的方式,则本发明的一些实施例允许由服务器使用的驱动器来自(即,属于)多个存储组。在这些实施例中,(例如,由管理员)将横向扩展应用的数据放置策略设置成确保每个单独数据项的副本散布在存储组之间(即,每个项被存储在至少两个存储组中的每一者中),以确保没有单个故障可以防止对任何项的访问。因此,在一些实施例中,分配给服务器的驱动器中的一些在不同的存储组中。
[0080]
在一些优选实施例中,一个或多个适配器(例如,图1的适配器21、23和25)用于将驱动器(在jbod中或通过其他方式连接)耦合到具有可组合基础设施(其中服务器还耦合到通信机制)的系统的通信机制(例如,网络),并且驱动器被组织成存储组,使得适配器的连接性与驱动器的故障特性兼容。在这种情况下,为了保持故障独立性,适配器可以被连接成使得每个适配器仅服务来自一个存储组的驱动器(例如,可确定存储组,使得适配器21服务来自一个存储组的驱动器、适配器23服务来自第二存储组的驱动器(包括驱动器24)、并且适配器25服务来自第三存储组的驱动器)。例如,每个适配器可以连接到一个或多个jbod,但是仅连接到其驱动器在同一存储组中的jbod。即使仅有一个这样的适配器连接到一个或多个jbod,适配器(或jbod中的任一者)的故障不能移除对存储在那里的数据项的访问,假设每个数据项被复制在使用至少两个不同存储组的至少两个服务器上。然而,优选采用多个适配器(全都为仅来自一个存储组的一组驱动器服务)来访问该组驱动器(如上文引用的美国专利9,794,112中所描述的),以进一步降低适配器故障后果并且允许在适配器之间平衡网络话务。
[0081]
在一些实施例中,其中一个或多个适配器被用于将至少一个存储设备(例如,jbod)中的至少一个磁盘驱动器耦合到具有可组合基础设施的系统的通信机制(例如,网络),适配器中的至少一个适配器与至少一个这样的存储设备集成。例如,jbod(例如,图1的jbod 22)和至少一个适配器(例如,图1的适配器21和可选地还有被配置成与耦合到网络20的另一适配器)可被实现为被配置成耦合到通信机制的单个设备(jbod与(多个)适配器集成)。本发明的典型实施例的一个关键益处在于,相比于常规系统,它们允许将资源分组到更大的池中以供分配(例如,替换)。例如,假设总是从单个jbod分配服务器的驱动器,并且假设可以实现横向扩展应用以在多个jbod中保持每个数据项,以避免在任何jbod发生故障时丢失数据。然而,根据本发明的典型实施例,在没有灵活性以定义存储组的情况下,这样的布置将通常导致分配资源的低效和/或使替换故障资源变得困难。例如,假设每个jbod包含100个磁盘驱动器,并且每个服务器需要13个驱动器。如果所有驱动器必须来自相同的jbod,则仅可以使用jbod中的91个驱动器(即,最多可将七个13个驱动器的子集分配给七个服务器)。剩余的9个驱动器基本上将被浪费。然而,如果(根据本发明的实施例)确定了由13个jbod组成的存储组,并且在针对每个服务器的所有驱动器必须来自单个存储组的约束下
分配服务器的驱动器,则能够将存储组中的所有1300个驱动器都分配给服务器。
[0082]
对于另一示例,假设总是从单个jbod分配服务器的驱动器、可以布置横向扩展应用以在多个jbod中保持每个数据项以避免在任何jbod发生故障时丢失数据、每个jbod包含100个磁盘驱动器、并且每个服务器需要10个驱动器。在该示例中,能够使用(即,分配给服务器)jbod中的所有驱动器,但是如果一个驱动器(被指派给服务器)故障,则在jbod中将不存在可指派给服务器以替换它的驱动器。然而,如果(根据本发明的实施例)确定了由两个或更多个jbod组成的存储组,并且在针对每个服务器的所有驱动器必须来自单个存储组的约束下分配服务器的驱动器,则在存储组中的一个驱动器(被指派给服务器)故障的情况下,存储组中的另一设备可用于指派给服务器以替代故障驱动器。
[0083]
在本发明的一些实施例中,如果最大资源分配灵活性是主要目标、受限于任何单个项目故障(直到机架级别)将不使任何数据项不可访问的约束,则管理员(例如,图1的服务器1、3和30中的一者,被配置成运行管理应用)可以将数据中心(例如,图1的系统)中的所有存储机架划分为两个存储组,其中两个存储组之间具有大约相同数量的驱动器和存储容量。通过仅从一个存储组分配针对每个服务器的所有驱动器,并且设置由服务器执行的横向扩展应用的数据放置策略(例如,配置可配置的数据放置策略),以确保每个数据项被复制在使用至少两个不同存储组的(至少两个计算机架中的)至少两个服务器上(使得数据项驻留在至少两个存储组中),数据中心满足该目标。如果任何驱动器故障,则可从数据中心中的基本上一半的驱动器中选择它的替换,而不造成故障容差的任何损失(即,替换可来自存储组中的任何jbod,该存储组涵盖数据中心的一半)。
[0084]
替代地,在本发明的一些实施例中,如果收紧故障容差约束,使得数据中心的任何单个项目的故障(直到机架级别)将不会使任何数据项的可访问性减少超过一个副本,则管理员(例如,图1的服务器1、3和30中的一者,被配置成运行管理应用)可以将数据中心(例如,图1的系统)中的所有存储机架划分为三个大小大致相等的存储组,并且要求将每个数据项放置在至少三个存储组中。通过全部从(任何)一个存储组分配针对每个服务器的驱动器并且在至少三个计算机架中的服务器上要求数据副本,任何两个驱动器、服务器、jbod或机架的故障不能移除对任何数据项的访问。如果一个驱动器需要替换,则数据中心中的大约三分之一的驱动器将有资格替代它,而不损害数据访问中的故障容差。
[0085]
在一些实施例中,根据基于约束的方法(在本文中有时被称为约束分解器(resolver))来将驱动器分配给服务器,使得能够(并优选地)(例如,由管理员运行管理软件)自动实现分配,并且优选地这样的分配确保没有单个机架或jbod故障能够防止对任何数据项的访问。例如,一些此类驱动器分配方法包括以下步骤(通常由运行管理软件的管理员自动实现):
[0086]
识别跨足够数量的机架分布(即,安装在足够数量的机架中)的服务器,所述机架中任何一个机架的故障将导致不超过预定数量或分数的服务器的有效损失,并且将驱动器分配给服务器。例如,该步骤可通过识别跨至少n个机架分布的s个服务器(其中s和n是整数,并且通常n≥2),其中不超过“向下取整(floor)(s/n)”个服务器在机架中的单个一个机架中,并且将驱动器分配给服务器,其中“向下取整(x)”表示小于或等于x的最大整数。
[0087]
对于另一示例,一些此类驱动器分配方法包括以下步骤(通常由运行管理软件的管理员自动实现):
[0088]
将驱动器(组织在存储组中)分配给服务器,使得为服务器中的每个服务器分配仅来自存储组中的一个存储组的驱动器,并且受制于所分配的驱动器跨至少m个存储组分布的约束(其中m是整数(例如,预定的整数)),并且优选地还使得当驱动器被分配给服务器中的s个服务器(其中s是整数)时,为不超过向下取整(s/m)个服务器分配来自任何单个存储组的驱动器。因此,优选地,当已经为s个服务器分配了驱动器时,如果从任何存储组为下一个服务器(第“s+1个服务器”)分配驱动器将使超过向下取整((s+1)/m)个服务器被分配来自该存储组的驱动器,则将不从任何存储组为下一个服务器分配驱动器。
[0089]
对于另一示例,一些此类驱动器分配方法包括以下步骤(通常由运行管理软件的管理员自动实现):
[0090]
识别跨足够数量的机架分布的服务器,所述机架中任何一个机架的故障将导致不超过预定数量或分数的服务器的有效损失,并且将驱动器分配给服务器。例如,该步骤可通过识别跨至少n个机架分布的s个服务器(典型地n≥2),其中不超过“向下取整(s/n)”个服务器在机架中的单个一个机架中,并且将驱动器分配给服务器,其中“向下取整(x)”表示小于或等于x的最大整数;以及
[0091]
将驱动器(组织在存储组中)分配给服务器,使得为服务器中的每个服务器分配仅来自储组中的一个存储组的驱动器,并且受制于所分配的驱动器跨至少m个存储组分布的约束(其中m是整数),并且优选地还使得当驱动器被分配给服务器中的s个服务器(其中s是整数)时,为不超过向下取整(s/m)个服务器分配来自任何单个存储组的驱动器。
[0092]
在一些实施例中,存储组(或者两个或更多个存储组中的每个存储组)封装多个耦合故障域。例如,如果存储组跨越多个机架(即,包括多个机架的磁盘驱动器),则存储组中的所有驱动器不具有单个耦合故障模式。相反,该组包括多个独立耦合的驱动器的故障域(其可对应于多于一种类型或情形的耦合故障)。此类实施例可提供(在实现驱动器分配时)从其中选择的(与常规系统中提供的相比)更大的可分配驱动器的池,同时提供故障容差并保持数据中心的管理简单。因此,在一些实施例中,存储组包括全部共享一种耦合故障模式(机制)的驱动器(或由全部共享一种耦合故障模式(机制)的驱动器组成),并且在其他实施例中,存储组包括共享共同的耦合故障模式(机制)的驱动器以及不共享所述共同的耦合故障模式(机制)的至少一个其他驱动器。
[0093]
鉴于本文的描述,对于本领域普通技术人员将显而易见的是,可通过调整存储组的组成来(在实现本公开的实施例时)实现各种水平的故障容差以及分配和替换灵活性。
[0094]
我们接下来描述实现raid技术的本发明的一些实施例的附加方面。
[0095]
在常规raid技术中,存在两种raid技术将整个驱动器指定为其他驱动器的副本以避免丢失对数据的访问:raid

1(镜像)和raid

10(镜像并条带化)。如果在不考虑共同故障的情况下将可组合基础设施的各个驱动器指派给服务器(在该意义上,在服务器外部的驱动器包括用于存储服务器的至少一个数据项的raid集),则raid集中的每个驱动器(例如,两个驱动器)可以都来自单个jbod。如果该jbod故障,则即使服务器保持运行,服务器仍将丢失对数据的访问。在本发明的一些实施例中使用存储组以确保raid

1或raid

10集合中的每个部分(例如,一半)的(可组合基础设施的)磁盘驱动器来自不同的jbod,并且在可能的情况下,来自不同的存储机架。在一些这样的实施例中,如果n是用于在raid集中的磁盘驱动器中的数据(来自服务器)的存储的复制因子(其中n通常为二,或有时为三),则确定
(可用于实现raid集的驱动器的)存储组(优选地,使得在每个存储组中的驱动器具有至少一种耦合故障机制,例如,驱动器被包括在一个jbod中),并且确定raid集中的驱动器,使得驱动器(被分配给raid集)中的不超过1/n属于单个存储组。更具体地,根据存储组中的每个驱动器的成员关系,将raid控制器(其可以是服务器的软件、固件和/或硬件子系统,或可以在服务器外部)包括在raid集中的驱动器由控制器(例如,由服务器的控制器子系统)指派给服务器(其具有要存储的数据),使得(raid集的)驱动器中的不超过1/n属于单个存储组。因此,在所描述的实施例中,raid集被构造成使得当来自服务器的数据被存储在raid集中时,保持每个单个数据项的副本的n(再次,通常为二)个驱动器属于不同存储组。这能够确保在单个存储组中的任何驱动器或jbod的故障不会防止服务器具有对数据的访问。如果存储组包括存储机架(或两个或更多个存储机架)内的所有驱动器和jbod,则机架内的驱动器或jbod的故障(或包括至少两个存储机架的存储组的整个存储机架的故障)将不会防止由服务器对raid集中的数据中的任一者的访问。
[0096]
我们接下来更详细地描述涉及本发明的一些实施例的各操作方面。
[0097]
在本发明的一些实施例中,当jbod(并且因此,它们包含的磁盘驱动器)首次安装在数据中心中时,它们可以被自动指派给存储组。在一个优选实施例中,用户(例如,通过与在数据中心的管理员上运行的管理应用的用户界面进行交互)或数据中心的管理员(通过在管理员上运行的管理应用的操作)设置默认策略以确定每个机架(或每个其他接近性度量,诸如例如,磁盘子网络或共用第一网络交换机)应该创建多少存储组。在一些这样的实施例中,以试图平衡每个创建的存储组中的驱动器的数量和容量的方式来指派jbod(到存储组)。在一些实施例中,数据中心架构可以手动指定驱动器和/或jbod的存储组。
[0098]
在本发明的系统的一些示例中,可通过在软件定义的存储系统中的基于约束的选择机制(例如,由在可组合基础设施的管理员上运行的管理应用实现的基于约束的选择机制)的使用、通过将可经由可组合基础设施连接使得所有驱动器都具有期望的容量和类型并且所有驱动器都来自单个存储组的驱动器分配给一个或多个服务器(具有要求的计算和存储器容量),来一起分配服务器和驱动器。这种机制使管理员免于识别应该连接在一起的各个服务器和驱动器的任务(这可能是繁琐的)。另外,基于约束的选择机制(本文中有时被称为约束分解器)可包括隐含的考虑因素,诸如可用服务器和驱动器之间的连接速度的变化,而无需管理员明确要求考虑此类要素。
[0099]
本发明的典型实施例提供了用于允许在可组合数据中心基础设施中使用横向扩展应用的简单机制,使得数据中心可以保留das存储的低成本和高性能属性,以及可组合基础设施的灵活性,并且还确保数据中心中的任何单个元件的故障不会防止对数据的访问。
[0100]
本发明的典型实施例从非常小的系统(其中所有设备容纳在单个机架中)扩展到具有许多机架的存储和计算设备的完全大小的数据中心,所有这些都具有可用的可确保到达故障容差水平的简单机制。
[0101]
本发明的典型实施例允许管理员使用简单的高级规范来提供期望水平的故障/错误容差,同时保留可组合基础设施的分配灵活性益处。一旦就位,管理员的典型实施例可以容易地评估并分析整个数据结构的故障/错误容差状态。另外,对部署在数据中心中的大型横向扩展应用中的甚至非常复杂的互连集的故障容差的验证也变得几乎微不足道。相反,在不使用此类实施例的情况下,由可组合基础设施提供的资源分配的自由性可导致在大型
横向扩展应用部署中耦合故障机会的组合爆增。例如,(以不根据本发明的实施例的方式)用一个驱动器替换另一个驱动器可引入难以检测的非预期的耦合故障,特别是如果在部署中涉及数千个服务器和数万个驱动器。
[0102]
部署在可组合基础设施中并实现传统应用的改进版本(例如,用于实现raid技术)的本发明的实施例可比传统应用提供更好的故障容差(以及其他益处)。使用适当设计的raid集(根据存储组成员关系构造),(使用raid技术)实现传统raid应用的改进版本的那些实施例可确保在raid集两侧之间的唯一的共同设备是服务器本身。因此,验证没有单个设备(例如,任何磁盘驱动器、或包括任何磁盘驱动器的jbod或机架、或raid集)的故障可以防止对数据的访问可能是微不足道的,因为每个数据存储路径的所有设备(而不是服务器本身)是分开且不同的。
[0103]
可以使用、但不需要使用jbod、适配器或任何其他特定的装备件来实现本发明的典型实施例。如果没有jbod,则可以将各个驱动器放入对应于关注的任何特定的共同故障模式的存储组中。例如,存储组可代表共同的电源或共同的网络连接。
[0104]
在一些实施例中,本发明的服务器(例如,被配置成管理员或raid控制器的服务器)是或者包括可编程通用处理器、数字信号处理器、或微处理器,用软件或固件编程和/或以其他方式配置成对数据执行各种操作中的任何操作,包括本发明的方法或其步骤的实施例。这样的通用处理器可以是计算机系统或包括计算机系统,该计算机系统包括输入设备、存储器和处理子系统,该处理子系统被编程为(和/或以其他方式配置成)响应于对其断言的数据而执行本发明的方法(或其步骤)的实施例。
[0105]
本发明的其他方面是在本发明的系统或其设备(例如,raid控制器、存储设备、管理员或服务器)的任何实施例的操作中执行的方法。
[0106]
一个这样的方法是用于在具有可组合基础设施的系统中存储数据的方法,其中系统包括通信子系统、以及耦合到通信子系统的磁盘驱动器和服务器,其中根据涉及所述驱动器的至少一种耦合故障机制来将驱动器组织成存储组,所述方法包括以下步骤:以及
[0107]
对于服务器中的至少一些服务器的集合中的每个服务器,根据驱动器的存储组成员关系分配驱动器的不同子集;以及
[0108]
根据在该集合中的服务器中的一个服务器上运行的应用,在已经被分配给所述服务器中的一个服务器的一个或多个驱动器上存储数据,但不在未被分配给所述服务器中的一个服务器的任何驱动器上存储数据。
[0109]
另一个这样的方法是用于在具有可组合基础设施的系统中存储数据的方法,其中系统包括通信子系统、以及耦合到通信子系统的磁盘驱动器和服务器,其中根据涉及所述驱动器的至少一种耦合故障机制来将驱动器组织成存储组,所述方法包括:
[0110]
根据在服务器中的一个服务器上运行的应用,执行raid功能,包括通过根据raid集中的每个驱动器的存储组成员关系来确定驱动器的raid集并在raid集的驱动器上以冗余方式存储数据。
[0111]
另一个这样的方法是用于配置具有可组合基础设施的系统的方法,其中系统包括通信子系统、以及耦合到通信子系统的磁盘驱动器和服务器,其中根据涉及所述驱动器的至少一种耦合故障机制来将驱动器组织成存储组,所述方法包括:
[0112]
根据在服务器中的一个服务器上运行的管理应用,根据驱动器的存储组成员关系
将驱动器的不同子集分配给至少一些服务器的集合中的每个服务器的步骤;和/或
[0113]
配置服务器中的至少一个服务器以实现raid功能的步骤,包括通过根据在raid集中的每个驱动器的存储组成员关系来确定驱动器的raid集。
[0114]
本发明的另一方面是用于实现数据的非瞬态存储的有形计算机可读介质(例如,磁盘或其他有形存储介质),并且该有形计算机可读介质(以非瞬态方式)存储用于执行本发明的方法或其步骤的任何实施例的代码(例如,可执行代码以执行本发明的方法或其步骤的任何实施例)。这样的有形计算机可读介质的示例是图2的计算机可读介质50(其可以是磁盘或其他有形存储介质),计算机可读介质50(以非瞬态方式)存储用于执行本发明的方法或其步骤的任何实施例的代码(例如,可执行代码以执行本发明的方法或其步骤的任何实施例)。
[0115]
应当理解,虽然已经在本文中图示并描述了本发明的某些形式,但是本发明不限于所描述和示出的特定实施例或所描述的特定方法。除非在权利要求语言中明确叙述,否则描述方法的权利要求不暗示步骤的任何特定顺序。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1