CN112052217A - 快照实现方法及装置 - Google Patents
快照实现方法及装置 Download PDFInfo
- Publication number
- CN112052217A CN112052217A CN202011025567.6A CN202011025567A CN112052217A CN 112052217 A CN112052217 A CN 112052217A CN 202011025567 A CN202011025567 A CN 202011025567A CN 112052217 A CN112052217 A CN 112052217A
- Authority
- CN
- China
- Prior art keywords
- mapping table
- segment
- snapshot
- sub
- lun
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/11—File system administration, e.g. details of archiving or snapshots
- G06F16/128—Details of file system snapshots on the file-level, e.g. snapshot creation, administration, deletion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种快照实现方法及装置,应用于分布式存储集群包括的集群节点。该方法在创建快照时,将LUN的映射表作为快照的映射表。由于该映射表已存在于集群元数据服务器中,因此,无需再向集群元数据服务器写入快照映射表,可减轻集群元数据服务器的存储压力。此外,本申请在创建快照后,为LUN分配一个空的映射表。利用该空的映射表触发为已映射逻辑区间分配新的Segment,从而避免快照数据被覆盖。由于不再需要通过Snap标志来触发分配新的Segment,因此,可进一步减轻集群元数据服务器的存储压力。此外,创建快照后,各映射表中不存在重复的映射数据,因此,可大大减轻集群元数据服务器的存储压力。
Description
技术领域
本申请涉及存储技术领域,尤其涉及一种快照实现方法及装置。
背景技术
快照(Snapshot)通常指针对指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在拷贝时间点的映像。
在分布式存储集群中,通常以逻辑单元号(Logical Unit Number,LUN)为单位创建快照。在创建快照时,需要拷贝一份LUN的映射表作为快照的映射表,并在创建快照后,将LUN的映射表中的已映射逻辑区间的snap标志修改为指示下一次写入时重新分配Segment。这样,在下一次接收到写入该已映射逻辑区间的数据时,可根据snap标志分配新的Segment,将数据写入该新的Segment对应存储空间,保证快照数据不被覆盖。
LUN的映射表以及快照的映射表作为集群元数据,均需存储至集群元数据服务器中。由于每一次创建快照,都需要拷贝一份LUN的映射表,导致多份映射表中存在大量重复的映射数据,极大消耗了集群元数据服务器的存储资源。
发明内容
有鉴于此,本申请提出一种快照实现方法及装置,用以在创建快照时,减少产生的元数据的数据量,减轻集群元数据服务器的存储压力。
为实现上述申请目的,本申请提供了如下技术方案:
第一方面,本申请提供一种快照实现方法,应用于分布式存储集群包括的集群节点,所述分布式存储集群配置有至少一个LUN,每一个LUN按照预设Segment大小划分为多个逻辑区间,所述至少一个LUN中的目标LUN当前对应的映射表为第一映射表,所述第一映射表记录有所述目标LUN中已映射的逻辑区间与Segment的标识的映射关系,所述第一映射表已存在于所述分布式存储集群包括的元数据服务器中,所述方法包括:
在创建所述目标LUN的目标快照时,建立所述目标快照与所述第一映射表的对应关系;
创建空的第二映射表;
将所述目标LUN对应的映射表从所述第一映射表切换到所述第二映射表,以使后续接收到需要写入所述目标LUN的数据,且所述第二映射表中不存在与所述数据对应逻辑区间匹配的映射关系时,为所述数据对应逻辑区间分配Segment,并将所述数据写入该分配的Segment中。
可选的,每一个LUN对应有一条快照链,所述快照链用于记录LUN的映射表以及为该LUN已创建的各快照的映射表之间的依赖关系;所述将所述目标LUN对应的映射表从所述第一映射表切换到所述第二映射表之后,所述方法还包括:
将从所述第二映射表到所述第一映射表的依赖关系添加到所述目标LUN的快照链中,以使在根据所述第二映射表无法读取到数据时,通过所述目标LUN的快照链找到所述第一映射表,再基于所述第一映射表读取数据。
可选的,所述集群节点包括至少一块用于存储数据的磁盘,每一块磁盘按照预设Block大小划分为多块Block,所述Block大小小于所述Segment大小,预设快照粒度大小等于所述Block大小,每一个Segment按照快照粒度大小划分为多个子逻辑区间,同一Segment的数据存储于同一块磁盘,所述磁盘还用于存储对应Segment中已映射的子逻辑区间与Block的标识的映射关系,每一个Segment还对应有一个写入位图,所述写入位图中的每一位对应一个子逻辑区间,用于标识对应子逻辑区间是否已写入数据,所述方法还包括:
当所述集群节点重启时,将各磁盘中存储的Segment的子逻辑区间与Block的标识的映射关系加载到内存中;
针对每一个Segment,遍历该Segment的子逻辑区间与Block的标识的映射关系;
将存在映射关系的子逻辑区间对应的位设置为第一值,将不存在映射关系的子逻辑区间对应的位设置为第二值,其中,所述第一值用于表示对应子逻辑区间已写入数据;所述第二值用于表示对应子逻辑区间未写入数据。
可选的,所述方法还包括:
在删除所述目标快照时,删除所述目标快照与所述第一映射表的对应关系。
可选的,所述集群节点包括至少一块用于存储数据的磁盘,每一块磁盘按照预设Block大小划分为多块Block,所述Block大小小于所述Segment大小,预设快照粒度大小等于所述Block大小,每一个Segment按照快照粒度大小划分为多个子逻辑区间,每一个Segment对应一个写入位图,所述写入位图中的每一位对应一个子逻辑区间,用于标识对应子逻辑区间是否已写入数据,每一个LUN对应一条快照链,所述快照链用于记录LUN当前对应的映射表以及为该LUN已创建的各快照的映射表之间的依赖关系,所述删除所述目标快照与所述第一映射表的对应关系之后,所述方法还包括:
通过所述目标LUN的快照链,确定在所述第一映射表之后生成的与所述第一映射表相邻的第三映射表;
针对所述第一映射表包括的每一个逻辑区间执行如下处理:
如果所述第三映射表包括该逻辑区间,则分别获取所述第一映射表中该逻辑区间对应的第一Segment的标识,以及所述第三映射表中该逻辑区间对应的第二Segment的标识;
获取所述第一Segment对应的第一写入位图,以及所述第二Segment对应的第二写入位图;
如果所述第一写入位图中值为第一值的目标位在所述第二写入位图中也为第一值,则确定所述目标位对应的目标子逻辑区间,其中,所述第一值用于表示对应子逻辑区间已写入数据;
从已记录的所述第一Segment的子逻辑区间与Block的标识的映射关系中,查找与所述目标子逻辑区间对应的目标Block;
释放所述目标Block。
第二方面,本申请提供一种快照实现装置,应用于分布式存储集群包括的集群节点,所述分布式存储集群配置有至少一个LUN,每一个LUN按照预设Segment大小划分为多个逻辑区间,所述至少一个LUN中的目标LUN当前对应的映射表为第一映射表,所述第一映射表记录有所述目标LUN中已映射的逻辑区间与Segment的标识的映射关系,所述第一映射表已存在于所述分布式存储集群包括的元数据服务器中,所述装置包括:
建立单元,用于在创建所述目标LUN的目标快照时,建立所述目标快照与所述第一映射表的对应关系;
创建单元,用于创建空的第二映射表;
切换单元,用于将所述目标LUN对应的映射表从所述第一映射表切换到所述第二映射表,以使后续接收到需要写入所述目标LUN的数据,且所述第二映射表中不存在与所述数据对应逻辑区间匹配的映射关系时,为所述数据对应逻辑区间分配Segment,并将所述数据写入该分配的Segment中。
可选的,每一个LUN对应有一条快照链,所述快照链用于记录LUN的映射表以及为该LUN已创建的各快照的映射表之间的依赖关系;所述装置还包括:
添加单元,用于将从所述第二映射表到所述第一映射表的依赖关系添加到所述目标LUN的快照链中,以使在根据所述第二映射表无法读取到数据时,通过所述目标LUN的快照链找到所述第一映射表,再基于所述第一映射表读取数据。
可选的,所述集群节点包括至少一块用于存储数据的磁盘,每一块磁盘按照预设Block大小划分为多块Block,所述Block大小小于所述Segment大小,预设快照粒度大小等于所述Block大小,每一个Segment按照快照粒度大小划分为多个子逻辑区间,同一Segment的数据存储于同一块磁盘,所述磁盘还用于存储对应Segment中已映射的子逻辑区间与Block的标识的映射关系,每一个Segment还对应有一个写入位图,所述写入位图中的每一位对应一个子逻辑区间,用于标识对应子逻辑区间是否已写入数据,所述装置还包括:
加载单元,用于当所述集群节点重启时,将各磁盘中存储的Segment的子逻辑区间与Block的标识的映射关系加载到内存中;
遍历单元,用于针对每一个Segment,遍历该Segment的子逻辑区间与Block的标识的映射关系;
设置单元,用于将存在映射关系的子逻辑区间对应的位设置为第一值,将不存在映射关系的子逻辑区间对应的位设置为第二值,其中,所述第一值用于表示对应子逻辑区间已写入数据;所述第二值用于表示对应子逻辑区间未写入数据。
可选的,所述装置还包括:
删除单元,用于在删除所述目标快照时,删除所述目标快照与所述第一映射表的对应关系。
可选的,所述集群节点包括至少一块用于存储数据的磁盘,每一块磁盘按照预设Block大小划分为多块Block,所述Block大小小于所述Segment大小,预设快照粒度大小等于所述Block大小,每一个Segment按照快照粒度大小划分为多个子逻辑区间,每一个Segment对应一个写入位图,所述写入位图中的每一位对应一个子逻辑区间,用于标识对应子逻辑区间是否已写入数据,每一个LUN对应一条快照链,所述快照链用于记录LUN当前对应的映射表以及为该LUN已创建的各快照的映射表之间的依赖关系,所述装置还包括:
表确定单元,用于通过所述目标LUN的快照链,确定所述第一映射表之后生成的与所述第一映射表相邻的第三映射表;
Segment查找单元,用于针对所述第一映射表包括的每一个逻辑区间执行如下处理:如果所述第三映射表包括该逻辑区间,则分别获取所述第一映射表中该逻辑区间对应的第一Segment的标识,以及所述第三映射表中该逻辑区间对应的第二Segment的标识;
位图获取单元,用于获取所述第一Segment对应的第一写入位图,以及所述第二Segment对应的第二写入位图;
子逻辑区间确定单元,用于如果所述第一写入位图中值为第一值的目标位在所述第二写入位图中也为第一值,则确定所述目标位对应的目标子逻辑区间,其中,所述第一值用于表示对应子逻辑区间已写入数据;
Block查找单元,用于从已记录的所述第一Segment的子逻辑区间与Block的标识的映射关系中,查找与所述目标子逻辑区间对应的目标Block;
释放单元,用于释放所述目标Block。
由以上描述可以看出,本申请实施例中,在创建快照时,将LUN的映射表作为快照的映射表。由于该映射表已存在于集群元数据服务器中,因此,无需再向集群元数据服务器写入快照映射表,可减轻集群元数据服务器的存储压力。此外,本申请在创建快照后,为LUN分配一个空的映射表。利用该空的映射表触发为已映射逻辑区间分配新的Segment,从而避免快照数据被覆盖。由于不再需要通过Snap标志来触发分配新的Segment,因此,可进一步减轻集群元数据服务器的存储压力。此外,创建快照后,各映射表中不存在重复的映射数据,因此,可大大减轻集群元数据服务器的存储压力。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是示例性示出的一分布式存储集群的示意图;
图2是示例性示出的SNAP1在分布式存储集群中的映射关系示意图;
图3是示例性示出的LUN1在分布式存储集群中的映射关系示意图;
图4是示例性示出的SNAP2在分布式存储集群中的映射关系示意图;
图5是本申请实施例示出的一种快照实现方法流程图;
图6是本申请实施例示出的一种写入位图的恢复流程;
图7是本申请实施例示出的一分布式存储集群示例;
图8是本申请实施例示出的释放快照所占用磁盘空间的实现流程;
图9是本申请实施例示出的一种快照实现装置的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。
在本申请实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请实施例。在本申请实施例中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请实施例范围的情况下,协商信息也可以被称为第二信息,类似地,第二信息也可以被称为协商信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
分布式存储集群通常包括多台服务器(亦称为集群节点)。每一个集群节点包括至少一块用于存储数据的磁盘(亦称为数据盘)。以下描述中若无特殊说明,磁盘均指数据盘。
用户基于LUN访问集群中各集群节点上的存储资源。为了避免人为误操作或软件故障导致LUN中数据被损坏或丢失,可采用快照技术保存LUN在某一时刻的数据。
参见图1,为示例性示出的一分布式存储集群的示意图。为了简化说明,仅示出该分布式存储集群包括的2个集群节点(分别记为Server1和Server2)以及1个LUN(记为LUN1)。其中,Server1包括2块用于存储数据的磁盘,分别记为OSD1和OSD2;Server2包括2块用于存储数据的磁盘,分别记为OSD3和OSD4。
LUN1按照预设Segment大小(256MB)划分为多个逻辑区间;OSD按照预设Block大小(256MB)划分为多块Block。
分布式存储集群天然支持精简配置,随用随给,在实际写入过程中,为LUN分配真实的物理资源,完成从逻辑资源到物理资源的映射。
如图1所示,逻辑区间【0,256MB】内被写入过数据块A和数据块C,逻辑区间【1GB,1GB+256MB】内被写入过数据块B,则集群元数据中必然记录有逻辑区间【0,256MB】到Segment的映射关系,以及逻辑区间【1GB,1GB+256MB】到Segment的映射关系。
如图1所示,逻辑区间【0,256MB】映射到Seg1,逻辑区间【1GB,1GB+256MB】映射到Seg2,则当前LUN1所对应映射关系可表述为:
LUN1→[0:Seg1;1GB:Seg2]
其中,“0”为逻辑区间【0,256MB】的起始地址;“1GB”为逻辑区间【1GB,1GB+256MB】的起始地址。即,通过逻辑区间的起始地址标识对应逻辑区间。通过上述映射关系可知,LUN1中已有2个逻辑区间被写入过数据。
这里,需要说明的是,Seg为Segment的缩写。以下描述中,Seg和Segment均表示同一含义。
此外,集群元数据中还记录有已映射Segment与存储该Segment对应数据的Block的映射关系。如图1所示,Seg1映射到OSD1的Blk8,Seg2映射到OSD3的Blk3,则Seg1和Seg2所对应映射关系可表述为:
Seg1→[OSD1:Blk8]
Seg2→[OSD3:Blk3]
即,Seg1对应数据存储在OSD1的Blk8中;Seg2对应数据存储在OSD3的Blk3中。
这里,Blk为Block的缩写。以下描述中,Blk和Block均表示同一含义。
为了实现分布式存储集群的快照功能,通常在LUN的映射关系中引入Snap标志,该Snap标志用于指示在修改已映射逻辑区间的数据时是否需要分配新的Segment。参见如下LUN1的映射关系:
LUN1→[0:Seg1:F;1GB:Seg2:F]
其中,“F”为【0,256MB】和【1GB,1GB+256MB】的Snap标志,用于指示下次向【0,256MB】或【1GB,1GB+256MB】中写入数据时,不需要分配新的Segment。作为一个示例,当Snap标志为“T”时,用于指示下次写入时,需要分配新的Segment。
上述LUN1的映射关系亦可通过如下映射表表示:
表1
在创建LUN1的快照(记为SNAP1)时,需要拷贝一份LUN1的映射表,作为快照(记为SNAP1)的映射表,如表2所示。
表2
然后,修改表1中已映射逻辑区间的Snap标志为T,修改后LUN1的映射表如表3所示。
表3
此时,LUN1的映射关系亦可表示为:
LUN1→[0:Seg1:T;1GB:Seg2:T]
SNAP1的映射关系亦可表示为:
SNAP1→[0:Seg1:F;1GB:Seg2:F]
同时,需要建立LUN1到SNAP1的快照链,如下所示:
LUN1→SNAP1
此时,SNAP1在分布式存储集群中的映射如图2所示。
当再次接收到针对LUN1的写请求时,获取该写请求包括的待写入数据的起始地址以及数据大小,比如,待写入数据块D的起始地址为0,数据块大小为32K,则可确定待写入范围为【0,32KB】。
根据该待写入范围【0,32KB】,可确定此次写请求仅涉及LUN1中的一个逻辑区间【0,256MB】。
根据该逻辑区间的起始地址0,查询表3,可知该逻辑区间已映射到Seg1。且该逻辑区间的Snap标志为T,因此,分配新的Segment,记为Seg3。并指定用于存储Seg3对应数据的Block,比如,OSD2的Blk10,建立Seg3到OSD2的Blk10的映射关系,该映射关系可表示为:
Seg3→[OSD2:Blk10]
由于LUN1中逻辑区间【0,256MB】与Segment的映射关系已发生变化,则需要修改LUN1的映射关系。具体为,将起始地址0与Seg1的映射关系修改为起始地址0与Seg3的映射关系,同时,修改对应Snap标志为F。修改后的LUN1的映射关系可表示为:
LUN1→[0:Seg3:F;1GB:Seg2:T]
对应映射表为:
表4
在确定数据块D所要写入的Segment(Seg3)后,需要确定该数据块D在Seg3中具体写入的子逻辑区间。
这里,需要说明的是,每一个Segment可按照预设快照粒度大小(比如,64KB)划分为多个子逻辑区间,比如,【0,64KB】、【64KB,128KB】、【128KB,192KB】、【192KB,256KB】,以此类推。
针对Segment的写请求最终被拆分为针对每一个子逻辑区间的写请求。由于数据块D的写入范围为【0,32KB】,仅涉及到Seg3中的一个子逻辑区间【0,64KB】,因此,仅需针对Seg3的子逻辑区间【0,64KB】写入数据D即可。
由于数据块D的大小(32KB)小于一个子逻辑区间(64KB)的大小,因此,需要回读Seg3中子逻辑区间【0,64KB】内的数据。
这里,需要补充说明的是,每一个已映射Segment对应一个写入位图(bitmap)。该写入位图中的每一位(bit)对应Segment中的一个子逻辑区间,用于标识该子逻辑区间是否写入过数据。比如,bit=0,表示对应子逻辑区间未写入过数据;bit=1,表示对应子逻辑区间写入过数据。
如图1所示,数据块A、B、C的大小均为64KB,数据块A位于Seg1的子逻辑区间【0,64KB】;数据块C位于Seg1的子逻辑区间【256KB,320KB】;数据块B位于Seg2的子逻辑区间【256MB-64KB,256MB】,对应LUN1中的【1GB+256MB-64KB,1GB+256MB】,则此时Seg1对应的bitmap可表示为:
Seg1→[bitmap:10001000……000]
即,Seg1的子逻辑区间【0,64KB】和【256KB,320KB】对应bit为1,表示写入过数据;其它子逻辑区间对应bit为0,表示未写入过数据。
同理,Seg2对应的bitmap可表示为:
Seg2→[bitmap:00000000……001]
即,Seg2的最后一个子逻辑区间【256MB-64KB,256MB】对应bit为1,表示写入过数据;其它子逻辑区间对应bit为0,表示未写入过数据。
如前所述,Seg3为新分配的Segment,因此,初始bitmap中各bit的值均为0,可表示为:
Seg3→[bitmap:00000000……000]
当确定需要从Seg3的子逻辑区间【0,64KB】回读数据时,首先查询Seg3对应的bitmap。子逻辑区间【0,64KB】对应bit为0,说明Seg3的子逻辑区间【0,64KB】未写入过数据,则通过快照链LUN1→SNAP1找到SNAP1的映射表(表2)。
根据子逻辑区间【0,64KB】的起始地址0,从表2中,找到该子逻辑区间【0,64KB】所属逻辑区间【0,256MB】映射到的Segment(Seg1)。
从Seg1对应bitmap中,查找子逻辑区间【0,64KB】对应的bit,该bit=1,则确定所要回读的数据位于Seg1中。
根据已记录的Seg1与OSD1的Blk8的映射关系,从OSD1的Blk8中读取数据块A。
将数据块A的后32KB数据与数据块D合并,组成64KB大小的数据块,写入Seg3的子逻辑区间【0,64KB】,即,写入Seg3对应的OSD2的Blk10中。更新Seg3对应bitmap为:
Seg3→[bitmap:10000000……000]
此时,LUN1在分布式存储集群中的映射如图3所示。
可以看出,对Seg1中数据的修改,实际写入了Seg3,从而避免Seg1中的快照数据被覆盖。
当再次创建LUN1的快照(记为SNAP2)时,拷贝当前LUN1的映射表(表4),作为SNAP2的映射表,如表5所示。
表5
然后,修改表4中逻辑区间【0,256MB】对应的Snap标志为T,修改后LUN1的映射表如表6所示。
表6
此时,LUN1的映射关系亦可表示为:
LUN1→[0:Seg3:T;1GB:Seg2:T]
SNAP2的映射关系亦可表示为:
SNAP2→[0:Seg3:F;1GB:Seg2:T]
同时,更新LUN1的快照链,如下所示:
LUN1→SNAP2→SNAP1
此时,SNAP2在分布式存储集群中的映射如图4所示。
从上述创建快照的过程可以看出,每一次创建快照时都需要拷贝一份LUN的映射表作为快照的映射表。LUN的映射表以及各快照的映射表均需存储至集群元数据服务器中。随着存储数据量的不断增加,需要拷贝并存储至集群元数据服务器中的映射表的体量也在增加,且各映射表中存在大量重复的映射数据,比如,表2、表5、表6中均存在Seg2的映射数据。这无疑增加了集群元数据服务器的存储压力。
此外,各Segment对应的写入位图(bitmap)也需要存储在集群元数据服务器中,以便集群节点重启时,可从集群元数据服务器中恢复各Segment对应的写入位图。这无疑进一步增加了集群元数据服务器的存储压力。
针对上述问题,本申请实施例提出一种快照实现方法,该方法在创建快照时,直接将LUN的映射表作为快照的映射表,并为LUN分配一个空的映射表,来减轻集群元数据服务器的存储压力。
为了使本申请实施例的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本申请实施例执行详细描述:
参见图5,为本申请实施例示出的一种快照实现方法的流程图。该流程应用于分布式存储集群包括的集群节点。
如图5所示,该流程可包括以下步骤:
步骤501,在创建目标LUN的目标快照时,建立目标快照与第一映射表的对应关系。
分布式存储集群通常配置有至少一个LUN。这里,将当前创建快照的LUN称为目标LUN,将当前为该目标LUN创建的快照称为目标快照。
本申请实施例中,在为目标LUN创建目标快照时,直接将目标LUN对应的映射表作为目标快照的映射表。
这里,将目标LUN当前对应的映射表称为第一映射表。可以理解的是,之所以称为第一映射表,只是为了便于区分而进行的命名,并非用于限定。
该第一映射表记录有目标LUN中已映射的逻辑区间与Segment的标识的映射关系。仍以LUN1为例,表7示例性示出LUN1对应的第一映射表(记为MT1)的示例。
表7
其中,LUN1与MT1的对应关系可表示为:
LUN1→MT1
MT1记录的映射关系可表示为:
MT1→[0:Seg1;1GB:Seg2]
当创建LUN1的快照(记为SNAP11)时,直接将LUN1对应的映射表MT1作为SNAP11的映射表。即,建立SANP11与MT1的对应关系,可表示为:
SNAP11→MT1
这里,需要说明的是,在数据写入过程中,LUN产生的映射关系已存储在集群元数据服务器中。也就是说,在为目标LUN创建目标快照时,集群元数据服务器中已存在目标LUN对应的第一映射表。因此,在将第一映射表作为目标快照的映射表后,无需再向集群元数据服务器存储目标快照的映射表,可有效减轻集群服务器的存储压力。
步骤502,创建空的第二映射表。
这里,第二映射表只是为便于区分而进行的命名,并非用于限定。参见表8为创建的第二映射表(记为MT2)示例。
表8
新创建的第二映射表中未记录任何映射关系。
步骤503,将目标LUN对应的映射表从第一映射表切换到第二映射表。
仍以LUN1为例,将LUN1对应的映射表从MT1切换到MT2。即,将LUN1与MT1的对应关系更新为LUN1与MT2的对应关系:
LUN1→MT2
在后续接收到需要写入目标LUN的数据时,若第二映射表中不存在该数据所对应逻辑区间的映射关系,则为该数据对应逻辑区间分配Segment,并将数据写入该分配的Segment中。
这里,需要说明的是,由于第二映射表是一个新增的空的映射表,该映射表中不存在快照之前已映射的逻辑区间与Segment的标识的映射关系,因此,当再次接收到需要写入已映射逻辑区间的数据时,会为该已映射逻辑区间分配新的Segment,将数据写入该新的Segment中,从而避免覆盖快照数据。
仍以LUN1为例,在创建快照之前,LUN1对应的映射表如表7所示,在创建快照(SNAP11)之后,LUN1对应的映射表如表8所示。
当接收到需要写入LUN1中【0,64KB】范围的数据时,根据该写入范围确定此次写入所涉及到的逻辑区间为【0,256MB】。根据该逻辑区间的起始地址0查询LUN当前对应的映射表(表8)。由于表8中不存在该逻辑区间与Segment的标识的映射关系,因此,为该逻辑区间【0,256MB】分配Segment,记为Seg3。将数据写入该Seg3中,并将逻辑区间【0,256MB】与Seg3的映射关系记录到表8中,得到如表9所示映射表。
表9
可以看出,在创建快照之前,LUN1对应的映射表(表7)中已存在逻辑区间【0,256MB】与Seg1的映射关系。本申请通过为LUN1指定空的映射表(表8),触发为该已映射逻辑区间分配新的Segment(Seg3),从而避免Seg1中快照数据被覆盖。
且由于不再需要通过Snap标志触发分配新的Segment,因此,可减少存储至集群元数据服务器的元数据的数据量,减轻集群元数据服务器的存储压力。
此外,创建快照后,LUN的映射表(表9)和快照的映射表(表7)不存在重复的映射数据,因此,可大大减轻集群元数据服务器的存储压力。
至此,完成图5所示流程。
通过图5所示流程可以看出,本申请实施例中,在创建快照时,将LUN的映射表作为快照的映射表。由于该映射表已存在于集群元数据服务器中,因此,无需再向集群元数据服务器写入快照映射表,可减轻集群元数据服务器的存储压力。此外,本申请在创建快照后,为LUN分配一个空的映射表。利用该空的映射表触发为已映射逻辑区间分配新的Segment,从而避免快照数据被覆盖。由于不再需要通过Snap标志来触发分配新的Segment,因此,可进一步减轻集群元数据服务器的存储压力。此外,创建快照后,各映射表中不存在重复的映射数据,因此,可大大减轻集群元数据服务器的存储压力。
作为一个实施例,在执行步骤503之后,还需要更新目标LUN对应的快照链。
这里,需要说明的是,本申请实施例针对每一个已创建快照的LUN都维护有对应的快照链。该快照链用于记录LUN的映射表以及已创建的该LUN的各快照的映射表之间的依赖关系。
在执行步骤503之后,集群节点将从第二映射表到第一映射表的依赖关系添加到目标LUN的快照链中。
仍以第二映射表为MT2,第一映射表为MT1为例,此次为LUN1首次创建快照,则添加了MT2到MT1依赖关系的快照链可表示为:
MT2→MT1
当需要从目标LUN中读取数据时,由于目标LUN当前对应的映射表为第二映射表,因此,首先查询第二映射表。若根据该第二映射表无法读取到数据,则可通过目标LUN的快照链找到第一映射表,再基于该第一映射表读取数据。
以表9所示MT2以及表7所示MT1为例,当前LUN1对应的快照链为MT2→MT1。为了简化说明,以当前待读取数据位于LUN1中逻辑区间【1GB,1GB+256MB】为例,根据该逻辑区间的起始地址查询LUN1当前对应的映射表(表9),表9中不存在该逻辑区间的映射关系,则通过快照链MT2→MT1,找到MT1。MT1中包括该逻辑区间与Seg2的映射关系,即,待读取数据位于Seg2中,因此,可从Seg2中读取到数据。
作为一个实施例,本申请实施例中,每一个Segment仍对应有一个写入位图(bitmap)。该写入位图的具体含义以及使用方法在前述描述中已介绍,这里不再赘述。
当集群节点重启时,需要恢复每一个Segment对应的写入位图。为此,本申请实施例提出一种写入位图恢复的方法。参见图6,为本申请实施例示出的一种写入位图的恢复流程。如图6所示,该流程可包括以下步骤:
步骤601,当集群节点重启时,将本节点上各磁盘存储的Segment的子逻辑区间与Block的标识的映射关系加载到内存中。
本申请实施例中,集群节点的每一块磁盘按照预设Block大小划分为多块Block。该预设Block大小小于Segment大小。比如,Segment大小为256MB,Block大小为64KB。
同时,预设快照粒度大小等于Block大小。将每一个Segment按照快照粒度大小划分为多个子逻辑区间。也就是说,子逻辑区间的大小等于Block的大小。
当在写入过程中为LUN的逻辑区间分配Segment时,可指定用于存储该Segment对应数据的磁盘,建立Segment的标识与磁盘的标识的映射关系,并将该映射关系存储至集群元数据服务器。
比如,指定用于存储Seg1对应数据的磁盘为OSD1,则建立Seg1与OSD1的映射关系,可表示为:
Seg1→[OSD1]
将该Seg1与OSD1的映射关系存储至集群元数据服务器。
在确定用于存储Segment数据的磁盘后,可根据待写入数据在Segment中的写入范围,确定需要写入数据的至少一个子逻辑区间。从Segment对应磁盘中,为该需要写入数据的各子逻辑区间分配对应的Block,并记录子逻辑区间与Block的标识的映射关系。将映射关系存储在磁盘中。
以向Seg1的子逻辑区间【0,64KB】写入数据为例,从Seg1对应的磁盘OSD1中,为该子逻辑区间【0,64KB】分配Blk5,建立该子逻辑区间【0,64KB】与Blk5的映射关系,可表示为:
Seg1→[0:Blk5]
将该映射关系存储在OSD1中。
可以看出,本申请实施例中,各Segment中已映射的子逻辑区间与Block的标识的映射关系均存储在各Segment对应的磁盘中,因此,本步骤可从各磁盘中,获取到各Segment中已映射的子逻辑区间与Block的标识的映射关系。
步骤602,针对每一个Segment,遍历该Segment的子逻辑区间与Block的标识的映射关系。
步骤603,将存在映射关系的子逻辑区间对应的位设置为第一值,将不存在映射关系的子逻辑区间对应的位设置为第二值。
如前所述,每一个Segment对应一个写入位图。写入位图中的每一位对应一个子逻辑区间,用于标识对应子逻辑区间是否已写入数据。
在支持精简配置的分布式存储系统中,只有发生实际写入的子逻辑区间才会分配对应的Block,建立子逻辑区间与Block的标识的映射关系。也就是说,凡是存在映射关系的子逻辑区间,均已写入过数据。
因此,可通过遍历Segment的子逻辑区间与Block的标识的映射关系,将存在映射关系的子逻辑区间对应的位设置为第一值,不存在映射关系的子逻辑区间对应的位设置为第二值。
这里,第一值用于表示对应子逻辑区间已写入数据;第二值用于表示对应子逻辑区间未写入数据。比如,第一值为1,第二值为0。
可以理解的是,之所以称为第一值、第二值,只是为便于区分而进行的命名,并非用于限定。
参见图7,为本申请实施例示出的一分布式存储集群示例。其中,OSD1存储有如下映射关系:
Seg1→[0:Blk5;256KB:Blk6]
OSD2当前未存储任何映射关系;
OSD3存储有如下映射关系:
Seg2→[256MB-64KB:Blk0]
OSD4当前未存储任何映射关系。
当集群节点Server1重启时,Server1从OSD1和OSD2中读取已存储映射数据,可得到Seg1→[0:Blk5;256KB:Blk6]。从该映射数据中可知,Seg1的第1个子逻辑区间【0,64KB】写入过数据;Seg1的第5个子逻辑区间【256KB,320KB】写入过数据,则将子逻辑区间【0,64KB】在写入位图中的对应位设置为1;子逻辑区间【256KB,320KB】在写入位图中的对应位设置为1;其它位设置为0,得到如下Seg1的写入位图:
Seg1→[bitmap:10001000……000]
同理,当集群节点Server2重启时,Server2从OSD3和OSD4中读取已存储映射数据,可得到Seg2→[256MB-64KB:Blk0]。从该映射数据中可知,Seg2的最后一个子逻辑区间【256MB-64KB,256MB】写入过数据,则将子逻辑区间【256MB-64KB,256MB】在写入位图中的对应位设置为1,其它位设置为0,得到如下Seg2的写入位图:
Seg2→[bitmap:00000000……001]
至此,完成图6所示流程。
通过图6所示流程可以看出,本申请实施例中,当集群节点重启时,可直接利用本地磁盘中存储的映射数据,自动恢复Segment的写入位图,而不再需要从集群元数据服务器中获取写入位图,因此,不需要将写入位图存储在集群元数据服务器中,可进一步减少对集群元数据服务器存储空间的占用。
作为一个实施例,当删除目标快照时,删除该目标快照与第一映射表的对应关系。删除后,将无法再通过该目标快照访问到对应快照数据。
此外,在删除之后,本申请实施例还需确定是否存在可释放的存储空间。参见图8,为本申请实施例示出的释放快照所占用磁盘空间的实现流程。如图8所示,该流程可包括以下步骤:
步骤801,通过目标LUN的快照链,确定在第一映射表之后生成的与第一映射表相邻的第三映射表。
如前所述,快照链用于记录LUN当前对应的映射表以及为该LUN创建的各快照的映射表之间的依赖关系。
当删除目标快照时,可根据目标LUN对应的快照链中各映射表的依赖关系,确定在目标快照对应的第一映射表之后生成的、且在快照链中与第一映射表相邻的映射表。
这里,将在第一映射表之后生成的且与第一映射表相邻的映射表,称为第三映射表。可以理解的是,之所以称为第三映射表,只是为便于区分而进行的命名,并非用于限定。
仍以LUN1为例,假设针对LUN1已创建2个快照,其中,第一个快照为SNAP11,第二个快照为SNAP12。SNAP11对应的映射表为MT1,SNAP12对应的映射表为MT2,LUN1当前对应的映射表为MT3,则LUN1当前对应的快照链为:
MT3→MT2→MT1
现删除快照SNAP11,则通过查询LUN1的快照链可知,在SNAP11对应的MT1之后生成的且与MT1相邻的映射表为MT2。
在确定第一映射表和第三映射表之后,本申请实施例针对第一映射表包括的每一个逻辑区间执行后续处理。
以第一映射表为表7所示MT1为例,该MT1包括2个逻辑区间(【0,256MB】和【1GB,1GB+256MB】)的映射关系,则针对每一个逻辑区间执行后续处理。
步骤802,如果第三映射表包括该逻辑区间,则分别获取第一映射表中该逻辑区间对应的第一Segment的标识,以及第三映射表中该逻辑区间对应的第二Segment的标识。
这里,第一Segment、第二Segment只是为便于区分而进行的命名,并非用于限定。
仍以表7所示MT1为第一映射表,表9所示MT2为第三映射表为例。针对MT1包括的逻辑区间【0,256MB】,查询MT2中是否包括该逻辑区间,从表9可知,该MT2包括逻辑区间【0,256MB】,说明该逻辑区间被修改过,可能存在可被释放的Block,则分别获取MT1中该逻辑区间【0,256MB】对应的Seg1,以及MT2中该逻辑区间【0,256MB】对应的Seg3。
步骤803,获取第一Segment对应的第一写入位图,以及第二Segment对应的第二写入位图。
这里,第一写入位图、第二写入位图只是为便于区分而进行的命名,并非用于限定。
比如,获取到Seg1对应的写入位图为:
Seg1→[bitmap:10001000……000]
Seg3对应的写入位图为:
Seg3→[bitmap:10000000……000]
步骤804,如果第一写入位图中值为第一值的目标位在第二写入位图中也为第一值,则确定该目标位对应的目标子逻辑区间。
如前所述,写入位图中的每一位都对应Segment中的一个子逻辑区间。当某一位的值为第一值(比如,1)时,表示该位对应的子逻辑区间已写入数据。
这里,目标位指当前正在处理的第一写入位图中的值为第一值的位。
如果该目标位在第二写入位图中对应的值也为第一值,说明该目标位对应的子逻辑区间被修改过,则需要确定该目标位对应的子逻辑区间。这里,将目标位对应的子逻辑区间称为目标子逻辑区间。
仍以Seg1对应的写入位图为第一写入位图,Seg3对应的写入位图为第二写入位图为例。Seg1对应的写入位图中的第0位(bit0)的值为1,则查找Seg3对应的写入位图中的bit0的值为1。
由于Seg1对应写入位图中的bit0和Seg3对应写入位图中的bit0均对应同一逻辑区间的同一子逻辑区间,因此,从上述各bit0的值可以看出,在通过Seg1向该子逻辑区间写入数据(比如,数据块A)后,又通过Seg3向该子逻辑区间写入数据(比如,数据块D)。也就是说,该子逻辑区间的最新数据已在Seg3中。
当不再需要通过快照(SNAP11)访问该子逻辑区间的旧数据时,应回收存储该旧数据的Block。为此,首先,确定bit0在Seg1中对应的子逻辑区间为【0,64KB】。
步骤805,从已记录的第一Segment的子逻辑区间与Block的标识的映射关系中,查找与目标子逻辑区间对应的目标Block。
这里,将用于存储目标子逻辑区间对应数据的Block称为目标Block。
仍以第一Segment为Seg1为例,该Seg1对应数据被指定存储在OSD1中,该Seg1对应映射关系如下所示:
Seg1→[0:Blk5;256KB:Blk6]
即,Seg1的子逻辑区间【0,64KB】映射到OSD1的Blk5;Seg1的子逻辑区间【256KB,320KB】映射到OSD1的Blk6。
当通过步骤804确定目标子逻辑区间为Seg1的【0,64KB】时,可查询上述Seg1的映射关系,得到与目标子逻辑区间【0,64KB】对应的Blk5。该Blk5即为需要回收的目标Block。
步骤806,释放该目标Block。
即,释放已删除的目标快照所占用的存储资源。
当然,回收Block资源后,需更新Segment的映射关系以及对应写入位图。
仍以Seg1为例,回收OSD1的Blk5后,Seg1对应映射关系更新为:
Seg1→[256KB:Blk6]
Seg1对应写入位图更新为:
Seg1→[bitmap:00001000……000]
至此,完成图8所示流程。
通过图8所示流程,可有效释放已删除快照的存储资源。
以上对本申请实施例提供的方法进行了描述,下面对本申请实施例提供的装置进行描述:
参见图9,为本申请实施例提供的装置的结构示意图。该装置应用于分布式存储集群包括的集群节点,所述分布式存储集群配置有至少一个LUN,每一个LUN按照预设Segment大小划分为多个逻辑区间,所述至少一个LUN中的目标LUN当前对应的映射表为第一映射表,所述第一映射表记录有所述目标LUN中已映射的逻辑区间与Segment的标识的映射关系,所述第一映射表已存在于所述分布式存储集群包括的元数据服务器中,所述装置包括:建立单元901、创建单元902以及切换单元903,其中:
建立单元901,用于在创建所述目标LUN的目标快照时,建立所述目标快照与所述第一映射表的对应关系;
创建单元902,用于创建空的第二映射表;
切换单元903,用于将所述目标LUN对应的映射表从所述第一映射表切换到所述第二映射表,以使后续接收到需要写入所述目标LUN的数据,且所述第二映射表中不存在与所述数据对应逻辑区间匹配的映射关系时,为所述数据对应逻辑区间分配Segment,并将所述数据写入该分配的Segment中。
作为一个实施例,每一个LUN对应有一条快照链,所述快照链用于记录LUN的映射表以及为该LUN已创建的各快照的映射表之间的依赖关系;所述装置还包括:
添加单元,用于将从所述第二映射表到所述第一映射表的依赖关系添加到所述目标LUN的快照链中,以使在根据所述第二映射表无法读取到数据时,通过所述目标LUN的快照链找到所述第一映射表,再基于所述第一映射表读取数据。
作为一个实施例,所述集群节点包括至少一块用于存储数据的磁盘,每一块磁盘按照预设Block大小划分为多块Block,所述Block大小小于所述Segment大小,预设快照粒度大小等于所述Block大小,每一个Segment按照快照粒度大小划分为多个子逻辑区间,同一Segment的数据存储于同一块磁盘,所述磁盘还用于存储对应Segment中已映射的子逻辑区间与Block的标识的映射关系,每一个Segment还对应有一个写入位图,所述写入位图中的每一位对应一个子逻辑区间,用于标识对应子逻辑区间是否已写入数据,所述装置还包括:
加载单元,用于当所述集群节点重启时,将各磁盘中存储的Segment的子逻辑区间与Block的标识的映射关系加载到内存中;
遍历单元,用于针对每一个Segment,遍历该Segment的子逻辑区间与Block的标识的映射关系;
设置单元,用于将存在映射关系的子逻辑区间对应的位设置为第一值,将不存在映射关系的子逻辑区间对应的位设置为第二值,其中,所述第一值用于表示对应子逻辑区间已写入数据;所述第二值用于表示对应子逻辑区间未写入数据。
作为一个实施例,所述装置还包括:
删除单元,用于在删除所述目标快照时,删除所述目标快照与所述第一映射表的对应关系。
作为一个实施例,所述集群节点包括至少一块用于存储数据的磁盘,每一块磁盘按照预设Block大小划分为多块Block,所述Block大小小于所述Segment大小,预设快照粒度大小等于所述Block大小,每一个Segment按照快照粒度大小划分为多个子逻辑区间,每一个Segment对应一个写入位图,所述写入位图中的每一位对应一个子逻辑区间,用于标识对应子逻辑区间是否已写入数据,每一个LUN对应一条快照链,所述快照链用于记录LUN当前对应的映射表以及为该LUN已创建的各快照的映射表之间的依赖关系,所述装置还包括:
表确定单元,用于通过所述目标LUN的快照链,确定所述第一映射表之后生成的与所述第一映射表相邻的第三映射表;
Segment查找单元,用于针对所述第一映射表包括的每一个逻辑区间执行如下处理:如果所述第三映射表包括该逻辑区间,则分别获取所述第一映射表中该逻辑区间对应的第一Segment的标识,以及所述第三映射表中该逻辑区间对应的第二Segment的标识;
位图获取单元,用于获取所述第一Segment对应的第一写入位图,以及所述第二Segment对应的第二写入位图;
子逻辑区间确定单元,用于如果所述第一写入位图中值为第一值的目标位在所述第二写入位图中也为第一值,则确定所述目标位对应的目标子逻辑区间,其中,所述第一值用于表示对应子逻辑区间已写入数据;
Block查找单元,用于从已记录的所述第一Segment的子逻辑区间与Block的标识的映射关系中,查找与所述目标子逻辑区间对应的目标Block;
释放单元,用于释放所述目标Block。
由以上描述可以看出,本申请实施例中,在创建快照时,将LUN的映射表作为快照的映射表。由于该映射表已存在于集群元数据服务器中,因此,无需再向集群元数据服务器写入快照映射表,可减轻集群元数据服务器的存储压力。此外,本申请在创建快照后,为LUN分配一个空的映射表。利用该空的映射表触发为已映射逻辑区间分配新的Segment,从而避免快照数据被覆盖。由于不再需要通过Snap标志来触发分配新的Segment,因此,可进一步减轻集群元数据服务器的存储压力。此外,创建快照后,各映射表中不存在重复的映射数据,因此,可大大减轻集群元数据服务器的存储压力。
以上所述仅为本申请实施例的较佳实施例而已,并不用以限制本申请,凡在本申请实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (10)
1.一种快照实现方法,其特征在于,应用于分布式存储集群包括的集群节点,所述分布式存储集群配置有至少一个LUN,每一个LUN按照预设Segment大小划分为多个逻辑区间,所述至少一个LUN中的目标LUN当前对应的映射表为第一映射表,所述第一映射表记录有所述目标LUN中已映射的逻辑区间与Segment的标识的映射关系,所述第一映射表已存在于所述分布式存储集群包括的元数据服务器中,所述方法包括:
在创建所述目标LUN的目标快照时,建立所述目标快照与所述第一映射表的对应关系;
创建空的第二映射表;
将所述目标LUN对应的映射表从所述第一映射表切换到所述第二映射表,以使后续接收到需要写入所述目标LUN的数据,且所述第二映射表中不存在与所述数据对应逻辑区间匹配的映射关系时,为所述数据对应逻辑区间分配Segment,并将所述数据写入该分配的Segment中。
2.如权利要求1所述的方法,其特征在于,每一个LUN对应一条快照链,所述快照链用于记录LUN的映射表以及为该LUN已创建的各快照的映射表之间的依赖关系;所述将所述目标LUN对应的映射表从所述第一映射表切换到所述第二映射表之后,所述方法还包括:
将从所述第二映射表到所述第一映射表的依赖关系添加到所述目标LUN的快照链中,以使在根据所述第二映射表无法读取到数据时,通过所述目标LUN的快照链找到所述第一映射表,再基于所述第一映射表读取数据。
3.如权利要求1所述的方法,其特征在于,所述集群节点包括至少一块用于存储数据的磁盘,每一块磁盘按照预设Block大小划分为多块Block,所述Block大小小于所述Segment大小,预设快照粒度大小等于所述Block大小,每一个Segment按照快照粒度大小划分为多个子逻辑区间,同一Segment的数据存储于同一块磁盘,所述磁盘还用于存储对应Segment中已映射的子逻辑区间与Block的标识的映射关系,每一个Segment还对应一个写入位图,所述写入位图中的每一位对应一个子逻辑区间,用于标识对应子逻辑区间是否已写入数据,所述方法还包括:
当所述集群节点重启时,将各磁盘中存储的Segment的子逻辑区间与Block的标识的映射关系加载到内存中;
针对每一个Segment,遍历该Segment的子逻辑区间与Block的标识的映射关系;
将存在映射关系的子逻辑区间对应的位设置为第一值,将不存在映射关系的子逻辑区间对应的位设置为第二值,其中,所述第一值用于表示对应子逻辑区间已写入数据;所述第二值用于表示对应子逻辑区间未写入数据。
4.如权利要求1所述的方法,其特征在于,所述方法还包括:
在删除所述目标快照时,删除所述目标快照与所述第一映射表的对应关系。
5.如权利要求4所述的方法,其特征在于,所述集群节点包括至少一块用于存储数据的磁盘,每一块磁盘按照预设Block大小划分为多块Block,所述Block大小小于所述Segment大小,预设快照粒度大小等于所述Block大小,每一个Segment按照快照粒度大小划分为多个子逻辑区间,每一个Segment对应一个写入位图,所述写入位图中的每一位对应一个子逻辑区间,用于标识对应子逻辑区间是否已写入数据,每一个LUN对应一条快照链,所述快照链用于记录LUN当前对应的映射表以及为该LUN已创建的各快照的映射表之间的依赖关系,所述删除所述目标快照与所述第一映射表的对应关系之后,所述方法还包括:
通过所述目标LUN的快照链,确定在所述第一映射表之后生成的与所述第一映射表相邻的第三映射表;
针对所述第一映射表包括的每一个逻辑区间执行如下处理:
如果所述第三映射表包括该逻辑区间,则分别获取所述第一映射表中该逻辑区间对应的第一Segment的标识,以及所述第三映射表中该逻辑区间对应的第二Segment的标识;
获取所述第一Segment对应的第一写入位图,以及所述第二Segment对应的第二写入位图;
如果所述第一写入位图中值为第一值的目标位在所述第二写入位图中也为第一值,则确定所述目标位对应的目标子逻辑区间,其中,所述第一值用于表示对应子逻辑区间已写入数据;
从已记录的所述第一Segment的子逻辑区间与Block的标识的映射关系中,查找与所述目标子逻辑区间对应的目标Block;
释放所述目标Block。
6.一种快照实现装置,其特征在于,应用于分布式存储集群包括的集群节点,所述分布式存储集群配置有至少一个LUN,每一个LUN按照预设Segment大小划分为多个逻辑区间,所述至少一个LUN中的目标LUN当前对应的映射表为第一映射表,所述第一映射表记录有所述目标LUN中已映射的逻辑区间与Segment的标识的映射关系,所述第一映射表已存在于所述分布式存储集群包括的元数据服务器中,所述装置包括:
建立单元,用于在创建所述目标LUN的目标快照时,建立所述目标快照与所述第一映射表的对应关系;
创建单元,用于创建空的第二映射表;
切换单元,用于将所述目标LUN对应的映射表从所述第一映射表切换到所述第二映射表,以使后续接收到需要写入所述目标LUN的数据,且所述第二映射表中不存在与所述数据对应逻辑区间匹配的映射关系时,为所述数据对应逻辑区间分配Segment,并将所述数据写入该分配的Segment中。
7.如权利要求6所述的装置,其特征在于,每一个LUN对应有一条快照链,所述快照链用于记录LUN的映射表以及为该LUN已创建的各快照的映射表之间的依赖关系;所述装置还包括:
添加单元,用于将从所述第二映射表到所述第一映射表的依赖关系添加到所述目标LUN的快照链中,以使在根据所述第二映射表无法读取到数据时,通过所述目标LUN的快照链找到所述第一映射表,再基于所述第一映射表读取数据。
8.如权利要求6所述的装置,其特征在于,所述集群节点包括至少一块用于存储数据的磁盘,每一块磁盘按照预设Block大小划分为多块Block,所述Block大小小于所述Segment大小,预设快照粒度大小等于所述Block大小,每一个Segment按照快照粒度大小划分为多个子逻辑区间,同一Segment的数据存储于同一块磁盘,所述磁盘还用于存储对应Segment中已映射的子逻辑区间与Block的标识的映射关系,每一个Segment还对应有一个写入位图,所述写入位图中的每一位对应一个子逻辑区间,用于标识对应子逻辑区间是否已写入数据,所述装置还包括:
加载单元,用于当所述集群节点重启时,将各磁盘中存储的Segment的子逻辑区间与Block的标识的映射关系加载到内存中;
遍历单元,用于针对每一个Segment,遍历该Segment的子逻辑区间与Block的标识的映射关系;
设置单元,用于将存在映射关系的子逻辑区间对应的位设置为第一值,将不存在映射关系的子逻辑区间对应的位设置为第二值,其中,所述第一值用于表示对应子逻辑区间已写入数据;所述第二值用于表示对应子逻辑区间未写入数据。
9.如权利要求6所述的装置,其特征在于,所述装置还包括:
删除单元,用于在删除所述目标快照时,删除所述目标快照与所述第一映射表的对应关系。
10.如权利要求9所述的装置,其特征在于,所述集群节点包括至少一块用于存储数据的磁盘,每一块磁盘按照预设Block大小划分为多块Block,所述Block大小小于所述Segment大小,预设快照粒度大小等于所述Block大小,每一个Segment按照快照粒度大小划分为多个子逻辑区间,每一个Segment对应一个写入位图,所述写入位图中的每一位对应一个子逻辑区间,用于标识对应子逻辑区间是否已写入数据,每一个LUN对应一条快照链,所述快照链用于记录LUN当前对应的映射表以及为该LUN已创建的各快照的映射表之间的依赖关系,所述装置还包括:
表确定单元,用于通过所述目标LUN的快照链,确定所述第一映射表之后生成的与所述第一映射表相邻的第三映射表;
Segment查找单元,用于针对所述第一映射表包括的每一个逻辑区间执行如下处理:如果所述第三映射表包括该逻辑区间,则分别获取所述第一映射表中该逻辑区间对应的第一Segment的标识,以及所述第三映射表中该逻辑区间对应的第二Segment的标识;
位图获取单元,用于获取所述第一Segment对应的第一写入位图,以及所述第二Segment对应的第二写入位图;
子逻辑区间确定单元,用于如果所述第一写入位图中值为第一值的目标位在所述第二写入位图中也为第一值,则确定所述目标位对应的目标子逻辑区间,其中,所述第一值用于表示对应子逻辑区间已写入数据;
Block查找单元,用于从已记录的所述第一Segment的子逻辑区间与Block的标识的映射关系中,查找与所述目标子逻辑区间对应的目标Block;
释放单元,用于释放所述目标Block。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011025567.6A CN112052217B (zh) | 2020-09-25 | 2020-09-25 | 快照实现方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011025567.6A CN112052217B (zh) | 2020-09-25 | 2020-09-25 | 快照实现方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112052217A true CN112052217A (zh) | 2020-12-08 |
CN112052217B CN112052217B (zh) | 2023-09-26 |
Family
ID=73604823
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011025567.6A Active CN112052217B (zh) | 2020-09-25 | 2020-09-25 | 快照实现方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112052217B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20040055429A (ko) * | 2002-12-21 | 2004-06-26 | 한국전자통신연구원 | 논리 볼륨 관리 시스템에서의 매핑 테이블 구조 및 이를이용한 효율적인 스냅샷 방법 |
US7676628B1 (en) * | 2006-03-31 | 2010-03-09 | Emc Corporation | Methods, systems, and computer program products for providing access to shared storage by computing grids and clusters with large numbers of nodes |
CN105912425A (zh) * | 2016-04-08 | 2016-08-31 | 杭州宏杉科技有限公司 | 快照映像建立、回滚方法以及装置 |
CN107423233A (zh) * | 2017-07-19 | 2017-12-01 | 杭州宏杉科技股份有限公司 | 一种可写快照实现方法和装置 |
-
2020
- 2020-09-25 CN CN202011025567.6A patent/CN112052217B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20040055429A (ko) * | 2002-12-21 | 2004-06-26 | 한국전자통신연구원 | 논리 볼륨 관리 시스템에서의 매핑 테이블 구조 및 이를이용한 효율적인 스냅샷 방법 |
US7676628B1 (en) * | 2006-03-31 | 2010-03-09 | Emc Corporation | Methods, systems, and computer program products for providing access to shared storage by computing grids and clusters with large numbers of nodes |
CN105912425A (zh) * | 2016-04-08 | 2016-08-31 | 杭州宏杉科技有限公司 | 快照映像建立、回滚方法以及装置 |
CN107423233A (zh) * | 2017-07-19 | 2017-12-01 | 杭州宏杉科技股份有限公司 | 一种可写快照实现方法和装置 |
Non-Patent Citations (1)
Title |
---|
黎婷婷;李;: "一种改进的CDP快照方法", 信息安全研究, no. 03 * |
Also Published As
Publication number | Publication date |
---|---|
CN112052217B (zh) | 2023-09-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7035881B2 (en) | Organization of read-write snapshot copies in a data storage system | |
US9146877B2 (en) | Storage system capable of managing a plurality of snapshot families and method of snapshot family based read | |
EP2176795B1 (en) | Hierarchical storage management for a file system providing snapshots | |
US7694087B2 (en) | Duplicate data storing system, duplicate data storing method, and duplicate data storing program for storage device | |
KR100439675B1 (ko) | 대용량 공유 저장장치를 위한 효율적인 스냅샷 수행방법 | |
US7890720B2 (en) | Snapshot system | |
CN113868192B (zh) | 一种数据存储设备、方法与分布式数据存储系统 | |
CN107423233B (zh) | 一种可写快照实现方法和装置 | |
US20140149664A1 (en) | Storage System Capable of Managing a Plurality of Snapshot Families and Method of Operating Thereof | |
US11640244B2 (en) | Intelligent block deallocation verification | |
CN113568582B (zh) | 数据管理方法、装置和存储设备 | |
US6629203B1 (en) | Alternating shadow directories in pairs of storage spaces for data storage | |
WO2016076903A1 (en) | Online file system check | |
CN111913664B (zh) | 一种数据写入方法及装置 | |
CN110955488A (zh) | 一种持久性内存的虚拟化方法及系统 | |
CN111007990A (zh) | 一种对快照系统中数据块引用进行快速定位的定位方法 | |
CN112052218B (zh) | 快照实现方法及分布式存储集群 | |
CN112181299B (zh) | 数据修复方法及分布式存储集群 | |
KR101077901B1 (ko) | 로그 블록 단위 매핑 기법을 이용한 플래시 메모리 관리 장치 및 방법 | |
CN112052217B (zh) | 快照实现方法及装置 | |
CN112052124A (zh) | 数据冗余方法及分布式存储集群 | |
CN113568583B (zh) | 重删数据保护方法及装置 | |
CN113568584B (zh) | 重删数据保护方法及装置 | |
CN113050891B (zh) | 重删数据保护方法及装置 | |
CN112162703B (zh) | 缓存实现方法及缓存管理模块 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |