首页> 中国专利> 分布式文件系统中的数据迁移

分布式文件系统中的数据迁移

摘要

多个计算装置经由网络彼此通信地耦接,并且多个计算装置中的每个计算装置可操作地耦接至多个存储装置中的一个或多个。多个故障容错地址空间跨多个存储装置分布,使得多个故障容错地址空间中的每个跨越多个存储装置。多个计算装置维护将每个故障容错地址空间映射至多个计算装置中的一个的元数据。元数据分组到桶中。每个桶存储在计算装置的后端中。可以使用索引节点存根将数据从外部文件系统迁移至多个存储装置,以表示外部文件系统的目录和文件。在复制外部文件系统的内容时,用真实索引节点替换索引节点存根。

著录项

说明书

优先权要求

本申请要求于2018年6月29日提交的题为“Data Migration in a DistributiveFile System”的美国临时专利申请第62/691,732号、以及2019年2月12日提交的题为“DataMigration in a Distributive File System”的美国专利申请第16/273,762号的优先权。

背景技术

通过参照附图将关于数据存储的传统方法与在本公开的其余部分中阐述的本方法和系统的一些方面进行比较,关于数据存储的传统方法的限制和缺点,对本领域技术人员来说将变得显而易见。

通过引用并入

题为“Coded Virtual File System”的美国专利申请第15/243,519号,其全部内容通过引用并入本文。

发明内容

基本上如通过结合至少一个附图所示出和/或描述的,如在权利要求中更全面地阐述的,提供了用于分布式文件系统中的数据迁移的方法和系统。

附图说明

图1示出根据本公开的方面的分布式文件系统的各种示例配置。

图2示出根据本公开的方面的分布式文件系统节点的示例配置。

图3示出根据本公开的示例实现方式的分布式文件系统的另一表示。

图4A示出根据本公开的示例实现方式的外部文件系统和内部文件系统的示例。

图4B示出根据本公开的示例实现方式的数据从外部文件系统迁移至内部文件系统的示例。

图4C示出根据本公开的示例实现方式的在数据迁移后的内部文件系统的示例。

图5是示出根据本公开的用于数据迁移至分布式文件系统的示例方法的流程图。

图6示出两个分布式故障容错地址空间驻留在多个固态存储盘上的示例性实现方式。

图7示出根据本公开的示例实现方式的可以用于保护存储至虚拟文件系统的非易失性存储器的数据的前向纠错方案。

具体实施方式

传统地,文件系统使用对元数据结构(例如,目录、文件、属性、文件内容)的集中控制。如果本地文件系统可从单个服务器接入并且该服务器发生故障,则如果不存在进一步的保护,文件系统的数据可能丢失。为了添加保护,一些文件系统(例如,如由NetApp提供)以主动-被动(active-passive)的方式使用一对或多对控制器以跨两个或更多个计算机复制元数据。其他的解决方案以集群方式使用多个元数据服务器(例如,如由IBM GPFS、DellEMC Isilon、Lustre等提供)。然而,因为传统的集群系统中的元数据服务器的数量受限于数量小,所以这样的系统不能规模化。

本公开中的系统可应用于小集群,并且也可以规模化至许多、数千个节点。讨论关于非易失性存储器(NVM)的示例性实施方式,例如,以固态驱动器(SSD)的形式出现的闪存。NVM可以被划分成4kB块和128MB区块。盘区(extent)可以存储在易失性存储器(例如,用于快速接入的RAM)中,以及由NVM存储器备份。盘区可以存储用于区块的指针,例如,存储在块中的1MB数据的256个指针。在其他实施方式中,还可以使用更大或更小的内存划分。本公开中的元数据功能可以有效地跨许多服务器分布。例如,在其中大负荷的目标为文件系统命名空间的具体部分的“热点”的情况下,该负荷可以跨多个节点分布。

