一种拆分名字空间的元数据管理方法

文档序号:6616199阅读:240来源:国知局
专利名称:一种拆分名字空间的元数据管理方法
技术领域
本发明涉及存储系统体系结构领域,特别是涉及一种拆分名字空间的元数 据管理方法。
背景技术
随着世界信息化的不断推进,计算机已成为各行业中不可缺少的工具。在 计算机中承载信息的存储管理软件正随着信息量的突增而日益受到人们的重 视。
存储管理软件的功能是将物理存储介质(如磁盘、盘阵)组织成逻辑分组, 以实现各种功能和特性。操作系统通过调用存储管理软件的接口为上层用户提 供存储服务。
存储系统中所处理的数据有两类, 一类是用户使用的数据,另一类是存储系统用于管理用户数据的数据,即元数据。数据访问的特点是io量大,其CPU
利用率低,对网络带宽要求高;元数据访问的特点是10量小,其CPU利用率 高,对网络延迟要求高。由于两类数据的差异性,存储系统将两类数据的信息 和控制流区分,分别定义了数据和元数据处理的功能操作,并将对两类数据的 管理分离到独立部件。其中处理数据的部件称为数据存储服务器;处理元数据 的部件称为元数据服务器。
元数据服务器的设计从系统构成可以划分为两类 一类是单元数据服务 器,它由一台元数据服务器为整个系统提供元数据服务,所有客户端的请求都 发送到一台元数据服务器上并被执行。该设计方式的优点是元数据请求都在一 台机器完成,不需要机器之间进行交互操作,具有实现相对简单、易于管理的 特点。其缺点是扩展性差,当分布式文件系统面对较大规模的密集元数据请求 是元数据服务器会成为性能瓶颈,从而降低整个系统的处理性能。另一类是多 元数据服务器,它由多台元数据服务器为整个分布式文件系统共同提供元数据 服务器。在这种多元数据服务器系统中,每一个元数据请求划分到其中一个元 数据服务器进行处理。多元数据服务器结构的优点是扩展性好,能适用于较大
规模的机群运算环境;缺点是多元数据服务器之间的负载平衡难以维持,对元
数据的一致性维护复杂,可靠性实现复杂。
对于多元数据服务器结构,名字空间在元数据服务器的组织和划分是决定
元数据处理扩展性和聚合处理性能的关键因素。现有的多元数据服务器一般采
用以下四种方式来在多个元数据服务器上划分名字空间。
动态划分名字空间该方法的核心思想是将文件系统看成多层结构,整个
目录树以目录子树为单位划分在多个元数据服务器上,目录子树创建目录时根 据目录子树的访问量来确定其存放位置,当访问量小时将目录放在相同的元数 据服务器上,当访问量大时将目录存放在父目录和目录名的hash值所在的元 数据服务器上。该方法能够根据访问负载动态调整名字空间的分布,但对于同 一目录的访问热点则无法提供有效的方式来避免。
静态划分名字空间该方法根据目录路径将目录子树划分成若干分区,多 个分区被分布到多个元数据服务器上,分区内的元数据操作都在分区所在元数 据服务器完成,不允许跨分区的元数据操作。该方法由于多元数据服务器维护 的名字空间没有交叉所以能够有较好的可扩展性,但不能根据负载变化对元数 据分布动态调整,也不能解决同一目录的访问热点问题。
利用hash表划分名字空间将文件或目录根据其父目录和名字利用hash
函数得一个值,按照该值来将文件或目录分布到多个元数据服务器上。对文件
进行hash分布可以避免同一 目录的访问热点问题,但由于同一 目录中的文件 由于hash被分布在不同元数据服务器上,导致丢失了局部性信息。对目录进 行hash分布能够保持局部性信息,但同样不能解决同一目录的访问热点问题。 对名字块进行划分在这种系统中,元数据与数据都存储在共享数据盘上,
元数据按照数据的方式记录以块为单位记录到数据盘上,所有的服务器都可以 访问到元数据。多个服务器通过分布式锁机制来实现对某一个元数据块的互斥 访问。这种元数据管理方式便于维护元数据的一致性,但使用分布式锁来控制 访问会增加系统通信消息数量,不仅会对系统扩展性有影响而且同样无法避免
访问热点问题。

