本发明涉及计算机技术领域,尤其涉及一种基于分布式块存储的vid回收方法。
背景技术:
分布式块存储用vid来管理vdi(virtualdiskimage),vid使用1~(2^24-1)范围内的整形数表示。vid回收技术是基于分布式块存储由于保存vid、遍历vid,以及clone,snapshotvdi的特殊性,导致vid的个数受限制,并且无法被回收。导致随着时间的推移,vid被耗尽,无法创建vdi。
技术实现要素:
有鉴于现有技术的上述缺陷,本发明所要解决的技术问题是提供一种基于分布式块存储的vid回收方法,通过vid回收技术,让可以被删除的vdi的vid可以回收利用。
为实现上述目的,本发明提供了一种基于分布式块存储的vid回收方法,包括以下步骤:
步骤1、增加了vvid这一概念,也就是virtualvirtualdiskimageid,不改变客户端接口,保证与客户端的兼容性;
步骤2、对外暴露vvid,内部维护vvid与vid的对应关系,外部对vvid的请求,内部转变为对vid的请求;
步骤3、将存储目录分层,现在引入二级子目录,子目录中存储同宗的vdigroup;
步骤4、将同一group的vdi进行分组管理,当同一group的vdi都删除时,将对应的vvid通过回收vid回收算法回收,实现回收利用。
上述的一种基于分布式块存储的vid回收方法,所述同宗vdigroup,就是指源自同一祖先的所有vdi。
上述的一种基于分布式块存储的vid回收方法,所述步骤4的vid回收算法具体为:
1)、使用分组技术,将有依赖关系的vdi划为一组,也就是所有的vdi,源自同一个vdi;
2)、创建vdi时,将源自同一源的vdi划为一组,每一组内,都有各自的vidbitmap,并为其分配全局的vvid和组内vid;
3)、删除vdi时,检查与同一组内的vdi有没有依赖关系,如果没有可以将该vdi的vvi和vid回收,如果该vdi为根,则将该group删除。
本发明的有益效果是:
本发明增加了vvid这一概念,也就是virtualvirtualdiskimageid,不改变客户端接口,保证与客户端的兼容性;对外暴露vvid,内部维护vvid与vid的对应关系,外部对vvid的请求,内部转变为对vid的请求;将存储目录分层,现在引入二级子目录,子目录中存储同宗的vdigroup;将同一group的vdi进行分组管理,当同一group的vdi都删除时,将对应的vvid通过回收vid回收算法回收,实现回收利用,有效解决现有技术的不足。
以下将结合附图对本发明的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本发明的目的、特征和效果。
附图说明
图1是本发明的方法整体框架图。
图2是本发明的同宗vdigroup框架图。
图3是本发明的vid回收算法流程图。
具体实施方式
如图1所示,一种基于分布式块存储的vid回收方法,包括以下步骤:
步骤1、增加了vvid这一概念,也就是virtualvirtualdiskimageid,不改变客户端接口,保证与客户端的兼容性;
步骤2、对外暴露vvid,内部维护vvid与vid的对应关系,外部对vvid的请求,内部转变为对vid的请求;
步骤3、将存储目录分层,现在引入二级子目录,子目录中存储同宗的vdigroup;
步骤4、将同一group的vdi进行分组管理,当同一group的vdi都删除时,将对应的vvid通过回收vid回收算法回收,实现回收利用。
上述的一种基于分布式块存储的vid回收方法,所述同宗vdigroup,就是指源自同一祖先的所有vdi。如图2所示,子目录dir1中,vid2和vid4都是源自vid1创建snapshot时生成的;而vid3则clone自vid2。因而,他们都是源于vid1的,都存储于同一个子目录下。子目录的命名,使用源vdi的vvid。子目录内部沿用原先的存储管理方式,不同子目录中的vid可以重复。
如图3所示,所述步骤4的vid回收算法具体为:
1)、使用分组技术,将有依赖关系的vdi划为一组,也就是所有的vdi,源自同一个vdi;
2)、创建vdi时,将源自同一源的vdi划为一组,每一组内,都有各自的vidbitmap,并为其分配全局的vvid和组内vid;
3)、删除vdi时,检查与同一组内的vdi有没有依赖关系,如果没有可以将该vdi的vvi和vid回收,如果该vdi为根,则将该group删除。
以下给出一具体实施例说明本发明的原理:
1、部署集群,至少3台物理机,每个物理机单独一个zone
2、存储进程启动时,datanode遍历数据目录的元数据,并与其datanode和gateway节点互相同步元数据信息,并在gatewaycache中建立vvid与vid的关系映射表
3、创建一个新的vdi时,首先,为其分配一个vvid;然后,以vvid为目录名,在各个数据节点创建一个子目录;最后,在子目录中分配一个vid,并将vvid和vid之间的对应关系数据存储于根目录中。
4、创建snapshot时,首先,通过vvid搜索其所在子目录;然后,进入该子目录,根据其在子目录中的实际vid搜索basevdi,并为其创建一个snapshot;最后,分配一个新的vvid,与新的basevdiid建立映射关系。
5、进行vdiclone时,首先,通过vvid搜索其所在子目录;然后,进入该子目录,根据其在子目录中的实际vid搜索basevdi,并基于此vdi创建clonevdi;最后,分配一个新的vvid,与clonevdiid建立映射关系。
6、删除vdi有2种情况:其一,删除一个非根vdi时,子目录中实际的vdi和根目录中的vvid都会被删除,对应的vvid即可被回收再用;其二,删除一个根vdi时,如果其子目录中仍然存在未被删除的其他vdi,那么这个根vdi所对应的vvid就不能释放,直到该子目录中所有vdi都被删除时,才能删除这个子目录,并回收其对应的vvid。
以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术人员无需创造性劳动就可以根据本发明的构思做出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。