图1示出根据本公开的方面的分布式文件系统的各种示例配置。图1中示出的是局域网(LAN)102,该局域网(LAN)102包括一个或多个节点120(由1至J的整数索引,其中J≥1),并且可选地包括(由虚线指示):一个或多个专用存储节点106(由1至M的整数索引,其中M≥1)、一个或多个计算节点104(由1至N的整数索引,其中N≥1)和/或将LAN102连接至远程网络118的边缘路由器。远程网络118可选地包括一个或多个存储服务114(由1至K的整数索引,其中K≥1)和/或一个或多个专用存储节点115(由1至L的整数索引,其中L≥1)。

每个节点120

计算节点104是可以在没有虚拟后端的情况下运行虚拟前端的联网装置。计算节点104可以通过将单根输入/输出虚拟化(SR-IOV)纳入网络接口卡(NIC)中并且消耗完整的处理器核来运行虚拟前端。可替代地,计算节点104可以通过经由Linux内核网络堆栈路由网络并且使用内核进程调度来运行虚拟前端,因此不存在对全核的要求。如果用户不想为文件系统分配完整核或者如果网络硬件与文件系统要求不兼容,则这是有用的。

图2示出根据本公开的方面的节点的示例配置。节点包括前端202和驱动器208、内存控制器204、后端206和SSD代理214。前端202可以是虚拟前端;内存控制器204可以是虚拟内存控制器;后端206可以是虚拟后端;以及驱动器208可以是虚拟驱动器。如本公开中使用的,虚拟文件系统(VFS)进程是实现前端202、内存控制器204、后端206和SSD代理214中的一个或多个的进程。因此,在示例实现方式中,节点的资源(例如,处理和内存资源)可以在客户端进程和VFS进程当中共享。VFS的进程可以被配置为要求相对少量的资源以最小化对客户端应用的性能的影响。前端202、内存控制器204和/或后端206和/或SSD代理214可以在主机201的处理器上或在网络适配器218的处理器上运行。对于多核处理器,不同的VFS进程可以在不同的核上运行,并且可以运行服务的不同子集。就客户端进程212而言,与虚拟文件系统的接口独立于其上运行VFS进程的具体的物理机。客户端进程仅需要驱动器208和前端202存在,以便服务该客户端进程。

节点可以实现为直接在操作系统上运行的单个租户服务器(例如,裸机(bare-metal))或者实现为裸机服务器内的虚拟机(VM)和/或容器(例如,Linux容器(LXC))。VFS可以在LXC容器内作为VM环境运行。因此,在VM内部,可以运行的唯一事物是包括VFS的LXC容器。在传统的裸机环境中,存在用户空间应用并且VFS在LXC容器中运行。如果服务器正在运行其他容器化应用,则VFS可以在处于容器部署环境(例如,Docker)的管理范围之外的LXC容器的内部运行。

节点可以由操作系统和/或虚拟机监视器(VMM)(例如,管理程序)服务。VMM可以用于在主机201上创建和运行节点。多个核可以驻留在运行VFS的单个LXC容器内,并且VFS可以使用单个Linux内核在单个主机201上运行。因此,单个主机201可以包括多个前端202、多个内存控制器204、多个后端206和/或一个或多个驱动器208。驱动器208可以在LXC容器的范围之外的内核空间的内部运行。

SR-IOV PCIe虚拟函数可以用于在用户空间222中运行网络堆栈210。SR-IOV允许PCI快速(PCI Express)的隔离,使得单个物理PCI快速可以在虚拟环境上共享,并且不同的虚拟功能可以提供至单个物理服务器机器上的不同虚拟部件。I/O堆栈210使VFS节点能够绕过标准TCP/IP堆栈220并且直接与网络适配器218通信。可以通过无锁队列将用于uniX(POSIX)VFS功能性的便携式操作系统接口提供至VFS驱动器208。SR-IOV或完整PCIe物理功能地址还可以用于在用户空间222中运行非易失性存储器快速(non-volatile memoryexpress(NVMe))驱动器214,从而完全绕过Linux IO堆栈。NVMe可以用于接入经由PCI快速(PCIe)总线附接的非易失性存储装置216。非易失性存储装置220可以是例如以固态驱动器(SSD)的形式出现的闪存或可以以SSD或存储器模块(DIMM)的形式出现的存储级存储器(SCM)。其他示例可以包括存储级存储器技术,诸如,3D-XPoint。