发明内容
本发明的目的在于提供一种拆分名字空间的元数据管理方法,其能在提高 元数据服务器的扩展性的同时也避免了同一 目录的访问热点问题。
为实现本发明的目的而提供的一种拆分名字空间的元数据管理方法,包括 下列步骤
A. 创建文件系统;
B. 对已创建好的文件系统进行管理。 所述步骤A还进一步包括
Al.创建元数据服务器的元数据存储目录,初始化缓存结构;
A2.在指定的主元数据服务器上创建根目录的索引结点,其索引结点的索 引号为l,令其子目录序号为0,创建目录文件以存放子目录序号为O的目录 项信息;
A3.利用函数B确定其他元数据服务器的子目录序号,以此构建根目录的 子目录分布数组;
A4.根据子目录分布数组向其他元数据服务器发送创建子目录请求,请求 中附加父目录索引号和子目录序号;
A5.当其他元数据服务器收到创建子目录请求时,创建子目录对应的索引 结点,令其子目录序号为请求所指序号,并创建目录文件以存放子目录序号的 目录项信息,完成后向源元数据服务器发送回应消息。
所述步骤B还进一歩包括
Bl.客户端创建目录;
B2.客户端创建文件;
B3.客户端执行査询操作;
B4.客户端执行读目录操作;
B5.客户端删除文件;
B6.客户端删除目录;
B7.客户端执行释放操作;
B8.客户端执行重命名操作;
B9.客户端创建硬链接;
B10.客户端创建软链接。
所述步骤B1还进一步包括
Bll.在客户端输入客户希望创建目录的路径,由操作系统解析该路径, 获得该路径对应的父目录索引结点、父目录索引号和H录名称;
B12.操作系统根据父目录索引结点、父目录索引号和目录名称,利用函数 A获得创建目录的元数据服务器标识符,然后向该元数据服务器发送创建目录 请求;
B13.该元数据服务器接收到创建目录请求后在本元数据服务器上创建新 目录对应的结点,令其子目录序号为0,创建目录文件用以存放属于子目录序 号为0的目录项信息;
B14.利用函数B确定其他元数据服务器的子目录序号,以此构建该目录的 子目录分布数组;
B15.根据子目录分布数组向其他元数据服务器发送创建子目录请求,请求 中附加父目录索引号和子目录序号;
B16.当其他元数据服务器收到创建子目录请求时,创建对应的索引结点, 令其子目录序号为请求所指序号,并创建目录文件以存放子目录序号的目录项 信息,完成后向源元数据服务器发送回应消息;
B17.源元数据服务器收到其他元数据服务器回应后向其父目录的子目录 文件中添加该目录的目录项信息;
B18.发送回复消息。
步骤B1中,所述源元数据服务器,是指接收到创建目录请求并创建新目 录对应索弓I结点的元数据服务器。 所述步骤B2还进一步包括
B21.根据父目录索引结点,父目录索引号和目录名称利用函数A获得创建 文件的元数据服务器标识符,然后向元数据服务器发送创建文件请求;
B22.元数据服务器接收到创建文件请求后在本元数据服务器上创建文件 对应的索引结点;
B23.将索引结点的目录项信息添加到其父目录的子目录文件中;
B24.如果该父目录索引结点的子目录索引号不等于0则将该父目录索引 结点的属性信息发送到子目录索引号等于0的父目录索引结点所在的元数据 服务器,由该父目录索引结点更新属性;
B25.发送回复消息。
所述步骤B3还进一步包括
B31.根据父目录索引结点,父目录索引号和目录名称利用凼数A获得査询 对象所在的元数据服务器标识符,然后向该元数据服务器发送杳询文件请求; B32.元数据服务器接收到查询文件请求后在本元数据服务器中査询对
象;
B33.客户端在查询到的索引结点的客户端访问表的对应位,置1; B34.将所得信息回复给客户端。 所述步骤B4还进一步包括
B41.根据父目录索引号判断其索引结点所在的元数据服务器,向该元数据 服务器发送读目录请求;
B42.该元数据服务器收到请求后,找到父目录索引号对应的索引结点,通 过索引结点利用函数C确定读目录所读区间所在的子目录分布在哪些元数据 服务器;
B43.向所需读取部分的目录项所在的元数据服务器发送读目录命令;
B44.各元数据服务器根据读命令请求中的请求的起始位置偏移值和偏移
量读出目录项内容,再发回给源元数据服务器;
B45.源元数据服务器收集请求后向客户端发送回复信息。
步骤B4中,所述源元数据服务器是指接收读目录请求并向其他元数据服
务器发送读目录请求的元数据服务器。
所述步骤B5还进一步包括
B51.根据父目录索引结点,父目录索引号和目录名称利用函数A获得该文
件所在的元数据服务器标识符,然后向该元数据服务器发送删除文件请求; B52.该元数据服务器接收到删除文件请求后,找到被删除的文件,将该文
件的目录项从其父目录索引结点的子目录文件中删除;
B53.修改同一元数据服务器上的父目录索引结点的属性值,如果该父目录 索引结点的子目录索引号不等于0则将该父目录索引结点的属性信息发送到 子目录索引号等于O的父目录索引结点所在的元数据服务器,由该父目录索引 结点更新属性。
所述步骤B6还进一步包括
B61.根据父目录索引结点,父目录索引号和目录名称利用函数A获得该目
录所在的元数据服务器标识符,然后向元数据服务器发送删除目录请求;
B62.该元数据服务器接收到删除目录请求后,找到被删除的目录,判断该
目录是否为空,为空则将该目录置为删除状态,否则返回出错信息;
B63.将该目录的目录项从其父目录索引结点的子目录文件中删除;
B64.修改同一元数据服务器上的父目录索引结点的属性值,如果该父目录 索引结点的子目录索引号不等于0则将该父目录索引结点的属性信息发送到 子目录索引号等于0的父目录索引结点所在的元数据服务器,由该父目录索引 结点更新属性。
所述歩骤B7还进一步包括
B71.根据索引号取其二进制表示的最左边10位,将这10位转换为十进制 数,该值则是索引号所指索引结点所在的元数据服务器标识符,然后向该元数 据服务器发送释放请求;
B72.该元数据服务器接收到释放请求后,根据索引号找到索引结点,将索
引结点的客户端访问表中请求客户端对应的位,置0;
B73.判断该索引结点的客户端访问表和属性中的链接数是否为0,如为0, 则释放该索引结点;
B731.如果该索引结点是文件,则将文件对应的元数据存储文件和索引结 点的缓存释放,发送请求到数据存储服务器将文件对应的数据存储文件删除;
B732.如果该索引结点是目录,则将目录在所有元数据服务器上的子目录 文件及所有子目录的索引结点的缓存释放。
所述步骤B8还进一步包括
B81.根据旧父目录索引结点,旧父目录索引号和旧目录名称,利用函数A 获得该旧父目录所在的元数据服务器l,根据新父目录索引结点,新父目录索 引号和新目录名称,利用函数A获得新父目录所在的元数据服务器2。将元数 据服务器1和元数据服务器2的元数据标识符连同重命名请求参数向元数据服 务器l发送重命名请求;
B82.该元数据服务器接受到重命名请求后,找到将被删除的旧文件,将该 文件的目录项从旧父目录的子目录文件中删除;
B83.修改旧父目录索引节点的属性值,如果该旧父目录索引结点的子目录 索引号不等于o则将该旧父目录索引结点的属性信息发送到子目录索引号不
等于O的旧父目录索引结点所在的元数据服务器,由该旧父目录索引结点更新 属性;
B84.如果元数据服务器2和元数据服务器1相同,则在同一元数据服务器
上继续操作,否则将该请求转发到元数据服务器2上;
B85.在元数据服务器2上,向新父目录索引结点的子目录文件添加重命名 文件的新名字对应的目录项,如果该新父目录索引结点的子目录索引号不等于 0则将该新父目录索引结点的属性信息发送到子目录索引号不等于0的新父目 录索引结点所在的元数据服务器,由该新父目录索引结点更新属性;
B86.完成后向元数据服务器1发送成功回应,元数据服务器1收到回应后 向客户端发送回应信息。
所述歩骤B9还进一步包括
B91.根据父目录索引结点,父目录索引号和目录名称利用函数A获得创建 硬链接的元数据服务器标识符,然后向该元数据服务器发送创建硬链接请求;
B92.该元数据服务器接收到创建硬链接请求后,将该硬链接的目录项信息 添加到其父目录的子目录文件中;
B93.如果该父目录索引结点的子目录索引号不等于0则将该父目录索引 结点的属性信息发送到子目录索引号等于0的父目录索引结点所在的元数据 服务器,由该父目录索引结点更新属性;
B94.发送回复消息。
所述步骤B10还进一步包括
B101.根据父目录索引结点,父目录索引号和目录名称利用函数A获得创 建软链接的元数据服务器标识符,然后向该元数据服务器发送创建软链接请 求;
B102.该元数据服务器接收到创建软链接请求后创建软链接,然后将该软 链接的目录项信息添加到其父目录的子目录文件中;
B103.如果该父目录索引结点的子目录索引号不等于0则将该父目录索引 结点的属性信息发送到子目录索引号等于0的父目录索引结点所在的元数据 服务器,由该父目录索引结点更新属性;
B104.发送回复消息。
所述函数A执行以下操作
al.根据父目录索引号和目录名称利用哈希函数得到 一个哈希值;
a2.以该哈希值作为索引值来获取父目录索引结点中目录分布数组中索引 值对应的元数据服务器标识符;
a3.将元数据服务器标识符返回。 所述函数B执行以下操作
bl.操作系统通过由随机函数得到的随机数对元数据服务器的数量求模的
方式获得数D;
b2.以D作为子目录的第二个元数据服务器,接着顺序给目录分布数组赋 值,作为该元数据服务器的元数据服务器标识符,当元数据服务器标识符到达 最大值后,从最小的元数据服务器标识符开始,循环为所有元数据服务器赋值;
b3.返回目录分布数组。
所述函数C执行以下操作
cl.累加目录分布数组中的各项子目录偏移量,直到累加目录的偏移量小 于或等于请求的起始位置偏移值并且累加目录的偏移量加上子目录偏移量 大于请求的起始位置偏移值,记录该子目录序号为l;
c2.继续累加目录分布数组中的各项子目录偏移量,直到累加目录的偏移 量小于请求的起始位置偏移值加上偏移量并且累加目录的偏移量加上子目录 偏移量大于或等于请求的起始位置偏移值加上偏移量,记录该子目录序号为 2;
c3.将序号1和序号2之间的多个子目录记录下来,然后将多个子目录对 应的元数据服务器标识符返回。
所述客户端访问表是指用来记录由哪些客户端对元数据索引结点进行访 问,以防止当客户端对索弓I结点进行访问时将该索引结点释放。
步骤A5中,所述源元数据服务器是指该指定的主元数据服务器。
本发明的有益效果是拆分名字空间的元数据管理方法通过将目录拆分到 所有MDS上的方式,能够将对同一个目录的操作分散到多个MDS上;同时依靠 hash的方法来为元数据选择处理的MDS,既可以做到均匀分布元数据又能做到 客户端只用已有信息就可以准确定位MDS。采用这种元数据管理方法在提高 MDS扩展性的同时也避免了同一 目录的访问热点问题。


