专利名称:一种无重复无遗漏遍历分布式文件系统目录项的方法
技术领域:
本发明涉及的是计算机存储技术,具体的涉及一种无重复无遗漏遍历分布式文 件系统目录项的方法。
背景技术:
长期以来,磁盘带宽的增长都远小于计算能力的增长,而多核服务器的普及及 发展让这种不匹配的差距进一步拉大。包括RAID阵列等,我们目前有多种技术可以提 高I/O性能,并行文件系统也是其中之一。它可以把多个节点上的磁盘组织成为一个大 的存储系统,提供更大的存储容量和聚合的I/O带宽,并随着系统规模的扩大而扩展, 在多种存储环境发挥着重要的作用,尤其是集群结构的高性能计算领域。当并行文件系统达到一定规模后,单元数据存储服务器可能成为系统的性能瓶 颈,此时通过将元数据分布到多个元数据存储服务器可以降低单个元数据的压力,提高 系统的吞吐率和性能。在实现多元数据存储服务器时,通过将大的目录项文件分片存储到多个不同的 元数据存储服务器上可以降低系统延迟,提高目录项文件的读写性能;该方法带来的一 个比较严重的负作用是客户端保存的目录文件的元数据信息随时可能过期,客户端不能 及时同步所有分片的元数据信息。客户端readdir操作可能面临漏读或多次重读目录项块 的问题。
发明内容
本发明的目的在于提供一种复杂度低,效率高,保证客户端可以快速遍历完整 的目录项文件的方法。一种无重复无遗漏遍历分布式文件系统目录项的方法,其特征在于A、目录项通过Hash函数映射到多个节点的可扩展Hash桶中,目录文件由若干 个分布在不同节点的可扩展Hash文件组成,每个可扩展Hash文件称为目录文件的一个分 片;B、可扩展Hash文件的桶页面形式存在,每个桶的大小为一个页面;C、在MDS运行期间,随时可能添加或删除目录项;D、在MDS运行期间,目录文件分片可能会增长,但是不会被截断;E、MDS在启动或管理员干预时可以通过将目录文件分片重新写入到一个新的 目录文件分片实现空间回收;F、客户端一次可以从若干个分片上同时读取多个目录项块,且客户端不会缓存 日录项块。本发明具有如下有益效果1.本发明通过在目录项中记录目录项的创建时间,简化了可扩展Hash桶分裂后
的重建工作;
2.本发明通过在客户端的file结构中记录readdir每个分片的时间戳、分片内的偏 移量、分片的size等信息实现按时间戳重建指定时间点的目录文件重建;3.本发明通过将目录文件偏移弱化为所有目录文件分片的和,使客户端能够并 行访问目录文件分片。
无
具体实施例方式一个分布式文件系统分为MDS,DS和Client三个模块,其中DS与readdir操作
没有直接关系。目录文件的布局目录文件的目录项按照Hash算法分布在最多MAX_DIR_SPAN个MDS上,为了 简化讨论,限定所有的目录文件都正好分布在MAX_DIR_SPAN个MDS上。每个MDS 上保存有目录文件分片和该分片的布局信息dirjayout ;第一个分片上除了自身分片的布 局信息,还包括其它分片的dirjayout信息;其它分片修改目录项操作最后一个步骤都是 将该分片修改过的dirjayout信息同步到第一个目录文件分片上。 目录文件布局信息dirjayout结构如下struct dir_layout{u32_tnr_mds ; //分片数目u32_t mds_id[MAX_DIR_SPAN] ; //元数据服务器ID号,用于索引元数据服务器的IP地址U64_t mds_mtime[MAX_DIR_SPAN];U64_t mds_size[MAX_DIR_SPAN] ; /,U64_t mds_gdepth[MAX_DIR_SPAN];全局深度U64_t mds_nlink[MAX_DIR_SPAN];丨};日录项结构struct dentry{U64_t d_ino ; //inode 号u64_t d_off ; Il目录项在目录项块中的偏移u64_t d_ctime ; //目录项创建时间u64_t d_reclen ; //文件名长度char d_name[8] ; // 文件名};客户端file结构中保存有目录文件分片大小,偏移量和最近修改的时间戳。struct dir_cookie {u64_t clt_fpos[MAX_DIR_SPAN];
Il分片最近修改时间 /分片大小 Il分片上可扩展Hash结构的桶的
//分片上目录项数目
U64_t mds_size[MAX_DIR_SPAN];U64_t mds_mtime[MAX_DIR_SPAN];};客户端readdir请求参数struct readdir_args {U64_t clt_ipos ;u64_t clt_mtime ;u64_t clt_size ;
u64_t clt_gdepth ;u64_t page_nr ;};具体步骤readdir 流程如下1.客户端在发起readdir操作之前将dir_C00kie中所有数据数据清0 ;2.客户端从MDS更新inode信息和layout信息,并更新dir_cookie中的mds_size 禾口 mds_mtime 信息;3.客户端根据应用层请求的目录项块数目REQ_PAGE_NR,向MAX_DIR_SPAN
个目录项分片发送读取目录项块的请求,请求构造流程如下a)按照目录文件分片剩余目录项块数目(mdS_SiZe[i]-clt_fp0S[i])给目录文件的 MDS排序;b)如果 REQ_PAGE_NR 大于 MAX_DIR_SPAN,将 REQ_PAGE_NR 个页面平均
分摊到所有有剩余页面需要访问的MDS上,如果有MDS页面数不足REQ_PAGE_NR/ MAX_DIR_SPAN个,则将不足的页面摊到其它MDS请求;c)否贝Ij,向前 REQ_PAGE_NR 个 MDS 发起 readdir 请求;4.目录文件分片所在的MDS收到readdir请求后,该分片上的目录文件分片的 layout可能出于如下几种状态a)layout信息没有发生变化,readdir请求参数中clt_mtime与当前分片的mds_ mtime相等MDS读取从clt_fpos开始的page_nr个页面返回给b)layout信息发生变化,readdir请求参数中的clt_mtime小于当前分片的mds_ mtime,但是可扩展Hash没有发生分裂,即readdir请求参数中clt_size和当前分片的mds_ size相等MDS从clt_fpos位置开始读取page_nr个页面返回给客户端,此时可能读取到
部分最新添加或删除的目录项;cMayout信息改变,可扩展Hash的桶发生分裂,按照时间戳重建目录项分片的 Hash 桶i.从偏移为clt_fpos位置开始读取页面PAGE ;ii.如果PAGE发生过分裂,假设PAGE和由PAGE分裂出来的子孙桶PAGE’, PAGE”构成集合PAGES,读取页面集合PAGES中所有创建时间在clt_mtime之前的目录
项;由于在PAGE发生分裂之前PAGE上的所有目录项总长度不超过一个页面大小,在重 建过程中不会引入目录项块分裂后新添加的目录项,故重建的页面大小不会超过一个页
5CN 102024017 A说明书4/4 页
面大小;iii.如果PAGE没有发生分裂,直接读取该页面上的所有dentry项;iv.重复以上操作,直到完全读取page_nr个页面。d)客户端收到从一个分片读取的页面后,更新该分片cookie信息的clt_fp0S信息。
权利要求
1. 一种无重复无遗漏遍历分布式文件系统目录项的方法,其特征在于A、目录项通过Hash函数映射到多个节点的可扩展Hash桶中,目录文件由若干个 分布在不同节点的可扩展Hash文件组成,每个可扩展Hash文件称为目录文件的一个分 片;B、可扩展Hash文件的桶页面形式存在,每个桶的大小为一个页面;C、在MDS运行期间,随时可能添加或删除目录项;D、在MDS运行期间,目录文件分片可能会增长,但是不会被截断;E、MDS在启动或管理员干预时可以通过将目录文件分片重新写入到一个新的目录 文件分片实现空间回收;F、客户端一次可以从若干个分片上同时读取多个目录项块,且客户端不会缓存目录 项块。
全文摘要
本发明提供了一种无重复无遗漏遍历分布式文件系统目录项的方法。目录项通过Hash函数映射到多个节点的可扩展Hash桶中,目录文件由若干个分布在不同节点的可扩展Hash文件组成,每个可扩展Hash文件称为目录文件的一个分片;可扩展Hash文件的桶页面形式存在,每个桶的大小为一个页面;在MDS运行期间,随时可能添加或删除目录项;在MDS运行期间,目录文件分片可能会增长,但是不会被截断;MDS在启动或管理员干预时可以通过将目录文件分片重新写入到一个新的目录文件分片实现空间回收;客户端一次可以从若干个分片上同时读取多个目录项块,且客户端不会缓存目录项块。
文档编号G06F17/30GK102024017SQ201010536528
公开日2011年4月20日 申请日期2010年11月4日 优先权日2010年11月4日
发明者常涛, 杨浩, 王勇, 王飞良, 苗艳超 申请人:天津曙光计算机产业有限公司