通过将物理SSD 216与SSD代理214和网络210耦接,SSD可以实现为联网装置。可替代地,通过使用诸如NVMe-oF(NVMe over Fabrics(全闪存阵列的架构))的网络协议,SSD可以实现为网络附接的NVMe SSD 242或NVMe SSD 244。NVMe-oF可以允许使用冗余网络链路以接入NVMe装置,从而提供更高级别或容错。网络适配器226、网络适配器228、网络适配器230和网络适配器232可以包括用于连接至NVMe SSD 242和NVMe SSD 244以将该NVMe SSD242和NVMe SSD 244转换成联网的NVMe-oF装置而无需使用服务器的硬件加速。NVMe SSD242和NVMe SSD 244均可以包括两个物理端口,并且所有数据可以通过这些端口中的任一个来接入。

每个客户端进程/应用212可以直接在操作系统上运行,或者可以在由操作系统和/或管理程序服务的虚拟机和/或容器中运行。客户端进程212可以在执行其主要功能的过程中从存储器读取数据和/或将数据写入存储器。然而,客户端进程212的主要功能与存储无关(即,进程仅关注该进程的数据被可靠地存储并且在需要时可检索,并且不关注数据在何处存储、数据在何时存储或如何存储数据)。引起这样的进程的示例应用包括:电子邮件服务器、web服务器、办公生产力应用、客户关系管理(CRM)、动画视频渲染、基因组计算、芯片设计、软件构建和企业资源规划(ERP)。

客户端应用212可以对与VFS驱动器208通信的内核224进行系统调用。VFS驱动器208将对应的请求放在VFS前端202的队列上。如果存在若干VFS前端,则驱动器可以加载对不同前端的平衡接入,以确保总是经由同一前端接入单个文件/目录。这可以通过基于文件或目录的ID对前端分片化来完成。VFS前端202提供用于基于负责该操作的桶将文件系统请求路由至适当的VFS后端的接口。适当的VFS后端可以在同一主机上或可以在另一主机上。

VFS后端206托管若干桶,该若干桶中的每个桶服务于文件系统请求其接收并执行任务,从而以其他方式管理虚拟文件系统(例如,负荷平衡、记日志、维护元数据、高速缓存、在层之间移动数据、去除过期数据、校正损坏的数据等)。

VFS SSD代理214处理与相应存储装置216的交互。这可以例如包括转换地址、以及生成(例如,通过SATA、SAS、PCIe或其他合适的总线)发布到存储装置的命令。因此,VFS SSD代理214作为存储装置216与虚拟文件系统的VFS后端206之间的中间物进行操作。SSD代理214还可以与支持诸如NVMe-oF(NVMe over Fabrics)的标准协议的标准网络存储装置通信。

图3示出根据本公开的示例实现方式的分布式文件系统的另一表示。在图3中,元件302表示各种节点(计算、存储和/或VFS)的内存资源(例如,DRAM和/或其他短期内存)和处理(例如,x86处理器、ARM处理器、NIC、ASIC、FPGA等)资源,诸如上面关于图2描述的虚拟文件系统驻留在这些节点上。元件308表示提供虚拟文件系统的长期存储的一个或多个物理存储装置216。

如图3所示,物理存储器组织成多个分布式故障容错地址空间(DFRAS)318。该多个分布式故障容错地址空间(DFRAS)318中的每个包括多个区块310,该区块310进而包括多个块312。在一些实现方式中,块312组织成区块310仅是为了便利,并且在所有实现方式中,块312可以不组织成区块310。每个块312存储已提交的数据316(其可以采取各种状态,如下所讨论的)和/或描述或参考已提交的数据316的元数据314。

存储器308组织成多个DFRAS使从虚拟文件系统的许多(或许所有)节点实现高性能并发提交(例如,图1的所有节点104

每个桶拥有DFRAS,并且因此在向该桶写入时不需要与任何其他节点协作。每个桶可以跨许多不同SSD上的许多不同区块构建条带,因此每个桶及该桶的DFRAS可以基于许多参数来选择当前要写入什么“区块条带”,并且一旦区块被分配给该桶,就不需要为了这样做而进行协作。所有桶能够有效地写入所有SSD。而不需要任何协作。

仅由在具体节点上运行的每个DFRAS的所有者桶拥有并可接入的每个DFRAS允许VFS的每个节点控制存储器308的一部分,而不必与任何其他节点协作(在初始化期间或在节点出现故障之后对保持DFRAS的桶的[重新]分配期间除外,例如,这可以异步执行以实际读取/提交存储器308)。因此,在这样的实现方式中,在不需要在读取和提交到存储器308时达到任何一致性的情况下,每个节点可以独立于其他节点正在做什么而读取/提交至该每个节点的桶的DFRAS。此外,在特定节点故障的情形下,特定节点拥有多个桶的事实允许将该具体节点的工作加负荷更智能和更有效地重新分布到其他节点(相反,整个工作负荷必须分配给单个节点,这可以创建“热点”)。在该方面,在一些实现方式中,桶的数量相对于系统中的节点的数量可以更大,使得任一桶可以是放置在另一个节点上的相对较小的负荷。这允许根据其他节点的能力和容量对故障的节点的负荷进行细粒性重新分布(例如,具有更大的能力和容量的节点可以被给予更高百分比的故障的节点桶)。

为了允许这样的操作,可以维护将每个桶映射到该每个桶的当前拥有节点的元数据,使得对存储器308的读取和提交可以被重新定向到适当的节点。

因为整个文件系统元数据空间(例如,目录、文件属性、文件中的内容范围等)可以被分割(例如,被切分或分片)成小的、统一的片(例如,“碎片”),所以负荷分布是可以的。例如,具有30k个服务器的大型系统可以将元数据空间切分成128k或256k碎片。

每个这样的元数据碎片可以维持在“桶”中。每个VFS节点可以负责若干桶。当给定后端上的桶服务于元数据碎片时,桶被认为是“活跃的”或该桶的“主导者”。通常,存在比VFS节点多得多的桶。例如,具有6个节点的小型系统可以具有120个桶,以及具有1,000个节点的较大系统可以具有8k个桶。

每个桶在小的节点集合(通常为5个节点,该5个节点形成该桶的五元组(penta-group))上可以是活跃的。集群配置保持最新的关于用于每个桶的五元组分配的所有参与节点。

每个五元组监测其自身。例如,如果集群具有10k个服务器,并且每个服务器具有6个桶,则每个服务器将仅需要与30个(6个桶将具有6个五元组,因此6*5=30)不同的服务器交谈以维持该服务器的桶的状态。这是比集中式实体必须监视所有节点并且保持集群范围状态的情况小得多的数量。因为当集群大小增加时节点不执行更多的工作,所以五元组的使用允许以更大的集群规模化性能。这可能造成以下缺点:在“哑(dumb)”模式中,小的集群实际上可以生成比物理节点更多的通信,但是可以通过利用两个服务器共享的所有桶在该两个服务器之间仅发送单个心跳来克服这个缺点(随着集群增长,这将改变成只有一个桶,但是如果你具有小的5个服务器的集群,则该5个服务器的集群仅将所有桶包括在所有消息中并且每个服务器将仅与其他4个服务器对话)。五元组可以使用与Raft共识算法类似的算法来决定(即,达到共识)。

每个桶可以具有可以运行它的一组计算节点。例如,五个VFS节点可以运行一个桶。然而,组中的节点中的仅一者在任何给定时刻是控制器/主导者。此外,对于足够大的集群,没有两个桶共享同一组。如果集群中仅存在5个或6个节点,则大多数桶可以共享后端。在相当大的集群中,存在许多不同的节点组。例如,对于26个节点,存在超过64,000

组中的所有节点知道并同意(即,达成共识)哪个节点是该桶的实际活动控制器(即,主导者)。接入桶的节点可以记住(“高速缓存”)作为组的针对该桶的(例如,五个)成员中的主导者的最后一个节点。如果它接入桶主导者,则桶主导者执行所请求的操作。如果它接入作为非当前的主导者的节点,则该节点指示出主导者节点以“重新定向”接入。如果存在接入所高速缓存的主导者节点超时,则联系节点可以尝试同一五元组的不同节点。集群中的所有节点共享集群的共同的“配置”,这允许节点知道哪个服务器可以运行每个桶。

每个桶可以具有负荷/使用值,该负荷/使用值指示桶由在文件系统上运行的应用使用的程度。例如,即使所使用的桶的数量将存在不平衡,但具有11个被轻度使用桶的服务器节点可以接收元数据的另一桶,以在具有9个被高度使用桶的服务器之前运行。可以根据平均响应延迟时间、并发运行的操作的数量、消耗的内存或其他度量来确定负荷值。

即使在VFS节点未发生故障时,也可以发生重新分配。如果系统基于所跟踪的负荷度量确定一个节点比其他节点更忙,则系统可以将该节点的桶中的一个桶移动(即,“故障转移”)至不太忙的另一服务器。然而,在实际上将桶重新定位至不同主机之前,可以通过转移写入和读取来实现负荷平衡。由于每次写入可以结束于在由DFRAS决定的节点的不同组上,所以具有较高负荷的节点可能不会被选择在处于正被写入数据的条带中。系统还可以选择不对从高度负荷的节点的读取进行服务。例如,可以执行“降级模式读取”,其中,从同一条带的其他块中重构高负荷节点中的块。降级模式读取是经由同一条带中的其余节点执行的读取,并且数据经由故障保护重构。因为读取的发起者可以假定该节点已故障,所以降级模式读取可以在读取延迟时间太高时执行。如果负荷足够高而创建了更高的读取延迟时间,则集群可以恢复到从其他节点读取该数据并且使用降级模式读取来重构所需的数据。

每个桶管理其自己的分布式擦除编码实例(即,DFRAS 518),并且不需要与其他桶合作以执行读取或写入操作。潜在地存在数千个并发分布式擦除编码实例并发地工作,该分布式擦除编码实例中的每个针对不同的桶。这是对性能规模化的主要部分,由于它有效地允许任何大型文件系统被划分成不需要协作的独立片,因此不管如何规模化都可以提供高性能。

每个桶处理落入其碎片中的全部文件系统操作。例如,目录结构、文件属性和文件数据范围将落入特定桶的管辖区域中。

从任何前端完成的操作开始于找出拥有该操作的桶。然后,确定用于该桶的后端主导者和节点。该确定可以通过尝试最后获知的主导者来执行。如果最后获知的主导者不是当前主导者,则该节点可以获知哪个节点是当前主导者。如果最后获知的主导者不再是桶的五元组的部分,则该后端将让前端知道该前段应返回到配置以找到桶的五元组的成员。操作的分布允许由多个服务器而不是由标准系统中的单个计算机来处理复杂的操作。

如果集群的大小较小(例如,5个)并且使用了五元组,则将存在共享同一组的桶。随着集群大小增加,桶重新分布,使得没有两组是相同的。

图4A示出根据本公开的示例实现方式的集群427和外部文件系统421的示例。集群427包括可以驻留在一个或多个网络接口卡(NIC)上的内部文件系统。外部文件系统421包括外部客户端423和外部存储器。

为了说明,如所示出的,集群427包括两个计算装置403和413以及四个存储装置409a、409b、409c和409d。在不偏离本公开的情况下,可以使用不同数量的计算装置(例如,基于CPU的服务器)和存储装置(例如,SSD)。计算装置403和计算装置413以及存储装置409a、以及存储装置409b、以及存储装置409c和以及存储装置409d可以经由一个或多个NIC可操作地耦接。例如,计算装置403和计算装置413中的每个可以在单独的NIC上,并且存储装置409a、存储装置409b、存储装置409c和存储装置409d可以在一个或多个NIC上。

计算装置401包括前端403和后端405。后端405包括至少一个桶407。计算装置411包括前端413和后端415。后端415包括至少一个桶417。

后端中的每个桶可操作以构建包括多个块的一个或多个故障容错条带。例如,对于10个块,可以用2个错误保护/纠错块来保护8个数据块(即,使用8+2条带)。同样,对于10个故障域,可以用4个错误保护/纠错块来保护6个数据块(即,使用6+4条带)。

桶407可操作以构建包括块a1、块a2和块a3的故障容错条带419。通常,特定故障容错(或故障保护)条带中的多个存储块中的每个可以位于多个存储装置中的不同存储装置中。可替代地,故障容错条带的多个存储块可以跨多个存储装置中的至少两个存储装置分布。

桶407可以经由索引节点和一个或多个盘区生成、管理并且控制故障容错条带419。索引节点是存储文件或目录的命名和其实际数据之外的关于文件或目录的所有信息的数据结构。文件中的每个4k块可以由被称为盘区的对象来处理。盘区ID可以基于索引节点ID和文件内的偏移量(例如,1MB)。并且,盘区ID由桶管理。盘区可以存储在每个桶的注册表中。盘区范围可以由读写锁保护。每个盘区可以通过管理负责1MB数据的多达256个4k块的指针,来管理用于文件的连续1MB的内容。在其他实施方式中,还可以使用更大或更小的内存划分。盘区也可以存储在易失性存储器(例如,用于快速接入的RAM)中,也由NVM存储器备份。

图4B示出根据本公开的示例实现方式的将数据从外部文件系统421迁移至集群427中的内部文件系统的示例。迁移大的文件系统可以是非常漫长的处理,尤其是如果用户对多个文件系统分层。此外,在可以完成迁移之前,用户还可能需要接入外部文件系统。

在迁移期间,外部文件系统421可以改变或可以不改变。迁移包括映射处理,以遍历外部存储器425的命名空间并且创建具有存根索引节点(例如,存根索引节点431)的目录层次结构。存根索引节点431是实际节点的替代,该是实际节点经由一个或多个盘区433耦接至存储器409a至存储器409d。存根索引节点431可以快速允许接入预先存在的外部存储器425,同时在后端将数据迁移至存储器409a至存储器409d。映射处理可以生成用于目录以及文件的索引节点存根。

当整个迁移处理完成时可以通知用户。一旦完成,所有的存根索引节点将被实际节点替换。可替代地,在数据迁移时,每个存根索引节点将由实际节点替换。可以运行opendir函数以阻止对特定目录上的文件的接入操作,直到后端处理完成整个目录迁移。对于目录,opendir可以阻止接入,直到生成所有包含的文件存根和目录存根。此后,opendir将返回并且readdir可以开始。

当文件索引节点存根(或目录索引节点存根)打开时,系统可以暂停直到该文件(或目录)从文件夹(filer)拉出。当文件索引节点存根打开时,迁移可以根据相关联的外部文件创建可能的所有盘区。这些盘区433与盘区条带437中的位置相关联。

后端处理可以遍历所有存根的队列并且继续创建命名空间429和复制文件。后端处理可以遍历所有目录索引节点存根,并且然后遍历所有文件索引节点存根。在创建所有(或每个)文件索引节点之后,它们可以被转换成真实索引节点,并且外部文件的内容可以下载到盘区。

系统可以维持迁移状态并且可以能够通知用户何时所有文件已被复制至集群系统427。每个迁移处理可以需要知道相应的命名空间429是否仍具有一些存根(索引节点或盘区)或者所有存根是否已被转换。

即使外部文件系统421很大,数据迁移对于重启和故障也是有容错的。不可能接入命名空间429的根直到根目录的所有文件已经迁移。

数据迁移可以从若干节点并发运行。每个后端将负责其自己的目录和文件。如果一个计算装置节点411不能直接挂载迁移的外部文件系统421并且另一计算装置节点401能够直接挂载迁移的外部文件系统421,则可以从该一个计算装置节点411的后端415到该另一计算装置节点401的后端405生成隧道435。

在迁移期间,可以指示进度(例如,移动的文件的数量或容量方面)。可以维护待提取的盘区和待转换成真实目录/文件的索引节点存根的状态。迁移可以在整个桶故障转移期间继续运行,并且系统重启。

图4C示出根据本公开的示例实现方式的在数据迁移之后的集群427的内部文件系统的示例。在图4C的示例中,条带437已经由块b1和块b2填充。外部文件已迁移至块bl。块b2包括可以用于恢复块bl的数据。稀疏文件指示外部文件系统所需的空间少于分配的空间。如果在读取外部文件时,盘区读取满0秒,则盘区将被删除以创建稀疏文件。与稀疏文件相对应的盘区可以经由注册表中的标签添加至队列。

图5是示出根据本公开的用于将数据从外部文件系统迁移至内部分布式文件系统的的示例方法的流程图。在框501中,为外部文件系统的文件和目录生成索引节点存根。例如,计算装置后端中的桶可以生成这些存根索引节点数据结构。

在框503中,分配一个或多个条带。这些条带跨内部文件系统中的多个存储装置,并且每个条带包括多个存储块。每个条带可以由计算装置后端中的桶生成。

在框505中,外部文件系统的文件和目录的内容被迁移到条带的存储块中。在迁移期间,可以经由存根索引节点从外部存储器接入数据。在迁移特定文件时,接入可以被打开命令阻止。

在框507中,根据迁移的数据为每个条带生成一个或多个纠错数据块。该纠错数据被存储在对应的条带中。在一个或多个存储装置上的数据不可用的降级读取期间,纠错数据与可用的数据结合使用以重新生成不可用的数据。多个存储块中的一存储块被指定为稀疏文件,该稀疏文件不用于迁移的数据或相关联的纠错数据。

图6示出两个分布式故障容错地址空间驻留在多个固态存储盘上的示例性实现方式。

区块910

为了说明的目的,假设每个区块条带920

如本文所使用的,“故障域”是指一组部件,在该组部件中,部件中的任何单个部件的故障(部件断电、变得无响应等)可以导致所有部件的故障。例如,如果机架具有单个架顶式交换机,则该交换机的故障将使到该机架上的所有部件(例如,计算、存储和/或VFS节点)的连接中断。因此,对于系统的其余部分,这等同于如果该机架上的所有部件一起发生故障。根据本公开的虚拟文件系统可以包括比区块910更少的故障域。

在虚拟文件系统的节点以每个这样的节点只有单个存储装置906的完全冗余的方式连接并且供电的示例实现方式中,故障域可以仅是该单个存储装置906。因此,在示例实现方式中,每个区块条带920s包括驻留在N个存储装置906

在图6中,D=7,N=5,M=4,K=1,并且存储器被组织成两个DFRAS。这些数字仅仅用于说明而非旨在限制。为了说明,任意地调用第一DFRAS的三个区块条带920。第一区块条带920

尽管在图6的简单示例中D=7和N=5,但是在实际实现方式中,D可以远大于N(例如,大于1的整数的倍数并且可以与多个数量级一样高),并且可以选择两个值,以使得单个DFRAS的任意两个区块条带920驻留在N个存储装置906的相同一集合上(或者更一般地,在N个故障域的同一集合上)的概率低于期望阈值。以这样的方式,任何单个存储装置906

例如,如果每个存储装置906

接着,转向存储装置906

图7示出根据本公开的示例实现方式的可以用于保护存储至虚拟文件系统的非易失性存储器的数据的前向纠错方案。示出了DFRAS的块条带930

因此,图7中的四个条带930

根据本公开的示例实现方式,多个计算装置经由网络通信地耦接至彼此,并且该多个计算装置中的每个包括多个存储装置中的一个或多个。多个故障容错地址空间跨多个存储装置分布,使得多个故障容错地址空间中的每个故障容错地址空间跨多个存储装置。多个故障容错地址空间中的每个组织成多个条带(例如,图6和图7中的多个930)。多个条带中的每个或多个条带是多个前向纠错(FEC)保护域(例如,诸如图6中的多个条带FEC域)中的相应一个的一部分。多个条带中的每个可以包括多个存储块(例如,多个912)。多个条带中的特定条带的每个块可以驻留在多个存储装置中的一个不同的存储装置上。多个存储块的第一部分(例如,由图7的条带930

多个计算装置可以操作以对多个条带排序。排序可以用于选择多个条带中的哪个带用于多个故障容错地址空间中的一个故障容错地址空间的下一提交操作。排序可以基于多个条带中的每个条带中存在多少受保护和/或未受保护存储块。对于多个条带中的任一特定条带,排序可以基于存储在具有多个条带中的一特定条带的多个存储装置上的位图。排序可以基于多个条带中的每个条带中当前存在有多少存储数据的块。排序可以基于提交到多个条带中的每个条带的读取和写入开销。在任何给定时间,故障容错地址空间中的每个可以仅由多个计算装置中的一个拥有,并且多个故障容错地址空间中的每个可以仅由其拥有者读取和写入。每个计算装置可以拥有多个故障容错地址空间。多个存储装置可以组织成多个故障域。多个条带中的每个可以跨多个故障域。故障容错地址空间中的每个可以跨多个故障域中的全部,使得在多个故障域中的任一特定故障域出现故障时,将用于重构丢失数据的工作负荷分布在多个故障域中的每个其他故障域当中。多个条带可以跨多个故障域分布,使得在多个故障域中的两个出现并发故障的情况下,多个条带中的任一特定条带的两个块驻留在多个故障域中的故障的两个故障域上的机会呈指数地小于多个条带中的任何特定条带的仅一个块驻留在故障的多个故障域中的两个上的机会。

多个计算装置可以操作以首先对具有两个故障的块的多个条带中的任何条带进行重构,并且然后,对仅具有一个故障块的多个条带中的任何条带进行重构。多个计算装置可以操作用于以比仅具有一个故障块的多个条带的重构速率更高的速率(例如,以专用于重构的CPU时钟循环的更大百分比、专用于重构的网络传输几率的更大百分比等)来对具有两个故障的块的多个条带执行重构。在故障域中的一个或多个发生故障的情况下,多个计算装置可以操作以基于多个条带中的同一条带的多少其他块已经丢失来确定对任何特定丢失块重构的速率。其中,多个故障域中的一个或多个包括多个存储装置。多个FEC保护域中的每个可以跨多个条带中的多条带。

多个条带可以组织成多个组(例如,如图6中的区块条带920

尽管已经参考某些实现方式描述了本方法和/或系统,但本领域技术人员应理解,在不背离本方法和/或系统的范围的情况下,可以做出各种改变并且可以用等同物取代。此外,在不背离本公开的范围的情况下,可以做出许多修改以使具体情况或材料适应本公开的教导。因此,本方法和/或系统不旨在限于公开的具体实现方式,而是本方法和/或系统包括落入所附权利要求的范围内的所有实现方式。

如本文中使用的,术语“电路(circuit)”和“电路(circuitry)”是指物理电子部件(即,硬件)以及可以配置硬件、由硬件执行和/或以其他方式与硬件相关联的任何软件和/或固件(“代码”)。如本文中使用的,例如,具体处理器和内存在执行第一一行或多行代码时,可以包括第一“电路”,并且在执行第二一行或多行代码时,可以包括第二“电路”。如本文所使用的,“和/或”是指由“和/或”连接的列表中的任一项或多项。作为示例,“x和/或y”是指三元素集合{(x),(y),(x,y)}中的任何元素。换句话说,“x和/或y”是指“x和y中的一者或两者”。作为又一示例,“x、y、和/或z”是指七个元素集合{(x),(y),(z),(x,y),(x,z),(y,z),(x,y,z)}中的任何元素。换句话说,“x、y和/或z”是指“x、y和z中的一者或多者”。如本文中使用的,术语“示例性”指用作非限制性示例、实例或者说明。如本文中使用的,术语“例如(e.g.)”和“例如(for example)”阐述了一种或者多种非限制性示例、实例或者说明的列表。如本文中所利用的,每当电路包括用于执行功能的必要硬件和代码(如果有必要)时,电路“可操作”以执行功能,而不管功能的性能(例如,通过用户可配置设定、工厂修剪等)是否处于被禁用或未被启用。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号