图1名字空间的拆分示意图。
具体实施例方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实 施例,对本发明的一种拆分名字空间的元数据管理方法进行进一步详细说明。 应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发 明。
本发明的一种拆分名字空间的元数据管理方法,如图1所不,是采用将名
字空间拆分的方式将目录拆分成多份后分布到所有元数据服务器(Metadata Server,简称MDS)上,每个MDS上都有一份子目录(sub—dir)。不同sub—dir 存储的目录项内容不同,所存目录项的偏移根据sub—dir的序号由小到大而递 增。每个目录都以sub—dir序号为O的部分为头目录,目录的目录项在头目录 所在MDS添加。当客户端发送与目录相关的请求时,根据元数据请求哈希(hash) 值选择处理该请求的MDS,如此可以将属于同一目录但属于不同suLdii"的元 数据请求交由不同的MDS处理,以此来避免同一目录的访问热点,同时可以由 于同一 目录的元数据操作可以并发在多个MDS进行进而提高多MDS的聚合处理 能力。
下面结合上述目标详细介绍本发明一种拆分名字空间的元数据管理方法, 包括下列步骤
步骤S100,创建文件系统;
指定某个MDS作为主MDS,由主MDS创建根目录和根索引结点 (root—inode)。
具体步骤如下
步骤S110,创建元数据服务器的元数据存储目录,初始化缓存结构;
步骤S120,在指定的主MDS创建根目录的索引结点(inode),其inode的 索引号(ino)为1,令其子目录(sub—dir)序号为0,创建目录文件用以存放 sub—dir0的目录项信息;
步骤S130,利用函数B确定其他MDS的sub—dir序号,以此构建根目录 的sub一dir分布数组;
步骤S140,根据sub—dir分布数组向其他MDS发送创建sub—dir请求,
请求中附加父目录索引号(dir—ino)和sub—dir序号;
歩骤S150,当其他MDS收到创建sub—dir请求时,创建sub—dir对应的 inode,令其sub一dir序号为请求所指序号,并创建目录文件以存放sub—dir 序号的目录项信息,完成后向源MDS发送回应消息。
步骤A5中,所述源MDS是指该指定的主MDS。
歩骤S200,对己创建好的文件系统进行管理;
步骤S210,客户端创建目录(create dir);
当客户端需要创建目录时执行以下步骤
步骤S211,在客户端输入客户希望创建目录的路径,由操作系统解析该 路径,获得该路径对应的父目录索引结点(dir—inode)、父目录索引号(dirjno) 和目录名称(name);
步骤S212,操作系统根据dir_inode、 dir—ino和name利用函数A获得 创建目录的元数据服务器标识符(MDSID),然后向该MDS发送创建目录请求;
步骤S213,该MDS接收到创建目录请求后在本MDS创建新目录对应的结 点(inode),令其sub—dir序号为0,创建目录文件用以存放属于sub—dir0的 目录项信息;
步骤S214,利用函数B确定其他MDS的sub—dir序号,以此构建该目录 的sub—dir分布数组;
步骤S215,根据sub—dir分布数组向其他MDS发送创建sub—dir请求, 请求中附力口 dir—ino禾口 sub—dir序号;
步骤S216,当其他MDS收到创建sub—dir请求时,创建对应的inode,令 其sub—dir序号为请求所指序号,并创建目录文件以存放sub_dir序号的目录 项信息,完成后向源MDS发送回应消息;
步骤S217,源MDS收到其他MDS回应后向其父目录的sub_dir文件中添
加该目录的目录项信息;
步骤S218,发送回复消息;
步骤B1中,所述源MDS,是指接收到创建目录请求并创建新目录对应结 点(inode)的MDS。
步骤S220,客户端创建文件(create file);
当客户端需要创建文件时执行以下步骤
步骤S221,根据dirjnode, dir—ino和name利用函数A获得创建文件 的MDSID,然后向MDS发送创建文件请求;
步骤S222, MDS接收到创建文件请求后在本MDS创建文件对应的inode;
步骤S223,将inode的目录项信息添加到其父目录的sub—dir文件中;
步骤S224,如果i亥dir—inode的子目录索引号(sub—dir—no) !二0则将该 dir—inode的属性信息发送到sub—dir—no=0的dir—inode所在的MDS,由该 dir—inode更新属性;
步骤S225,发送回复消息;
步骤S230,客户端执行査询操作(lookup);
当客户端需要做査询操作时执行以下步骤
歩骤S231,根据dir—inode, dir_ino和name利用函数A获得査询对象 所在的MDSID,然后向该MDS发送查询文件请求;
步骤S232, MDS接收到查询文件请求后在本MDS中查询对象; 步骤S233,客户端在査询到的inode的客户端访问表的对应位,置1; 步骤S234,将所得信息回复给客户端; 步骤S240,客户端执行读目录(READDIR)操作; 当客户端需要做读目录操作时执行以下步骤
步骤S241,根据dir—ino判断其inode所在MDS,向该MDS发送readdir 请求;
步骤S242, i亥MDS收到请求后,找到dir—ino对应的inode,通过inode 利用函数C确定readdir所读区间所在的sub_dir分布在哪些MDS;
步骤S243,向所需读取部分的目录项所在的MDS发送readdir命令;
步骤S244,各MDS根据readdir请求中的请求的起始位置偏移值(of f set) 和偏移量(size)读出目录项内容,再发回给源MDS;
步骤S245,源MDS收集请求后向客户端发送回复信息;
步骤S250,客户端删除文件(remove file);
步骤B5中,所述源MDS是指接收读目录请求并向其他元数据服务器发送 读目录请求的元数据服务器。
当客户端需要做删除文件时执行以下步骤
步骤S251,根据dir_inode, dir—ino和name利用函数A获得该文件所在的MDSID,然后向该MDS发送删除文件请求;
步骤S252,该MDS接收到删除文件请求后,找到被删除的文件,将该文件 的目录项从其dir—inode的sub—dir文件中删除;
步骤S253'修改同一 MDS上的dir—inode的属性值,如果该dir—inode的 sub—dir—no! =0则将该dir—inode的属性信息发送到sub—dir一no二0的 dir—inode所在的MDS, 由该dir—inode更新属性。
步骤S260,客户端删除目录(remove dir);
当客户端需要做删除目录时执行以下步骤
步骤S261,根据dir—inode, dir—ino和name利用函数A获得该目录所在 的MDSID,然后向MDS发送删除目录请求;
步骤S262,该MDS接收到删除目录请求后,找到被删除的目录,判断该目 录是否为空,为空则将该目录置为删除状态,否则返回出错信息;
步骤S263,将该目录的目录项从其dir—inode的sub—dir文件中删除;
步骤S264,修改同一 MDS上的dir—inode的属性值,如果i亥dir—inode的 sub—dir—no!二0则将i亥dir—inode的属性信息发送到sub—dir—no二0的 dir—inode所在的MDS,由该dir—inode更新属性。
歩骤S270,客户端执行释放操作(release);
当客户端需要做释放操作时执行以下步骤
歩骤S271,根据索引号(ino)取其二进制表示的最左边10位,将这10位 转换为十进制数,该值则是ino所指索引结点(inode)所在的MDSID,然后向 该MDS发送释放请求;
步骤S272,该MDS接收到释放请求后,根据ino找到inode,将inode的 客户端访问表中请求客户端对应的位,置O;
步骤S273,判断该inode的客户端访问表和属性中的链接数(nlink)是 否为0,如为0,则释放该inode;
步骤S2731,如果该inode是文件,则将文件对应的元数据存储文件和 inode缓存释放,发送请求到数据存储服务器将文件对应的数据存储文件删 除;
步骤S2732,如果该inode是目录,则将目录在所有MDS上的sub_dir文 件及所有子目录的inode的缓存释放。
歩骤S280,客户端执行重命名(rename)操作;
当客户端需要做重命名名操作时执行以下步骤
步骤S281,根据旧父目录索引结点(old—dirjnocle),旧父目录索引号 (old—dir—ino)和旧目录名称(oldname),利用函数A获得该旧父目录所在 MDS1 ,根据新父目录索引结点(new—dir—inode),新父目录索引号(new—dir—ino) 和新目录名称(newname),利用函数A获得新父目录所在MDS2。将MDS1和MDS2 的MDSID连同rename请求参数向MDS1发送重命名请求;
步骤S282,该MDS接受到重命名请求后,找到将被删除的旧文件,将该文 件的目录项从旧父目录的sub一dir文件中删除;
步骤S283,修改old—dir—inode的属性值,如果i亥old—dir一inode的 sub—dir—no! =0则将i亥old—dir_inode的属性信息发送到sub—dir—no二0的 old—dir—inode所在的MDS,由该old—dir—inode更新属性;
步骤S284,如果MDS2和MDS1相同,则在同一 MDS上继续操作,否则将该 请求转发到MDS2上;
步骤S285,在MDS2上,向new—dir—inode的sub—dir文件添加重命名文 件的新名字对应的目录项,如果该new—dir—inode的sub—dir_no!二0则将该 new—dir—inode的属性信息发送到sub—dir_no=0的new—dir—inode所在的 MDS,由该new—dir—inode更新属性;
步骤S286,完成后向MDS1发送成功回应,MDS1收到回应后向客户端发送 回应信息。
步骤S290,客户端创建硬链接(link); 当客户端需要做创建硬链接操作时执行以下步骤
步骤S291,根据dir—inode, dir—ino和name利用函数A获得创建硬链 接的MDSID,然后向该MDS发送创建硬链接请求;
步骤S292,该MDS接收到创建硬链接请求后,将该硬链接的目录项信息 添加到其父目录的sub—dir文件中;
歩骤S293,如果该dir_inode的sub—dir一no!=0则将该dir—inode的属 性信息发送到sub—dir—no=0的dir—inode所在的MDS,由该dir—inode更新 属性;
步骤S294,发送回复消息。
步骤S2100,客户端创建软链接(symlink); 当客户端需要做创建软链接操作时执行以下步骤
步骤S2101,根据dir—inode, dir一ino和name利用函数A获得创建软链 接的MDSID,然后向该MDS发送创建软链接请求;
步骤S2102,该MDS接收到创建软链接请求后创建软链接,然后将该软链 接的目录项信息添加到其父目录的sub—dir文件中;
步骤S2103,如果该dir一inode的sub—dir一no!二O则将该dir—inode的属 性信息发送到sub—dir—no二O的dir_inode所在的MDS,由该dir—inode更新 属性;
步骤S2104,发送回复消息。 本方法中,所述函数A执行以下操作
(1) 根据dir—ino和name利用hash函数得到--个hash值;
(2) 以该hash值作为索引值来获取dir一inode中目录分布数组中索引值对 应的MDSID;
(3) 将MDSID返回。
本方法中,所述函数B执行以下操作
(1) 操作系统通过由随机函数得到的随机数对MDS的数量(MDS—niM)求模 的方式获得数D;
(2) 以D作为sub—dir的第二个MDS,接着顺序给目录分布数组赋值,作 为该MDS的DMSID,当MDSID到达最大值后,从最小的MDSID开始,循环为所 有MDS赋值;
(3) 返回目录分布数组。
本方法中,所述函数C执行以下操作
(1) 累加目录分布数组中的各项子目录偏移量(sub—dir_Size),直到累加 目录的偏移量(total—size)〈=请求的起始位置偏移值(offset)并且 total size + sub dir size 〉offset,记录该sub—dir序号为1;
(2) 继续累加目录分布数组中的各项sub—dir—size,直到total—size 〈 offset+size并且 total—size + sub—dir—size > =offset+size , 记录该 sub—dir序号为2;
(3) 将序号1和序号2之间的多个sub—dir记录下来,然后将多个sub—dir对应的MDSID返回。
本方法中,所述客户端访问表是指用来记录由哪些客户端对元数据inode 进行访问,以防止当客户端对inode进行访问时将该inode释放。
本发明的有益效果在于拆分名字空间的元数据管理方法通过将目录拆分 到所有MDS上的方式,能够将对同一个目录的操作分散到多个MDS上;同时依 靠hash的方法来为元数据选择处理的MDS,既可以做到均匀分布元数据又能 做到客户端只用已有信息就可以准确定位MDS。采用这种元数据管理方法在提 高M D S扩展性的同时也避免了同 一 目录的访问热点问题。
通过结合附图对本发明具体实施例的描述,本发明的其它方面及特征对本 领域的技术人员而言是显而易见的。
以上对本发明的具体实施例进行了描述和说明,这些实施例应被认为其只 是示例性的,并不用于对本发明进行限制,本发明应根据所附的权利要求进行 解释。
权利要求
1.一种拆分名字空间的元数据管理方法,其特征在于,包括下列步骤A.创建文件系统;B.对已创建好的文件系统进行管理。
2. 根据权利要求1所述的方法,其特征在于,所述步骤A还进一步包括: Al.创建元数据服务器的元数据存储目录,初始化缓存结构; A2.在指定的主元数据服务器上创建根目录的索引结点,其索引结点的索引号为i,令其子目录序号为o,创建目录文件以存放子目录序号为o的目录项信息;A3.利用函数B确定其他元数据服务器的子目录序号,以此构建根目录的 子目录分布数组;A4.根据子目录分布数组向其他元数据服务器发送创建子目录请求,请求 中附加父目录索引号和子目录序号;A5.当其他元数据服务器收到创建子目录请求时,创建子目录对应的索引 结点,令其子目录序号为请求所指序号,并创建目录文件以存放子目录序号的 目录项信息,完成后向源元数据服务器发送回应消息。
3. 根据权利要求1所述的方法,其特征在于,所述歩骤B还进一步包括Bl.客户端创建目录;B2.客户端创建文件;B3.客户端执行查询操作;B4.客户端执行读目录操作;B5.客户端删除文件;B6.客户端删除目录;B7.客户端执行释放操作;B8.客户端执行重命名操作;B9.客户端创建硬链接;B10.客户端创建软链接。
4.根据权利要求3所述的方法,其特征在于,所述步骤B1还进一步包括: Bll.在客户端输入客户希望创建目录的路径,由操作系统解析该路径,获得该路径对应的父目录索引结点、父目录索引号和目录名称;B12.操作系统根据父目录索引结点、父目录索引号和目录名称,利用函数 A获得创建目录的元数据服务器标识符,然后向该元数据服务器发送创建目录 请求;B13.该元数据服务器接收到创建目录请求后在本元数据服务器上创建新 目录对应的结点,令其子目录序号为0,创建目录文件用以存放属于子目录序 号为0的目录项信息;B14.利用函数B确定其他元数据服务器的子目录序号,以此构建该目录的 子目录分布数组;B15.根据子目录分布数组向其他元数据服务器发送创建子目录请求,请求 中附加父目录索引号和子目录序号;B16.当其他元数据服务器收到创建子目录请求时,创建对应的索引结点, 令其子目录序号为请求所指序号,并创建目录文件以存放子目录序号的目录项 信息,完成后向源元数据服务器发送回应消息;B17.源元数据服务器收到其他元数据服务器回应后向其父目录的子目录 文件中添加该目录的目录项信息;B18.发送回复消息。
5. 根据权利要求4所述的方法,其特征在于,所述源元数据服务器,是指 接收到创建目录请求并创建新目录对应索引结点的元数据服务器。
6. 根据权利要求3所述的方法,其特征在于,所述步骤B2还进一步包括 B21.根据父目录索引结点,父目录索引号和目录名称利用函数A获得创建文件的元数据服务器标识符,然后向元数据服务器发送创建文件请求;B22.元数据服务器接收到创建文件请求后在本元数据服务器上创建文件对应的索引结点;B23.将索引结点的目录项信息添加到其父目录的子目录文件中; B24.如果该父目录索引结点的子目录索引号不等于0则将该父目录索引结点的属性信息发送到子目录索引号等于0的父目录索引结点所在的元数据服务器,由该父目录索引结点更新属性; B25.发送回复消息。
7. 根据权利要求3所述的方法,其特征在于,所述步骤B3还进一步包括B31.根据父目录索引结点,父目录索引号和目录名称利用函数A获得査询 对象所在的元数据服务器标识符,然后向该元数据服务器发送査询文件请求; B32.元数据服务器接收到查询文件请求后在本元数据服务器中査询对象;B33.客户端在査询到的索引结点的客户端访问表的对应位,置1; B34.将所得信息回复给客户端。
8. 根据权利要求3所述的方法,其特征在于,所述步骤B4还进一步包括 B41.根据父目录索引号判断其索引结点所在的元数据服务器,向该元数据服务器发送读目录请求;B42.该元数据服务器收到请求后,找到父目录索引号对应的索引结点,通 过索引结点利用函数C确定读目录所读区间所在的子目录分布在哪些元数据 服务器;B43.向所需读取部分的目录项所在的元数据服务器发送读目录命令; B44.各元数据服务器根据读命令请求中的请求的起始位置偏移值和偏移 量读出目录项内容,再发回给源元数据服务器;B45.源元数据服务器收集请求后向客户端发送回复信息。
9. 根据权利要求8所述的方法,其特征在于,所述源元数据服务器是指接 收读目录请求并向其他元数据服务器发送读目录请求的元数据服务器。
10. 根据权利要求3所述的方法,其特征在于,所述步骤B5还进一步包括B51.根据父目录索引结点,父目录索引号和目录名称利用函数A获得该文 件所在的元数据服务器标识符,然后向该元数据服务器发送删除文件请求; B52.该元数据服务器接收到删除文件请求后,找到被删除的文件,将该文件的目录项从其父目录索引结点的子目录文件中删除;B53.修改同一元数据服务器上的父目录索引结点的属性值,如果该父目录 索引结点的子目录索引号不等于0则将该父目录索引结点的属性信息发送到 子目录索引号等于O的父目录索引结点所在的元数据服务器,由该父目录索引 结点更新属性。
11. 根据权利要求3所述的方法,其特征在于,所述步骤B6还进一步包括B61.根据父目录索引结点,父目录索引号和目录名称利用函数A获得该目 录所在的元数据服务器标识符,然后向元数据服务器发送删除目录请求;B62.该元数据服务器接收到删除目录请求后,找到被删除的H录,判断该 目录是否为空,为空则将该目录置为删除状态,否则返回出错信息;B63.将该目录的目录项从其父目录索引结点的子目录文件中删除;B64.修改同一元数据服务器上的父目录索引结点的属性值,如果该父目录 索引结点的子目录索引号不等于0则将该父目录索引结点的属性信息发送到 子目录索引号等于O的父目录索引结点所在的元数据服务器,由该父目录索引 结点更新属性。
12. 根据权利要求3所述的方法,其特征在于,所述步骤B7还进一步包括B71.根据索引号取其二进制表示的最左边10位,将这10位转换为十进制 数,该值则是索引号所指索引结点所在的元数据服务器标识符,然后向该元数 据服务器发送释放请求;B72.该元数据服务器接收到释放请求后,根据索引号找到索引结点,将索 引结点的客户端访问表中请求客户端对应的位,置0;B73.判断该索引结点的客户端访问表和属性中的链接数是否为0,如为0, 则释放该索引结点;B731.如果该索引结点是文件,则将文件对应的元数据存储文件和索引结 点的缓存释放,发送请求到数据存储服务器将文件对应的数据存储文件删除;B732.如果该索引结点是目录,则将目录在所有元数据服务器上的子目录 文件及所有子目录的索引结点的缓存释放。
13. 根据权利要求3所述的方法,其特征在于,所述步骤B8还进一步包括B81.根据旧父目录索引结点,旧父目录索引号和旧目录名称,利用函数A 获得该旧父目录所在的元数据服务器l,根据新父目录索引结点,新父目录索 引号和新目录名称,利用函数A获得新父目录所在的元数据服务器2,将元数 据服务器1和元数据服务器2的元数据标识符连同重命名请求参数向元数据服 务器1发送重命名请求;B82.该元数据服务器接受到重命名请求后,找到将被删除的旧文件,将该文件的目录项从旧父目录的子目录文件中删除;B83.修改旧父目录索引节点的属性值,如果该旧父目录索引结点的子目录 索引号不等于0则将该旧父目录索引结点的属性信息发送到子目录索引号不 等于O的旧父目录索引结点所在的元数据服务器,由该旧父目录索引结点更新 属性;B84.如果元数据服务器2和元数据服务器1相同,则在同一元数据服务器 上继续操作,否则将该请求转发到元数据服务器2上;B85.在元数据服务器2上,向新父目录索引结点的子目录文件添加重命名文件的新名字对应的目录项,如果该新父目录索引结点的子目录索引号不等于 0则将该新父目录索引结点的属性信息发送到子目录索引号不等于0的新父目 录索引结点所在的元数据服务器,由该新父目录索引结点更新属性;B86.完成后向元数据服务器1发送成功回应,元数据服务器1收到回应后 向客户端发送回应信息。
14. 根据权利要求3所述的方法,其特征在于,所述步骤B9还进一步包括B91.根据父目录索引结点,父目录索引号和目录名称利用函数A获得创建硬链接的元数据服务器标识符,然后向该元数据服务器发送创建硬链接请求; B92.该元数据服务器接收到创建硬链接请求后,将该硬链接的目录项信息添加到其父目录的子目录文件中;B93.如果该父目录索引结点的子目录索引号不等于0则将该父目录索引结点的属性信息发送到子目录索引号等于0的父目录索引结点所在的元数据服务器,由该父目录索引结点更新属性; B94.发送回复消息。
15. 根据权利要求3所述的方法,其特征在于,所述步骤B10还进一步包括B101.根据父目录索引结点,父目录索引号和目录名称利用函数A获得创 建软链接的元数据服务器标识符,然后向该元数据服务器发送创建软链接请 求;B102.该元数据服务器接收到创建软链接请求后创建软链接,然后将该软 链接的目录项信息添加到其父目录的子目录文件中;B103.如果该父目录索引结点的子目录索引号不等于0则将该父目录索引结点的属性信息发送到子目录索引号等于0的父目录索引结点所在的元数据服务器,由该父目录索引结点更新属性;B104.发送回复消息。
16. 根据权利要求4、 6、 7、 10、 11、及13至15之一所述的方法,其特 征在于,所述函数A执行以下操作al.根据父目录索引号和目录名称利用哈希函数得到一个哈希值; a2.以该哈希值作为索引值来获取父目录索引结点中目录分布数组中索引 值对应的元数据服务器标识符;a3.将元数据服务器标识符返回。
17. 根据权利要求2或4所述的方法,其特征在于,所述函数B执行以下 操作bl.操作系统通过由随机函数得到的随机数对元数据服务器的数量求模的 方式获得数D;b2.以D作为子目录的第二个元数据服务器,接着顺序给目录分布数组赋 值,作为该元数据服务器的元数据服务器标识符,当元数据服务器标识符到达 最大值后,从最小的元数据服务器标识符开始,循环为所有元数据服务器赋值;b3.返回目录分布数组。
18. 根据权利要求8所述的方法,其特征在于,所述函数C执行以下操作 cl.累加目录分布数组中的各项子目录偏移量,直到累加目录的偏移量小于或等于请求的起始位置偏移值并且累加目录的偏移量加上子目录偏移量 大于请求的起始位置偏移值,记录该子目录序号为l;c2.继续累加目录分布数组中的各项子目录偏移量,直到累加目录的偏移 量小于请求的起始位置偏移值加上偏移量并且累加目录的偏移量加上子目录 偏移量大于或等于请求的起始位置偏移值加上偏移量,记录该子目录序号为 2;c3.将序号1和序号2之间的多个子目录记录下来,然后将多个子目录对 应的元数据服务器标识符返回。
19. 根据权利要求7或12所述的方法,其特征在于,所述客户端访问表 是指用来记录由哪些客户端对元数据索弓I结点进行访问,以防止当客户端对索弓I结点进行访问时将该索引结点释放。
20.根据权利要求2所述的方法,其特征在于,歩骤A5中,所述源元数据 服务器是指该指定的主元数据服务器。
全文摘要
本发明公开了一种拆分名字空间的元数据管理方法。该方法包括下列步骤创建文件系统;对已创建好的文件系统进行管理。其中,对已创建好的文件系统进行管理还包括客户端创建目录;客户端创建文件;客户端执行查询操作;客户端执行读目录操作;客户端删除文件;客户端删除目录;客户端执行释放操作;客户端执行重命名操作;客户端创建硬链接;客户端创建软链接。其能够在提高元数据服务器的扩展性的同时也避免了同一目录的访问热点问题。
文档编号G06F17/30GK101196929SQ20071030857
公开日2008年6月11日 申请日期2007年12月29日 优先权日2007年12月29日
发明者晶 刑, 唐荣锋, 劲 熊, 捷 马 申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1