CN112052218B - 快照实现方法及分布式存储集群 - Google Patents
快照实现方法及分布式存储集群 Download PDFInfo
- Publication number
- CN112052218B CN112052218B CN202011025570.8A CN202011025570A CN112052218B CN 112052218 B CN112052218 B CN 112052218B CN 202011025570 A CN202011025570 A CN 202011025570A CN 112052218 B CN112052218 B CN 112052218B
- Authority
- CN
- China
- Prior art keywords
- segment
- target
- sub
- cluster
- data
- 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.)
- Active
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/061—Improving I/O performance
-
- 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]
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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
本申请提供一种快照实现方法及分布式存储集群。集群节点针对快照前后为同一逻辑区间分配的不同Segment,指定该不同Segment对应数据存储到同一磁盘。并向该磁盘对应磁盘管理模块通告该不同Segment之间的依赖关系。磁盘管理模块根据本地记录的各Segment之间的依赖关系以及各Segment与Block的映射关系,处理该逻辑区间的IO请求。本申请不需要跨磁盘处理同一逻辑区间的IO请求,可有效提升IO处理性能,且可减轻集群节点的内存开销,减轻集群元数据服务器的负载压力。
Description
技术领域
本申请涉及存储技术领域,尤其涉及一种快照实现方法及分布式存储集群。
背景技术
快照(Snapshot)通常指针对指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在拷贝时间点的映像。
在分布式存储集群中,通常以逻辑单元号(Logical Unit Number,LUN)为单位创建快照。每一个LUN按照预设Segment大小(比如,256MB)划分为多个逻辑区间。每一个逻辑区间在发生实际写入时被映射到Segment。每一个Segment按照快照粒度大小(比如,64KB)划分为多个子逻辑区间。每一个Segment对应一个写入位图。写入位图中的每一位对应Segment中的一个子逻辑区间,用于标识对应子逻辑区间是否已写入数据。
集群节点在内存中组织各Segment对应的写入位图。随着写入数据量的不断增加,分配的Segment越来越多,内存需要维护的写入位图的数量也随之增多,这将极大消耗集群节点的内存资源。且在写入过程中不断更新的写入位图需要存储到集群元数据服务器中,这在一定程度上导致IO处理延时,同时,增加集群元数据服务器的负载压力。
此外,由于创建快照前后同一逻辑区间被映射到不同Segment,而不同Segment的数据往往被指定存储到不同磁盘,这导致后续针对该逻辑区间的访问,需要跨磁盘操作,影响IO处理性能。
发明内容
有鉴于此,本申请提出一种快照实现方法及分布式存储集群,用以减少内存开销,减轻集群元数据服务器的负载压力,同时,可提升集群的IO处理性能。
为实现上述申请目的,本申请提供了如下技术方案:
第一方面,本申请提供一种快照实现方法,所述分布式存储集群配置有至少一个LUN,每一个LUN按照预设Segment大小划分为多个逻辑区间,每一个LUN对应一个映射表,LUN的映射表用于记录LUN中已映射的逻辑区间与Segment的标识的映射关系以及该逻辑区间对应的Snap标志,所述Snap标志用于指示下次向该逻辑区间写入数据时是否分配新的Segment;所述分布式存储集群包括至少一个集群节点,每一个集群节点包括至少一块用于存储数据的磁盘,每一个集群节点针对本节点上每一块磁盘部署对应的磁盘管理模块,每一块磁盘按照预设Block大小划分为多块Block,所述Block大小小于所述Segment大小,每一个Segment按照预设快照粒度大小划分为多个子逻辑区间,所述快照粒度大小等于所述Block大小,每一个Segment对应一个映射表,Segment的映射表用于记录Segment中已映射的子逻辑区间与Block的标识的映射关系,所述分布式存储集群还包括Segment管理模块,所述方法包括:
接收到针对目标LUN的写请求的目标集群节点确定所述写请求在所述目标LUN中对应的至少一个目标逻辑区间,并将所述写请求拆分成针对每一个目标逻辑区间的子写请求;
针对每一个目标逻辑区间执行如下处理:
所述目标集群节点从所述目标LUN的映射表中,查询与当前目标逻辑区间对应的第一Segment的标识以及Snap标志;
如果所述当前目标逻辑区间的Snap标志指示需要分配新的Segment,则所述目标集群节点向所述Segment管理模块发送用于请求分配Segment的分配请求;
所述目标集群节点接收所述Segment管理模块基于所述分配请求返回的分配响应,所述分配响应包括分配的第二Segment的标识,所述第二Segment不同于所述第一Segment;
所述目标集群节点从已记录的Segment的标识与存储Segment对应数据的磁盘的标识的对应关系中,查找与所述第一Segment的标识对应的目标磁盘的标识;
所述目标集群节点向所述目标磁盘对应的目标磁盘管理模块发送针对所述第二Segment的目标子写请求,所述目标子写请求包括所述第一Segment的标识;
所述目标磁盘管理模块建立所述第二Segment的标识与所述第一Segment的标识的依赖关系,并为所述目标子写请求在所述第二Segment中对应的各第一子逻辑区间分配对应的目标Block,将所述各第一子逻辑区间与对应目标Block的标识的映射关系记录到所述第二Segment对应的映射表中;
在确定所述各第一子逻辑区间中存在需要回读数据的至少一个第二子逻辑区间时,所述目标磁盘管理模块根据已记录的Segment之间的依赖关系,顺序遍历各Segment对应的映射表,根据遍历结果获取各第二子逻辑区间对应的回读数据;
所述目标磁盘管理模块将所述回读数据与所述目标子写请求中的数据合并,写入所述第二Segment对应的各目标Block中。
可选的,所述分布式存储集群还包括集群元数据服务器,所述目标集群节点接收所述Segment管理模块基于所述分配请求返回的分配响应后,所述方法还包括:
所述目标集群节点将所述目标LUN的映射表中的所述目标逻辑区间与所述第一Segment的标识的映射关系,更新为所述目标逻辑区间与所述第二Segment标识的映射关系;
并将所述目标逻辑区间的Snap标志更新为指示下次写入时不分配Segment;
将更新后的映射关系以及Snap标志存储至所述集群元数据服务器。
可选的,所述分布式存储集群还包括集群元数据服务器,所述目标集群节点从已记录的Segment的标识与用于存储Segment对应数据的磁盘的标识的映射关系中,查找与所述第一Segment的标识对应的目标磁盘的标识之后,所述方法还包括:
所述目标集群节点建立所述第二Segment的标识与所述目标磁盘的标识的映射关系,并将该映射关系存储至所述集群元数据服务器。
可选的,所述目标磁盘管理模块将所述各目标子逻辑区间与对应目标Block的标识的映射关系记录到所述第二Segment对应的映射表中之后,所述方法还包括:
所述目标磁盘管理模块将所述第二Segment的标识与所述第一Segment的标识的依赖关系,以及所述第二Segment对应的映射表存储至所述目标磁盘。
可选的,所述顺序遍历各Segment对应的映射表,根据遍历结果获取各第二子逻辑区间对应的回读数据,包括:
针对当前遍历的映射表,如果该映射表中存在所述第二子逻辑区间与Block的标识的映射关系,则读取该第二子逻辑区间对应的Block中的数据作为回读数据;
如果遍历的所有映射表中均不存在所述第二子逻辑区间与Block的标识的映射关系,则将所述回读数据填0。
第二方面,本申请提供一种分布式存储集群,所述分布式存储集群配置有至少一个LUN,每一个LUN按照预设Segment大小划分为多个逻辑区间,每一个LUN对应一个映射表,LUN的映射表用于记录LUN中已映射的逻辑区间与Segment的标识的映射关系以及该逻辑区间对应的Snap标志,所述Snap标志用于指示下次向该逻辑区间写入数据时是否分配新的Segment;所述分布式存储集群包括至少一个集群节点,每一个集群节点包括至少一块用于存储数据的磁盘,每一个集群节点针对本节点上每一块磁盘部署对应的磁盘管理模块,每一块磁盘按照预设Block大小划分为多块Block,所述Block大小小于所述Segment大小,每一个Segment按照预设快照粒度大小划分为多个子逻辑区间,所述快照粒度大小等于所述Block大小,每一个Segment对应一个映射表,Segment的映射表用于记录Segment中已映射的子逻辑区间与Block的标识的映射关系,所述分布式存储集群还包括Segment管理模块,其中:
目标集群节点,用于在接收到针对目标LUN的写请求时,确定所述写请求在所述目标LUN中对应的至少一个目标逻辑区间,并将所述写请求拆分成针对每一个目标逻辑区间的子写请求;针对每一个目标逻辑区间执行如下处理:从所述目标LUN的映射表中,查询与当前目标逻辑区间对应的第一Segment的标识以及Snap标志;如果所述当前目标逻辑区间的Snap标志指示需要分配新的Segment,则向所述Segment管理模块发送用于请求分配Segment的分配请求;接收所述Segment管理模块基于所述分配请求返回的分配响应,所述分配响应包括分配的第二Segment的标识,所述第二Segment不同于所述第一Segment;从已记录的Segment的标识与存储Segment对应数据的磁盘的标识的对应关系中,查找与所述第一Segment的标识对应的目标磁盘的标识;向所述目标磁盘对应的目标磁盘管理模块发送针对所述第二Segment的目标子写请求,所述目标子写请求包括所述第一Segment的标识;
所述目标磁盘管理模块,用于建立所述第二Segment的标识与所述第一Segment的标识的依赖关系,并为所述目标子写请求在所述第二Segment中对应的各第一子逻辑区间分配对应的目标Block,将所述各第一子逻辑区间与对应目标Block的标识的映射关系记录到所述第二Segment对应的映射表中;在确定所述各第一子逻辑区间中存在需要回读数据的至少一个第二子逻辑区间时,根据已记录的Segment之间的依赖关系,顺序遍历各Segment对应的映射表,根据遍历结果获取各第二子逻辑区间对应的回读数据;将所述回读数据与所述目标子写请求中的数据合并,写入所述第二Segment对应的各目标Block中。
可选的,所述分布式存储集群还包括集群元数据服务器;
所述目标集群节点,还用于将所述目标LUN的映射表中的所述目标逻辑区间与所述第一Segment的标识的映射关系,更新为所述目标逻辑区间与所述第二Segment标识的映射关系;并将所述目标逻辑区间的Snap标志更新为指示下次写入时不分配Segment;将更新后的映射关系以及Snap标志存储至所述集群元数据服务器。
可选的,所述分布式存储集群还包括集群元数据服务器;
所述目标集群节点,还用于建立所述第二Segment的标识与所述目标磁盘的标识的映射关系,并将该映射关系存储至所述集群元数据服务器。
可选的,所述目标磁盘管理模块,还用于将所述第二Segment的标识与所述第一Segment的标识的依赖关系,以及所述第二Segment对应的映射表存储至所述目标磁盘。
可选的,所述目标磁盘管理模块顺序遍历各Segment对应的映射表,根据遍历结果获取各第二子逻辑区间对应的回读数据,包括:
针对当前遍历的映射表,如果该映射表中存在所述第二子逻辑区间与Block的标识的映射关系,则读取该第二子逻辑区间对应的Block中的数据作为回读数据;
如果遍历的所有映射表中均不存在所述第二子逻辑区间与Block的标识的映射关系,则将所述回读数据填0。
由以上描述可以看出,本申请实施例中,集群节点针对快照前后为同一逻辑区间分配的不同Segment,指定该不同Segment对应数据存储到同一磁盘。并向该磁盘对应磁盘管理模块通告该不同Segment之间的依赖关系。磁盘管理模块根据本地记录的各Segment之间的依赖关系以及各Segment到Block的映射关系,处理该逻辑区间的IO请求。即,在同一磁盘内完成针对同一逻辑区间的IO操作,不再需要跨磁盘操作,因此,可有效提升IO处理性能。且处理过程中不再需要维护以及存储写入位图,因此,可减轻集群节点的内存开销,减轻集群元数据服务器的负载压力。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是示例性示出的一分布式存储集群的示意图;
图2是示例性示出的SNAP1在分布式存储集群中的映射示意图;
图3是示例性示出的LUN1在分布式存储集群中的映射示意图;
图4是本申请实施例示出的一种快照实现方法流程图;
图5是本申请实施例示出的LUN1在分布式存储集群中的映射示意图;
图6是本申请实施例示出的LUN1在分布式存储集群中的映射示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。
在本申请实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请实施例。在本申请实施例中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请实施例范围的情况下,协商信息也可以被称为第二信息,类似地,第二信息也可以被称为协商信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
分布式存储集群通常包括多台服务器(亦称为集群节点)。每一个集群节点包括至少一块用于存储数据的磁盘(亦称为数据盘)。以下描述中若无特殊说明,磁盘均指数据盘。
用户基于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分配真实的物理资源,完成从逻辑资源到物理资源的映射。该映射通常包括LUN的逻辑区间到Segment(可缩写为Seg)的映射,以及Segment到Block(可缩写为Blk)的映射,且上述映射关系均存储至集群元数据服务器。
如图1所示,LUN1的逻辑区间【0,256MB】内已写入数据块A和数据块C,逻辑区间【1GB,1GB+256MB】内已写入数据块B,且逻辑区间【0,256MB】已映射到Seg1,逻辑区间【1GB,1GB+256MB】已映射到Seg2,则当前LUN1对应的映射表可表示为:
LUN1→[0:Seg1;1GB:Seg2]
即,该映射表中包括两个已映射逻辑区间的映射关系。其中,“0”为逻辑区间【0,256MB】的起始地址;“1GB”为逻辑区间【1GB,1GB+256MB】的起始地址。本申请实施例利用逻辑区间的起始地址标识对应的逻辑区间。
此外,如图1所示,Seg1映射到OSD1的Blk8,Seg2映射到OSD3的Blk3,则Seg1、Seg2对应的映射关系可分别表示为:
Seg1→[OSD1:Blk8]
Seg2→[OSD3:Blk3]
即,Seg1对应数据存储在OSD1的Blk8中;Seg2对应数据存储在OSD3的Blk3中。
为了实现分布式存储集群的快照功能,通常在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的快照(记为SNAP1)时,需要拷贝一份LUN1的映射表,作为SNAP1的映射表。该SNAP1的映射表可表示为:
SNAP1→[0:Seg1:F;1GB:Seg2:F]
并修改LUN1映射表中各逻辑区间的Snap标志为T。修改后,LUN1的映射表可表示为:
LUN1→[0:Seg1:T;1GB:Seg2:T]
同时,建立从LUN1到SNAP1的快照链,该快照链可表示为:
LUN1→SNAP1
此时,SNAP1在分布式存储集群中的映射如图2所示。
当再次接收到针对LUN1的写请求时,获取该写请求包括的待写入数据的起始地址以及数据大小,比如,待写入数据块D的起始地址为0,数据块大小为32K,则可确定待写入范围为【0,32KB】。
根据该待写入范围【0,32KB】,可确定此次写请求仅涉及LUN1中的一个逻辑区间【0,256MB】。
根据该逻辑区间的起始地址0,查询LUN1的映射表,可知该逻辑区间已映射到Seg1,且对应Snap标志为T,因此,分配新的Segment,记为Seg3。并指定用于存储Seg3对应数据的Block,比如,OSD2的Blk10。建立Seg3到OSD2的Blk10的映射关系,该映射关系可表示为:
Seg3→[OSD2:Blk10]
由于逻辑区间【0,256MB】与Segment的映射关系已发生变化,因此,需要修改LUN1映射表中逻辑区间【0,256MB】的映射关系。具体为,将起始地址0与Seg1的映射关系修改为起始地址0与Seg3的映射关系,同时,修改对应Snap标志为F。修改后,LUN1的映射表可表示为:
LUN1→[0:Seg3:F;1GB:Seg2:T]
在确定数据块D所需写入的Segment(Seg3)后,还需确定数据块D在Seg3中具体写入的子逻辑区间。
这里,需要说明的是,由于Segment的粒度较大,通常引入较小的快照粒度,比如,64KB。将每一个Segment按照较小的快照粒度划分为多个子逻辑区间(亦可称为快照粒度区间),比如,【0,64KB】、【64KB,128KB】、【128KB,192KB】、【192KB,256KB】,以此类推。
根据数据块D的写入范围【0,32KB】以及预先划分的各子逻辑区间的地址范围可知,该数据块D需要写入Seg3的子逻辑区间【0,64KB】。
但由于数据块D的大小(32KB)小于一个子逻辑区间(64KB)的大小,因此,需要回读Seg3中该子逻辑区间【0,64KB】的数据。
在回读时,需要查询Seg3对应的写入位图(bitmap)。
这里,需要说明的是,每一个已映射的Segment都对应一个写入位图。写入位图中的每一位(bit)对应Segment中的一个子逻辑区间,用于标识对应子逻辑区间是否写入过数据。比如,bit=0,表示对应子逻辑区间未写入过数据;bit=1,表示对应子逻辑区间已写入过数据。
以图1所示Seg1、Seg2为例,数据块A已写入Seg1的子逻辑区间【0,64KB】;数据块C已写入Seg1的子逻辑区间【64KB,128KB】;数据块B已写入Seg2的子逻辑区间【256MB-64KB,256MB】(对应LUN1中的【1GB+256MB-64KB,1GB+256MB】),则Seg1对应的bitmap可表示为:
Seg1→[bitmap:11000000……000]
即,Seg1的子逻辑区间【0,64KB】和【64KB,128KB】对应bit为1,表示已写入过数据;其它子逻辑区间对应bit为0,表示未写入过数据。
同理,Seg2对应的bitmap可表示为:
Seg2→[bitmap:00000000……001]
即,Seg2的最后一个子逻辑区间【256MB-64KB,256MB】对应bit为1,表示已写入过数据;其它子逻辑区间对应bit为0,表示未写入过数据。
由于Seg3是新分配的Segment,因此,当前Seg3对应的bitmap中各bit均为0,可表示为:
Seg3→[bitmap:00000000……000]
通过查询该写入位图可知,子逻辑区间【0,64KB】对应的bit为0,说明Seg3的子逻辑区间【0,64KB】未写入过数据,则通过快照链LUN1→SNAP1找到SNAP1对应的映射表。
根据子逻辑区间【0,64KB】的起始地址0,确定该子逻辑区间所属逻辑区间【0,256MB】,再根据所属逻辑区间的起始地址0,从SNAP1对应的映射表中,找到与逻辑区间【0,256MB】对应的Segment(Seg1)。
从Seg1对应bitmap中,查找子逻辑区间【0,64KB】对应的bit。该bit=1,说明所要回读的数据位于Seg1的子逻辑区间【0,64KB】。当前Seg1的子逻辑区间【0,64KB】存储的数据为数据块A,则根据已记录的Seg1与OSD1的Blk8的映射关系,从OSD1的Blk8中读取数据块A。
将数据块A的后32KB数据与数据块D合并,组成64KB大小的数据块,写入Seg3的子逻辑区间【0,64KB】,并更新Seg3对应的bitmap为:
Seg3→[bitmap:10000000……000]
此时,LUN1在分布式存储集群中的映射如图3所示。
通过上述处理过程可以看出,在创建快照后,对Seg1中数据的修改被写入了Seg3中,因此,可避免Seg1中快照数据被覆盖。即,实现了分布式存储集群的快照功能。
但是,该快照实现方法至少存在以下几个问题:
1)每一个Segment对应的写入位图需在内存中组织,且随着写入数据量的不断增加,分配的Segment越来越多,内存需要维护的写入位图的数量也随之增多,这将极大消耗集群节点的内存资源。且在写入过程中更新的写入位图需要存储至集群元数据服务器,这在一定程度上导致IO处理延时,同时,增加集群元数据服务器的负载压力。
2)在写入数据时,可能存在跨OSD(包括跨不同节点的OSD)操作。比如,前述描述中,向Seg3写入小块数据(数据块D)时,首先从用于存储Seg1对应数据的OSD1中回读数据,然后,再与数据块D合并写入用于存储Seg3对应数据的OSD2中。该写入过程涉及跨OSD操作,在一定程度上影响IO处理性能。
3)在读取数据时,同样可能存在跨OSD操作。比如,读取Seg3中【0,128KB】范围内的数据,首先,查询Seg3对应的bitmap,可知Seg3的子逻辑区间【0,64KB】中存在数据,但子逻辑区间【64KB,128KB】中没有数据,则通过快照链找到Seg1,查询Seg1对应的bitmap,可知Seg1的子逻辑区间【64KB,128KB】中存在数据,因此,需要分别从用于存储Seg3对应数据的OSD2以及用于存储Seg1对应数据的OSD1中读取数据,即,跨OSD读取数据,在一定程度上影响IO处理性能。
针对上述问题,本申请实施例提出一种快照实现方法,该方法中,集群节点针对快照前后为同一逻辑区间分配的不同Segment,指定该不同Segment对应数据存储到同一磁盘。并向该磁盘对应磁盘管理模块通告该不同Segment之间的依赖关系。磁盘管理模块根据本地记录的各Segment之间的依赖关系以及各Segment与Block的映射关系,处理针对逻辑区间的IO请求。本申请不需要跨磁盘处理同一逻辑区间的IO请求,可有效提升IO处理性能,且可减轻集群节点的内存开销,减轻集群元数据服务器的负载压力。
为了使本申请实施例的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本申请实施例执行详细描述:
参见图4,为本申请实施例示出的一种快照实现方法的流程图。该流程应用于分布式存储集群。
该分布式存储集群包括至少一个集群节点。每一个集群节点包括至少一块用于存储数据的磁盘。
该分布式存储集群配置有至少一个LUN,每一个LUN按照预设Segment大小划分为多个逻辑区间。
如图4所示,该流程可包括以下步骤:
步骤401,接收到针对目标LUN的写请求的目标集群节点确定该写请求在目标LUN中对应的至少一个目标逻辑区间,并将该写请求拆分成针对每一个目标逻辑区间的子写请求。
在用户通过上层应用下发的写请求中包括待访问的LUN的标识。这里,将当前待访问的LUN称为目标LUN。将接收到针对该目标LUN的写请求的集群节点称为目标集群节点。可以理解的是,之所以称为目标LUN、目标集群节点,只是为便于区分而进行的命名,并非用于限定。
目标集群节点接收到的写请求中还包括待写入数据在目标LUN中的起始地址以及待写入数据的大小。目标集群节点可根据该待写入数据在目标LUN中的起始地址以及数据大小,确定该待写入数据在目标LUN中的逻辑地址范围。比如,待写入数据在目标LUN中的起始地址为256MB-256KB,数据大小为512KB,则该待写入数据在目标LUN中的逻辑地址范围为【256MB-256KB,256MB+256KB】。
目标集群节点根据待写入数据在目标LUN中的逻辑地址范围,确定写请求在目标LUN中对应的至少一个逻辑区间。这里,将写请求在目标LUN中对应的各逻辑区间均称为目标逻辑区间。可以理解的是,之所以称为目标逻辑区间,只是为便于区分而进行的命名,并非用于限定。
以目标LUN按照256MB大小划分为【0,256MB】、【256MB,512MB】、【512MB,768MB】等逻辑区间为例,若待写入数据在目标LUN中的逻辑地址范围为【256MB-256KB,256MB+256KB】,则该逻辑地址范围在目标LUN中对应的目标逻辑区间包括【0,256MB】和【256MB,512MB】。
目标集群节点将针对目标LUN的写请求拆分成针对各目标逻辑区间的子写请求。比如,拆分成针对目标逻辑区间【0,256MB】的子写请求和针对目标逻辑区间【256MB,512MB】的子写请求。
针对每一个拆分后的子写请求执行后续处理。
步骤402,目标集群节点从目标LUN的映射表中,查询与当前目标逻辑区间对应的第一Segment的标识以及该目标逻辑区间对应的Snap标志。
这里,需要说明的是,每一个LUN对应一个映射表。LUN的映射表用于记录LUN中已映射的逻辑区间与Segment的标识的映射关系以及该逻辑区间对应的Snap标志。该Snap标志用于指示下次向该逻辑区间写入数据时是否分配新的Segment。参见如下LUN1的映射表示例:
LUN1→[0:Seg1:T;1GB:Seg2:T]
其中,“0”为逻辑区间【0,256MB】的起始地址;“1GB”为逻辑区间【1GB,1GB+256MB】的起始地址。逻辑区间【0,256MB】被映射到Seg1,逻辑区间【1GB,1GB+256MB】被映射到Seg2。逻辑区间【0,256MB】和【1GB,1GB+256MB】对应的Snap标志均为T,表示下次写入【0,256MB】或【1GB,1GB+256MB】时,需要分配新的Segment。
当前LUN1在分布式存储集群中的映射如图5所示。
本步骤中,目标集群节点查询目标LUN的映射表,如果该映射表中存在目标逻辑区间与Segment的标识的映射关系,说明该目标逻辑区间已映射,则目标集群节点获取该目标逻辑区间已映射到的Segment的标识以及该目标逻辑区间的Snap标志。这里,将当前目标逻辑区间已映射到的Segment称为第一Segment。
步骤403,如果当前目标逻辑区间的Snap标志指示需要分配新的Segment,则目标集群节点向Segment管理模块发送用于请求分配Segment的分配请求。
这里,需要说明的是,为了避免快照数据被覆盖,创建快照后,LUN的映射表中的已映射逻辑区间的Snap标志会被设置为指示下一次写入时分配新的Segment。因此,当确定目标逻辑区间的Snap标志为指示分配新的Segment时,集群节点向Segment管理模块请求分配Segment。
作为一个实施例,该Segment管理模块可部署于任一集群元数据服务器,负责为集群中各LUN的逻辑区间统一分配Segment。
以Server1接收到针对LUN1的写请求为例,该写请求涉及对逻辑区间【0,256MB】的写入,LUN1的映射表中该逻辑区间对应的Snap标志为T,则Server1向Segment管理模块发送分配请求,请求分配新的Segment。
步骤404,目标集群节点接收Segment管理模块基于分配请求返回的分配响应,该分配响应包括分配的第二Segment的标识。
这里,将Segment管理模块新分配的Segment称为第二Segment。该第二Segment不同于第一Segment。可以理解的是,之所以称为第二Segment,只是为便于区分而进行的命名,并非用于限定。
由于目标逻辑区间映射的Segment发生了变化,因此,目标集群节点需要更新该目标逻辑区间与Segment的标识的映射关系。具体为,目标集群节点将目标LUN的映射表中的目标逻辑区间与第一Segment的标识的映射关系,更新为目标逻辑区间与第二Segment的标识的映射关系,并将目标逻辑区间的Snap标志更新为指示下次写入时不分配Segment。
比如,Segment管理模块为逻辑区间【0,256MB】分配的新的Segment为Seg3,则Server1将LUN1的映射表中的逻辑区间【0,256MB】与Seg1的映射关系,更新为该逻辑区间与Seg3的映射关系,并更新对应的Snap标志为F,更新后LUN1的映射表为:
LUN1→[0:Seg3:F;1GB:Seg2:T]
在完成映射表的更新后,目标集群节点还需将更新后的映射关系以及对应的Snap标志存储至集群元数据服务器中,以便目标集群节点重启时可从集群元数据服务器中恢复目标LUN的最新映射关系。
步骤405,目标集群节点从已记录的Segment的标识与存储该Segment对应数据的磁盘的标识的对应关系中,查找与第一Segment的标识对应的目标磁盘的标识。
参见如下已记录的Segment的标识与磁盘的标识的对应关系示例:
Seg1→[OSD1]
该对应关系表示Seg1的数据存储在OSD1中。
集群节点通过查询已记录的Segment的标识与磁盘的标识的对应关系,找到存储第一Segment对应数据的磁盘。这里,将存储第一Segment对应数据的磁盘称为目标磁盘。
目标集群节点建立第二Segment的标识与目标磁盘的标识的映射关系。即,指定存储第一Segment对应数据的磁盘存储第二Segment的数据。并将建立的映射关系存储至集群元数据服务器中。
比如,第一Segment为Seg1,第二Segment为Seg3。Server1通过查询已记录的Segment的标识与磁盘的标识的对应关系,找到存储Seg1对应数据的磁盘为OSD1,则Server1建立Seg3与OSD1的对应关系,如下所示:
Seg3→[OSD1]
即,指定OSD1存储Seg3对应数据。
步骤406,目标集群节点向目标磁盘对应的目标磁盘管理模块发送针对第二Segment的目标子写请求,该目标子写请求包括第一Segment的标识。
这里,需要说明的是,集群节点中每一块磁盘对应一个磁盘管理模块。该磁盘管理模块通常指磁盘服务进程,用于管理对应磁盘。
本申请实施例将目标磁盘对应的磁盘管理模块称为目标磁盘管理模块。目标集群节点向目标磁盘管理模块发送针对第二Segment的子写请求。即,请求向第二Segment写入数据。
这里,将针对第二Segment的子写请求称为目标子写请求。可以理解的是,之所以称为目标子写请求,只是为便于区分而进行的命名,并非用于限定。
需要说明的是,该目标子写请求中还包括第一Segment的标识,以通告目标磁盘管理模块当前写入的第二Segment与第一Segment存在依赖关系。
步骤407,目标磁盘管理模块建立第二Segment的标识与第一Segment的标识的依赖关系,并为目标子写请求在第二Segment中对应的各第一子逻辑区间分配对应的目标Block,将各第一子逻辑区间与对应目标Block的标识的映射关系记录到第二Segment对应的映射表中。
目标磁盘管理模块获取目标子写请求包括的第二Segment的标识和第一Segment的标识,建立第二Segment的标识与第一Segment的标识的依赖关系。并将该依赖关系存储到目标磁盘中,以便目标集群节点重启时,可从目标磁盘中恢复已建立的依赖关系。
仍以第一Segment为Seg1、第二Segment为Seg3为例,OSD1对应磁盘管理模块建立Seg3与Seg1的依赖关系,可表示为:
Seg3→Seg1
即,Seg3依赖于Seg1。同时,将该依赖关系存储至OSD1中。
此外,目标磁盘管理模块还需根据目标子写请求的写入范围为第二Segment分配Block资源。
这里,需要说明的是,本申请实施例中,每一块磁盘按照预设Block大小划分为多块Block,该Block大小小于Segment大小。比如,Segment大小为256MB,Block大小为64KB。每一个Segment按照预设快照粒度大小划分为多个子逻辑区间,该快照粒度大小等于Block大小。也就是说,子逻辑区间的大小与Block的大小相同。
目标磁盘管理模块首先根据目标子写请求的写入范围,确定该目标子写请求在第二Segment中对应的各子逻辑区间,即,需要写入的各子逻辑区间。这里,将目标子写请求在第二Segment中对应的各子逻辑区间均称为第一子逻辑区间。可以理解的是,之所以称为第一子逻辑区间,只是为了便于区分而进行的命名,并非用于限定。
由于第二Segment是新分配的Segment,还未分配过Block资源,因此,目标磁盘管理模块为每一个第一子逻辑区间分配对应的Block。这里,将为第一子逻辑区间分配的Block称为目标Block。可以理解的是,之所以称为目标Block,只是为便于区分而进行的命名,并非用于限定。
目标磁盘管理模块建立各第一子逻辑区间与对应目标Block的标识的映射关系,将映射关系记录到第二Segment的映射表中。并将该第二Segment的映射表存储至目标磁盘,以便目标集群节点重启时,可从磁盘中恢复Segment中已映射的子逻辑区间与Block的标识的映射关系。
仍以Seg3为例,目标子写请求的写入范围为【0,64KB】。该写入范围仅涉及Seg3中的一个子逻辑区间【0,64KB】。OSD1对应磁盘管理模块为该子逻辑区间分配Block,比如,Blk7,即,建立子逻辑区间【0,64KB】与Blk7的映射关系,并将该映射关系添加到Seg3对应的映射表中。该Seg3对应映射表可表示为:
Seg3→[0:Blk7]
其中,“0”为子逻辑区间【0,64KB】在Seg3中的起始地址,用于标识子逻辑区间【0,64KB】。
OSD1对应磁盘管理模块将该Seg3对应映射表存储至OSD1中。
步骤408,在确定各第一子逻辑区间中存在需要回读数据的至少一个第二子逻辑区间时,目标磁盘管理模块根据已记录的Segment之间的依赖关系,依次遍历各Segment对应的映射表,根据遍历结果获取各第二子逻辑区间对应的回读数据。
这里,需要说明的是,当写入第一子逻辑区间的数据量(比如,32KB)小于子逻辑区间大小(比如,64KB)时,需要回读该第一子逻辑区间可能存在的已有数据。
这里,将需要回读的第一子逻辑区间称为第二子逻辑区间。可以理解的是,之所以称为第二子逻辑区间,只是为便于区分而进行的命名,并非用于限定。
作为一个实施例,目标磁盘管理模块从第二子逻辑区间回读数据的过程为:
根据已记录的Segment之间的依赖关系,顺序遍历各Segment对应的映射表。如果当前遍历的映射表中存在第二子逻辑区间与Block的标识的映射关系,则读取该第二子逻辑区间对应的Block中的数据作为回读数据。如果根据依赖关系遍历的所有映射表中均不存在第二子逻辑区间与Block的标识的映射关系,则将回读数据填全0。
仍以Seg3为例,当前待写入数据为数据块D,数据块D的大小为32KB。待写入子逻辑区间为【0,64KB】,OSD1的磁盘管理模块已通过步骤407为该子逻辑区间【0,64KB】分配Blk7。由于该数据块D的大小小于一个Block大小,因此,需要通过Seg3所依赖的Segment回读数据。为此,OSD1的磁盘管理模块查询已记录的Segment的依赖关系(Seg3→Seg1),找到Seg3所依赖的Seg1。查询Seg1对应的映射表,当前Seg1对应的映射表如下所示:
Seg1→[0:Blk5;64KB:Blk6]
从该映射表中可以看出,OSD1的Blk5中存在子逻辑区间【0,64KB】的数据,因此,读取该Blk5中的64KB数据(记为数据块A)。
当然,如果Seg1的映射表中不存在子逻辑区间【0,64KB】与Block标识的映射关系,且Seg1还依赖于其它Segment,则可继续查询Seg1所依赖的其它Segment的映射表。如果根据各Segment的依赖关系,均未查找到子逻辑区间【0,64KB】与Block标识的映射关系,则回读数据填全0。
这里,需要说明的是,由于Seg3继承了Seg1的布局(指定到同一磁盘OSD1),因此,回读时,不需要跨磁盘操作,可有效提升IO处理性能。
步骤409,目标磁盘管理模块将回读数据与目标子写请求中的数据合并,写入第二Segment对应的各目标Block中。
仍以Seg3为例,回读数据为数据块A(64KB),待写入数据为数据块D(32KB),待写入数据块D在子逻辑区间【0,64KB】中的偏移量为0,即,写入的起始地址为0,则将数据块D与数据块A的后32KB合并,合并后的数据(记为E)写入为Seg3的子逻辑区间【0,64KB】分配的Blk7中。
写入后,LUN1在分布式存储集群中的映射如图6所示。
至此,完成图4所示流程。
通过图4所示流程可以看出,本申请实施例中,集群节点针对快照前后为同一逻辑区间分配的不同Segment,指定该不同Segment对应数据存储到同一磁盘。并向该磁盘对应磁盘管理模块通告该不同Segment之间的依赖关系。磁盘管理模块根据本地记录的各Segment之间的依赖关系以及各Segment到Block的映射关系,处理该逻辑区间的IO请求。即,在同一磁盘内完成针对同一逻辑区间的IO操作,不再需要跨磁盘操作,因此,可有效提升IO处理性能。且上述处理过程不再需要维护以及存储写入位图,因此,可减轻集群节点的内存开销,减轻集群元数据服务器的负载压力。
此外,当读取某一逻辑区间的数据时,其处理过程与回读过程大致相同。这里,在前述已写入数据块E的基础上,直接举例说明数据读取过程。
比如,Server1向OSD1对应磁盘管理模块下发读取Seg3中【0,128KB】范围内的数据的读请求,该读取范围涉及Seg3中的2个子逻辑区间【0,64KB】和【64KB,128KB】。
OSD1对应磁盘管理模块查询Seg3的映射表:
Seg3→[0:Blk7]
该映射表中存在子逻辑区间【0,64KB】与Blk7的映射关系,即,OSD1的Blk7中存在子逻辑区间【0,64KB】的数据,因此,可从Blk7中直接读取子逻辑区间【0,64KB】的数据(数据块E)。
但是,Seg3的映射表中不存在子逻辑区间【64KB,128KB】到Block的映射关系。为此,OSD1对应磁盘管理模块查询已记录的Segment的依赖关系(Seg3→Seg1),根据该依赖关系,查询Seg1对应的映射表:
Seg1→[0:Blk5;64KB:Blk6]
该映射表中存在子逻辑区间【64KB,128KB】与Blk6的映射关系,即,OSD1的Blk6中存在子逻辑区间【64KB,128KB】的数据,因此,可从Blk6中读取子逻辑区间【64KB,128KB】的数据(数据块C)。
至此,完成Seg3中【0,128KB】范围内数据的读取。
可以看出,在上述读取过程中,由于Seg3和Seg1的布局相同(被指定到同一磁盘OSD1存储),因此,当需要基于依赖关系读取数据时,不需要跨磁盘读取,可有效提升IO处理性能。且读取过程中不再需要依赖写入位图确定子逻辑区间是否已写入数据,因此,可节约节点内存开销,减轻集群元数据服务器的负载压力。
以上对本申请实施例提供的方法进行了描述,下面对本申请实施例提供的分布式存储集群进行描述:
该分布式存储集群配置有至少一个LUN,每一个LUN按照预设Segment大小划分为多个逻辑区间,每一个LUN对应一个映射表,LUN的映射表用于记录LUN中已映射的逻辑区间与Segment的标识的映射关系以及该逻辑区间对应的Snap标志,所述Snap标志用于指示下次向该逻辑区间写入数据时是否分配新的Segment;所述分布式存储集群包括至少一个集群节点,每一个集群节点包括至少一块用于存储数据的磁盘,每一个集群节点针对本节点上每一块磁盘部署对应的磁盘管理模块,每一块磁盘按照预设Block大小划分为多块Block,所述Block大小小于所述Segment大小,每一个Segment按照预设快照粒度大小划分为多个子逻辑区间,所述快照粒度大小等于所述Block大小,每一个Segment对应一个映射表,Segment的映射表用于记录Segment中已映射的子逻辑区间与Block的标识的映射关系,所述分布式存储集群还包括Segment管理模块,其中:
目标集群节点,用于在接收到针对目标LUN的写请求时,确定所述写请求在所述目标LUN中对应的至少一个目标逻辑区间,并将所述写请求拆分成针对每一个目标逻辑区间的子写请求;针对每一个目标逻辑区间执行如下处理:从所述目标LUN的映射表中,查询与当前目标逻辑区间对应的第一Segment的标识以及Snap标志;如果所述当前目标逻辑区间的Snap标志指示需要分配新的Segment,则向所述Segment管理模块发送用于请求分配Segment的分配请求;接收所述Segment管理模块基于所述分配请求返回的分配响应,所述分配响应包括分配的第二Segment的标识,所述第二Segment不同于所述第一Segment;从已记录的Segment的标识与存储Segment对应数据的磁盘的标识的对应关系中,查找与所述第一Segment的标识对应的目标磁盘的标识;向所述目标磁盘对应的目标磁盘管理模块发送针对所述第二Segment的目标子写请求,所述目标子写请求包括所述第一Segment的标识;
所述目标磁盘管理模块,用于建立所述第二Segment的标识与所述第一Segment的标识的依赖关系,并为所述目标子写请求在所述第二Segment中对应的各第一子逻辑区间分配对应的目标Block,将所述各第一子逻辑区间与对应目标Block的标识的映射关系记录到所述第二Segment对应的映射表中;在确定所述各第一子逻辑区间中存在需要回读数据的至少一个第二子逻辑区间时,根据已记录的Segment之间的依赖关系,顺序遍历各Segment对应的映射表,根据遍历结果获取各第二子逻辑区间对应的回读数据;将所述回读数据与所述目标子写请求中的数据合并,写入所述第二Segment对应的各目标Block中。
作为一个实施例,所述分布式存储集群还包括集群元数据服务器;
所述目标集群节点,还用于将所述目标LUN的映射表中的所述目标逻辑区间与所述第一Segment的标识的映射关系,更新为所述目标逻辑区间与所述第二Segment标识的映射关系;并将所述目标逻辑区间的Snap标志更新为指示下次写入时不分配Segment;将更新后的映射关系以及Snap标志存储至所述集群元数据服务器。
作为一个实施例,所述分布式存储集群还包括集群元数据服务器;
所述目标集群节点,还用于建立所述第二Segment的标识与所述目标磁盘的标识的映射关系,并将该映射关系存储至所述集群元数据服务器。
作为一个实施例,所述目标磁盘管理模块,还用于将所述第二Segment的标识与所述第一Segment的标识的依赖关系,以及所述第二Segment对应的映射表存储至所述目标磁盘。
作为一个实施例,所述目标磁盘管理模块顺序遍历各Segment对应的映射表,根据遍历结果获取各第二子逻辑区间对应的回读数据,包括:
针对当前遍历的映射表,如果该映射表中存在所述第二子逻辑区间与Block的标识的映射关系,则读取该第二子逻辑区间对应的Block中的数据作为回读数据;
如果遍历的所有映射表中均不存在所述第二子逻辑区间与Block的标识的映射关系,则将所述回读数据填0。
由以上描述可以看出,本申请实施例中,集群节点针对快照前后为同一逻辑区间分配的不同Segment,指定该不同Segment对应数据存储到同一磁盘。并向该磁盘对应磁盘管理模块通告该不同Segment之间的依赖关系。磁盘管理模块根据本地记录的各Segment之间的依赖关系以及各Segment到Block的映射关系,处理该逻辑区间的IO请求。即,在同一磁盘内完成针对同一逻辑区间的IO操作,不再需要跨磁盘操作,因此,可有效提升IO处理性能。且处理过程不再需要维护以及存储写入位图,因此,可减轻集群节点的内存开销,减轻集群元数据服务器的负载压力。
以上所述仅为本申请实施例的较佳实施例而已,并不用以限制本申请,凡在本申请实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (10)
1.一种快照实现方法,其特征在于,应用于分布式存储集群,所述分布式存储集群配置有至少一个LUN,每一个LUN按照预设Segment大小划分为多个逻辑区间,每一个LUN对应一个映射表,LUN的映射表用于记录LUN中已映射的逻辑区间与Segment的标识的映射关系以及该逻辑区间对应的Snap标志,所述Snap标志用于指示下次向该逻辑区间写入数据时是否分配新的Segment;所述分布式存储集群包括至少一个集群节点,每一个集群节点包括至少一块用于存储数据的磁盘,每一个集群节点针对本节点上每一块磁盘部署对应的磁盘管理模块,每一块磁盘按照预设Block大小划分为多块Block,所述Block大小小于所述Segment大小,每一个Segment按照预设快照粒度大小划分为多个子逻辑区间,所述快照粒度大小等于所述Block大小,每一个Segment对应一个映射表,Segment的映射表用于记录Segment中已映射的子逻辑区间与Block的标识的映射关系,所述分布式存储集群还包括Segment管理模块,所述方法包括:
接收到针对目标LUN的写请求的目标集群节点确定所述写请求在所述目标LUN中对应的至少一个目标逻辑区间,并将所述写请求拆分成针对每一个目标逻辑区间的子写请求;
针对每一个目标逻辑区间执行如下处理:
所述目标集群节点从所述目标LUN的映射表中,查询与当前目标逻辑区间对应的第一Segment的标识以及Snap标志;
如果所述当前目标逻辑区间的Snap标志指示需要分配新的Segment,则所述目标集群节点向所述Segment管理模块发送用于请求分配Segment的分配请求;
所述目标集群节点接收所述Segment管理模块基于所述分配请求返回的分配响应,所述分配响应包括分配的第二Segment的标识,所述第二Segment不同于所述第一Segment;
所述目标集群节点从已记录的Segment的标识与存储Segment对应数据的磁盘的标识的对应关系中,查找与所述第一Segment的标识对应的目标磁盘的标识;
所述目标集群节点向所述目标磁盘对应的目标磁盘管理模块发送针对所述第二Segment的目标子写请求,所述目标子写请求包括所述第一Segment的标识;
所述目标磁盘管理模块建立所述第二Segment的标识与所述第一Segment的标识的依赖关系,并为所述目标子写请求在所述第二Segment中对应的各第一子逻辑区间分配对应的目标Block,将所述各第一子逻辑区间与对应目标Block的标识的映射关系记录到所述第二Segment对应的映射表中;
在确定所述各第一子逻辑区间中存在需要回读数据的至少一个第二子逻辑区间时,所述目标磁盘管理模块根据已记录的Segment之间的依赖关系,顺序遍历各Segment对应的映射表,根据遍历结果获取各第二子逻辑区间对应的回读数据;
所述目标磁盘管理模块将所述回读数据与所述目标子写请求中的数据合并,写入所述第二Segment对应的各目标Block中。
2.如权利要求1所述的方法,其特征在于,所述分布式存储集群还包括集群元数据服务器,所述目标集群节点接收所述Segment管理模块基于所述分配请求返回的分配响应后,所述方法还包括:
所述目标集群节点将所述目标LUN的映射表中的所述目标逻辑区间与所述第一Segment的标识的映射关系,更新为所述目标逻辑区间与所述第二Segment标识的映射关系;
并将所述目标逻辑区间的Snap标志更新为指示下次写入时不分配Segment;
将更新后的映射关系以及Snap标志存储至所述集群元数据服务器。
3.如权利要求1所述的方法,其特征在于,所述分布式存储集群还包括集群元数据服务器,所述目标集群节点从已记录的Segment的标识与用于存储Segment对应数据的磁盘的标识的映射关系中,查找与所述第一Segment的标识对应的目标磁盘的标识之后,所述方法还包括:
所述目标集群节点建立所述第二Segment的标识与所述目标磁盘的标识的映射关系,并将该映射关系存储至所述集群元数据服务器。
4.如权利要求1所述的方法,其特征在于,所述目标磁盘管理模块将所述各目标子逻辑区间与对应目标Block的标识的映射关系记录到所述第二Segment对应的映射表中之后,所述方法还包括:
所述目标磁盘管理模块将所述第二Segment的标识与所述第一Segment的标识的依赖关系,以及所述第二Segment对应的映射表存储至所述目标磁盘。
5.如权利要求1所述的方法,其特征在于,所述顺序遍历各Segment对应的映射表,根据遍历结果获取各第二子逻辑区间对应的回读数据,包括:
针对当前遍历的映射表,如果该映射表中存在所述第二子逻辑区间与Block的标识的映射关系,则读取该第二子逻辑区间对应的Block中的数据作为回读数据;
如果遍历的所有映射表中均不存在所述第二子逻辑区间与Block的标识的映射关系,则将所述回读数据填0。
6.一种分布式存储集群,其特征在于,所述分布式存储集群配置有至少一个LUN,每一个LUN按照预设Segment大小划分为多个逻辑区间,每一个LUN对应一个映射表,LUN的映射表用于记录LUN中已映射的逻辑区间与Segment的标识的映射关系以及该逻辑区间对应的Snap标志,所述Snap标志用于指示下次向该逻辑区间写入数据时是否分配新的Segment;所述分布式存储集群包括至少一个集群节点,每一个集群节点包括至少一块用于存储数据的磁盘,每一个集群节点针对本节点上每一块磁盘部署对应的磁盘管理模块,每一块磁盘按照预设Block大小划分为多块Block,所述Block大小小于所述Segment大小,每一个Segment按照预设快照粒度大小划分为多个子逻辑区间,所述快照粒度大小等于所述Block大小,每一个Segment对应一个映射表,Segment的映射表用于记录Segment中已映射的子逻辑区间与Block的标识的映射关系,所述分布式存储集群还包括Segment管理模块,其中:
目标集群节点,用于在接收到针对目标LUN的写请求时,确定所述写请求在所述目标LUN中对应的至少一个目标逻辑区间,并将所述写请求拆分成针对每一个目标逻辑区间的子写请求;针对每一个目标逻辑区间执行如下处理:从所述目标LUN的映射表中,查询与当前目标逻辑区间对应的第一Segment的标识以及Snap标志;如果所述当前目标逻辑区间的Snap标志指示需要分配新的Segment,则向所述Segment管理模块发送用于请求分配Segment的分配请求;接收所述Segment管理模块基于所述分配请求返回的分配响应,所述分配响应包括分配的第二Segment的标识,所述第二Segment不同于所述第一Segment;从已记录的Segment的标识与存储Segment对应数据的磁盘的标识的对应关系中,查找与所述第一Segment的标识对应的目标磁盘的标识;向所述目标磁盘对应的目标磁盘管理模块发送针对所述第二Segment的目标子写请求,所述目标子写请求包括所述第一Segment的标识;
所述目标磁盘管理模块,用于建立所述第二Segment的标识与所述第一Segment的标识的依赖关系,并为所述目标子写请求在所述第二Segment中对应的各第一子逻辑区间分配对应的目标Block,将所述各第一子逻辑区间与对应目标Block的标识的映射关系记录到所述第二Segment对应的映射表中;在确定所述各第一子逻辑区间中存在需要回读数据的至少一个第二子逻辑区间时,根据已记录的Segment之间的依赖关系,顺序遍历各Segment对应的映射表,根据遍历结果获取各第二子逻辑区间对应的回读数据;将所述回读数据与所述目标子写请求中的数据合并,写入所述第二Segment对应的各目标Block中。
7.如权利要求6所述的集群,其特征在于,所述分布式存储集群还包括集群元数据服务器;
所述目标集群节点,还用于将所述目标LUN的映射表中的所述目标逻辑区间与所述第一Segment的标识的映射关系,更新为所述目标逻辑区间与所述第二Segment标识的映射关系;并将所述目标逻辑区间的Snap标志更新为指示下次写入时不分配Segment;将更新后的映射关系以及Snap标志存储至所述集群元数据服务器。
8.如权利要求6所述的集群,其特征在于,所述分布式存储集群还包括集群元数据服务器;
所述目标集群节点,还用于建立所述第二Segment的标识与所述目标磁盘的标识的映射关系,并将该映射关系存储至所述集群元数据服务器。
9.如权利要求6所述的集群,其特征在于:
所述目标磁盘管理模块,还用于将所述第二Segment的标识与所述第一Segment的标识的依赖关系,以及所述第二Segment对应的映射表存储至所述目标磁盘。
10.如权利要求6所述的集群,其特征在于,所述目标磁盘管理模块顺序遍历各Segment对应的映射表,根据遍历结果获取各第二子逻辑区间对应的回读数据,包括:
针对当前遍历的映射表,如果该映射表中存在所述第二子逻辑区间与Block的标识的映射关系,则读取该第二子逻辑区间对应的Block中的数据作为回读数据;
如果遍历的所有映射表中均不存在所述第二子逻辑区间与Block的标识的映射关系,则将所述回读数据填0。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011025570.8A CN112052218B (zh) | 2020-09-25 | 2020-09-25 | 快照实现方法及分布式存储集群 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011025570.8A CN112052218B (zh) | 2020-09-25 | 2020-09-25 | 快照实现方法及分布式存储集群 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112052218A CN112052218A (zh) | 2020-12-08 |
CN112052218B true CN112052218B (zh) | 2023-04-25 |
Family
ID=73604825
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011025570.8A Active CN112052218B (zh) | 2020-09-25 | 2020-09-25 | 快照实现方法及分布式存储集群 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112052218B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112612791B (zh) * | 2020-12-22 | 2022-05-27 | 新华三大数据技术有限公司 | 一种数据处理方法及装置 |
CN114661232A (zh) * | 2022-02-18 | 2022-06-24 | 阿里巴巴(中国)有限公司 | 快照数据的读取方法、装置、系统、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105242881A (zh) * | 2015-10-12 | 2016-01-13 | 创新科软件技术(深圳)有限公司 | 分布式存储系统及其数据读写方法 |
US10210013B1 (en) * | 2016-06-30 | 2019-02-19 | Veritas Technologies Llc | Systems and methods for making snapshots available |
CN109726575A (zh) * | 2018-12-29 | 2019-05-07 | 杭州宏杉科技股份有限公司 | 一种数据加密方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9740566B2 (en) * | 2015-07-31 | 2017-08-22 | Netapp, Inc. | Snapshot creation workflow |
-
2020
- 2020-09-25 CN CN202011025570.8A patent/CN112052218B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105242881A (zh) * | 2015-10-12 | 2016-01-13 | 创新科软件技术(深圳)有限公司 | 分布式存储系统及其数据读写方法 |
US10210013B1 (en) * | 2016-06-30 | 2019-02-19 | Veritas Technologies Llc | Systems and methods for making snapshots available |
CN109726575A (zh) * | 2018-12-29 | 2019-05-07 | 杭州宏杉科技股份有限公司 | 一种数据加密方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112052218A (zh) | 2020-12-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9946460B2 (en) | Storage subsystem and storage system architecture performing storage virtualization and method thereof | |
US8793466B2 (en) | Efficient data object storage and retrieval | |
US6823442B1 (en) | Method of managing virtual volumes in a utility storage server system | |
US7197598B2 (en) | Apparatus and method for file level striping | |
US8909887B1 (en) | Selective defragmentation based on IO hot spots | |
US7330960B2 (en) | Dynamic allocation of computer memory | |
US11861204B2 (en) | Storage system, memory management method, and management node | |
KR20170068564A (ko) | 데이터 처리 방법, 장치 및 시스템 | |
CN112052218B (zh) | 快照实现方法及分布式存储集群 | |
CN113568582B (zh) | 数据管理方法、装置和存储设备 | |
WO2017090071A1 (en) | Method and computer system for managing blocks | |
US6629203B1 (en) | Alternating shadow directories in pairs of storage spaces for data storage | |
US20070106868A1 (en) | Method and system for latency-directed block allocation | |
CN112181299B (zh) | 数据修复方法及分布式存储集群 | |
CN109558068B (zh) | 数据迁移方法及迁移系统 | |
CN116009761A (zh) | 一种数据写入方法以及相关设备 | |
CN109582235B (zh) | 管理元数据存储方法及装置 | |
CN112181300B (zh) | 数据处理方法及分布式存储集群 | |
US8478936B1 (en) | Spin down of storage resources in an object addressable storage system | |
CN111913664B (zh) | 一种数据写入方法及装置 | |
CN112052217B (zh) | 快照实现方法及装置 | |
US11144445B1 (en) | Use of compression domains that are more granular than storage allocation units | |
CN112052124B (zh) | 数据冗余方法及分布式存储集群 | |
US7636830B1 (en) | Simultaneous allocation of storage for multiple logical volumes | |
CN113568583A (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 |