一种应用于分布式海量存储系统的负载均衡方法

文档序号:7703332阅读:150来源:国知局
专利名称:一种应用于分布式海量存储系统的负载均衡方法
技术领域
本发明涉及一种应用于分布式海量存储系统的负载均衡方法。
背景技术
分布式海量存储系统,又称为大规模分布式文件系统,主要是针对大规模 的数据存储和数据访问而开发的。其主要的特点是文件系统中的内容可以存储 在多台机器上,并通过网络来进行数据的共享和传输,具有很强的稳健性和可 扩展性。 一般都是一次存储,多次访问,所以对访问的并发性要求很高。如图l
所示,分布式海量存储系统主要分为3个部分主服务器(Master Server)、文 件块存储服务器(Chunk Server)及客户端(Client)。
主服务器管理文件的元数据,主要包括文件名字空间、文件到文件块 (Chunk)的映射、文件块(Chunk)到文件块存储服务器(Chunk Server)的映射,
部署在分布式服务器上。
文件块存储服务器(Chunk Server):管理每个分布式节点上的文件存储。 根据主服务器的指令对文件块(Chunk)进行新建、删除和复制操作,部署在分布 式节点上。
客户端对应用端提供服务,提供文件的创建,读取,写入功能。它通过 向主服务器、文件块存储服务器(Chunk Server)发送命令来提供服务,部署在 应用端上。
在文件块存储服务器(Chunk Server)上,文件存储的基本组织单位是文件 块(Chunk)。例如,可将一个文件块(Chunk)的大小设定为32MB。如果一个文件 的大小超过32MB,则把这个文件分割成几个文件块(Chimk)来进行存储,每个文件块(Chunk)最大不超过32MB。文件系统对文件的读写最后都转化为对文件 块(Chunk)的读写。对用户来说,文件块(Chunk)是不可见的。由于分布式海量存 储系统为了实现高可靠性,都会进行文件块的备份, 一般来说, 一个文件块 (Chunk)有两个副本,也就是说有三个相同的文件块(Chunk)分别存储在不同的文 件块存储服务器(Chunk Server)上,所以当某台文件块存储服务器(Chunk Server)出现故障时,不会破坏文件。
分布式海量存储系统经过长时间的运行,某些文件块存储服务器(Chunk Server)可能会由于拥有较多的被频繁访问的文件块(Chunk)而导致负载过重, 而另外一些原来负载较轻的文件块(Chunk)存储服务可能会因为自身一些性能参 数的改变,如部分内存条失效导致内存减少,网络环境改变导致网络流量变少 等等,而变得负载过重。也就是说,长时间运行的系统会出现文件块存储服务 器(Chunk Server)负载不均的情况,需要对某些文件块存储服务器(Chunk Server)的负载进行重新分配。由于文件块存储服务器(Chunk Server)的一些 与硬件相关的性能参数,如磁盘容量、CPU、内存、网络流量等都较难在短时 间内改变,而连接数因为与客户端的访问相关,也不能轻易通过断绝连接的方 式来减轻文件块存储服务器(ChunkServer)的负载。因此对某些负载过重的文 件块存储服务器(Chunk Server)主要采用对存储在该文件块存储服务器(Chunk Server)上的文件块(Chunk)进行迁移来达到减轻其负载的目的,这就是文件块 (Chunk)均衡策略。
主服务器(Master Server)根据各个文件块存储服务器(Chunk Server)的 CPU的平均使用率、网络带宽的平均使用率、磁盘容量、客户端的平均访问量 等参数即所有文件块存储服务器(Chunk Server)的负载量设定两个负载阈值一 —重载阈值和轻载阈值,负载高于重载阈值的文件块存储服务器(Chunk Server)为重载服务器,负载低于轻载阈值的为轻载服务器,然后计算出重载服务器中 需要迁出的文件块和轻载服务器中需要迁入的文件块数量。对于其具体算法, 需要视情况而定。例如,在《面向现代服务业的大规模分布式文件存储系统设
计和实现》(硕士论文,作者李武)的3.3.3节中介绍一种具体算法,其基本
思路为首先计算系统的整体平均负载(具体计算方法可以),假定为avg;设 定系统的波动值为U, U值可以根据实际情况进行修改;那么系统的重载阈值为
avg+u,记为hight;轻载阈值为avg-u,记为low;对于每一台重载服务器,计 算出要进行迁出的文件块,形成重载服务器列表;假定某台重载服务器的负载 为x,则迁出的文件块数-(x-hight)/每个文件块所占的负载,记为 out—chunkQuantity;计算迁出的文件块数量后,需要定位到具体的文件块;海量 分布式系统会记录每个文件在一段时间内的访问次数;系统一般分5个访问频 率访问段,从每个频段里随机选择out一chunkQuantity/5个文件块作为要迁移的 文件块;同样对于每一台轻载服务器,计算出要进行迁入的文件块数,形成轻 载服务器列表;假定某台重载服务器的负载为y,则迁出的文件块数-(low-y)/ 每个文件块所占的负载,记为in—chunkQuantity。
设定好重载服务器和轻载服务器后,可以将重载服务器中的相应文件块迁 移到轻载服务器进行均衡。但是如果应用现有的一些负载均衡算法,就有可能 使得一个文件块(Chunk)连同它的2个副本被均衡到同一个文件块存储服务器 (Chunk Server)上,假如碰巧这个文件块存储服务器(Chunk Server)出现死 机或其它意外情况,那么因为这个文件块(Chunk)连同它的副本都失效而导致整 个文件不能访问。
鉴于此,本发明提出了一种负载均衡方法来解决分布式文件服务器的各个 节点间的负载均衡问题,该负载均衡算法始终保证一个文件块(Chunk)的3个文件块(Chunk)都分配在3台不同的文件块存储服务器(Chunk Server)上,在实现 各个文件块存储服务器(Chunk Server)负载均衡的同时又保证了系统的可靠性。

发明内容
为了在进行负载均衡的同时保证一个文件块(Chunk)的不同副本保存在不同 的文件块存储服务器(Chunk Server)上,本发明提供一种新的负载均衡方法。 在设置好重载服务器和轻载服务器以后,该方法通过以下步骤实现
(1) 对文件块(Chunk)进行标识的方法,该文件块(Chunk)的标识信息含有该文 件块(Chunk)的识别标记以及该文件块和其所有副本所在文件块存储服务器的标 识。例如,可用一个数值或特征字符串作为该文件块(Chunk)的识别标记,如果 该文件块(Chunk)还有2个副本,及该文件块(Chunk)—共有三个拷贝,则该文件 块(Chunk)的标识信息还含有三个拷贝所在文件块存储服务器(Chunk Server)的 标识。其中,所述的文件块存储服务器(Chunk Server)的标识信息含有该文件 块存储服务器(Chunk Server)的识别标记以及该文件块存储服务器上(Chunk Server)所有文件块的识别标记。
(2) 对重载服务器进行标识,该标识信息含有该重载服务器的识别标记、需要 迁出的文件块(Chunk)的数量、需要迁出的文件块(Chunk)的标识。因为按照第(1) 步所述,文件块(Chunk)的标识信息含有该文件块(Chunk)的识别标记以及该文件
块和其所有副本所在文件块存储服务器的标识,因此重载服务器的标识信息同 样也包含有需要迁出的文件块(Chunk)的标识中含有的这些信息。
(3) 对轻载服务器进行标识,该标识信息含有该轻载服务器的识别标记、需要 迁入的文件块(Chunk)数量。
(4) 将重载服务器按照需要迁出的文件块(Chunk)的数量进行降序排序,将含有 需要迁出的文件块(Chunk)的数量最多的重载服务器排在最前面,即第一个重载服务器。
(5) 将轻载服务器按照需要迁入的文件块(Chunk)数量进行降序排序,将含有需 要迁入的文件块(Chunk)数量最多的轻载服务器排在最前面,即第一个轻载服务 器。
(6) 将第一个重载服务器上所有需要迁出的文件块(Chunk)的标识信息中的所有 文件块存储服务器(Chunk Server)的识别标记形成一个文件块存储服务器集合。 对第一个轻载服务器加以判定,如果第一个轻载服务器不属于该文件块存储服 务器集合,说明第一个重载服务器中需要迁出的文件块(Chunk)在第一个轻载服 务器上没有副本存在,则将第一个重载服务器上需要迁出的文件块(Chunk)迁移 到第一个轻载服务器中,然后重新循环进行第(4)步及后续步骤直至负载均衡 完成;如果第一个轻载服务器属于该文件块存储服务器集合,说明第一个重载 服务器中部分需要迁出的文件块(Chunk)的在第一个轻载服务器上有副本存在, 则将那些在第一个轻载服务器有副本存在的文件块去除,将剩下的文件块迁移 到第一个轻载服务器中,然后重新循环进行第(4)步及后续步骤直至负载均衡 完成。
在执行上述负载均衡的过程中可能碰到的问题有,第一个重载服务器上需 要迁出的文件块(Chunk)的数量大于第一个轻载服务器上需要迁入的文件块 (Chunk)的数量,这样,便不能将第一个重载服务器上需要迁出的文件块(Clmnk) 全部迁移到第一个轻载服务器,这样便需要将第一个重载服务器上需要迁出的 文件块(Chmik)迁移到多个轻载服务器。所采取的方法是,将轻载服务器进行降 序排列后,选取排在前面的多个轻载服务器直至其需要迁入的文件块(Chunk)数 量之和大于等于需要迁出文件块数量,按照所选取的轻载服务器需要迁入的文 件块(Chunk)数量将第一个重载服务器上需要迁出的文件块分为数份,所分的份数与所选取的轻载服务器的数量一致。例如,第一个重载服务器上需要迁出的
文件块(Chunk)的数量为10个,4个轻载服务器需要迁入的文件块(Chunk)数量依 次为4个、3个、2个、1个,则将第一个重载服务器上需要迁出的文件块(Chunk) 分为4份,第1份为4个文件块,第2份为3个文件块,第3份为2个文件块, 第1份为1个文件块。然后依次将分为数份的文件块按照上述第(6)步的方法 迁移到第一个轻载服务器,每执行一次迁移后对按照步骤(5)对轻载服务器进 行降序排序。
本发明的优点是,在将文件块(Chunk)从负载超过重载阈值的重载服务器迁 移到负载低于轻载阈值的轻载服务器的过程中,始终保证一个文件块(Chunk)的 3个拷贝都分配在3台不同的文件块存储服务器(Chunk Server)上,这样既保 证了各个文件块存储服务器(ChunkServer)的负载均衡,又保证了系统的可靠 性。


图l为分布式文件系统的结构图; 图2为负载均衡模型图。
具体实施例方式
下面结合附图举例说明本发明的具体实施方式
,如图2所示。在本实施例
中,采用如下步骤实现负载均衡
1.对文件块(Chunk)标识的方法
在对文件块进行标识时,用唯一的识别标记表示该文件块并需要表示该文 件块的所有拷贝所在的文件块存储服务器(Chunk Server),例如,假定一个文 件File含有n个不同的文件块^//6 = {7^ —y^,尸w —y^,'",^M —其 中,Fm代表一个文件,Fm—fbn表示这个文件的某一个i央,m和n可作为该文件块的识别标记,假定每个不同的文件块一共有三个拷贝,分别处于不同的文件块
存储服务器(ChunkServer)上,则可以对文件块F^fK进行如下标识
其中,(l)N表示整个分布式文件系统所用的Chunk Server数;(2) chunkS;是第i 台Chunk Server的标识;(3) (c/ ""/^ , c/^^ .,c/^^S^ }表示Fm—&。 文件块分别存储在chunkSi, chunkSj, chunkSk上。
chunkSi是第i台Chunk Server的标识,该标识具体为 c/i簡fc^ ={'..,m —",. },表示第i个Chunk Server中包含的文件块为Fm—fbn 等,其中,i为该Chunk Server的识别标记,m_n为文件块的识别标记。
2. 对重载服务器进行标识
重载服务器的集合记为矩阵P。 P:(A,^2,…,A,…,AJ, Pi表示 具体某一台重载服务器,A =[c/iim/bServef^,0,.],
={尸"^_^3,"',^7~—_/^}。其中,(i) s是一个数据
结构,表示第i台Chunk Server的识别标记(chunkServerld,即上述的i)以及 要迁出的所有文件块的标识;(2) O,.表示第i台chunk Server要迁出的文件块为 {F//^ — , —井3,…,i7//。. — } , Filej—&即上述文件块的标识。
3. 对轻载服务器进行标识
轻载服务器的集合记为矩阵R。 ^ = {。,^^"^,'"^} , Ri表示具体某 一台轻载月艮务器,。=[c/mwA:iServer/(i,c/mwAQuantity]。 其中, chunkServerld为该轻载服务器的识别标记,chunkQuantity为该轻载服务器需要 迁入的文件块数量。
4. 负载均衡方法以下为本发明负载均衡的具体算法,其中部分符号说明(l)first(P):表示
矩阵P的第一个chunk Server的唯一标识以及要迁出的文件块;(2) first(R):表 示矩阵R中的第一个chunk Server的唯一标识以及要迁入的文件块数;(3) size(first(P).O):表示P的第一个chunk Server要迁出的文件块数量。(4)p.O:表 示某台Chunk Server要迁移出的文件块。
假设分布式海量存储系统总体负载在一开始时是稳定的,那么就有
Z Wze(/7/.6^) = .c/m"A:gwa"ft'W 。负载越重的Chunk Server越迫切要进
! =1 /=1
行Chunk的重平衡,把Chunk迁移到轻载Chunk Server上,把Chunk迁移到负 载最轻的Chunk Server上更能体现整个文件系统的负载均衡。具体算法如下
(1) 将R按r.chunkQuantity降序排序,P按p.O中文件块数量降序排序;如果 size(first(P).O"0或者超时,则退出;
(2) if(size(first(P).Q)<= first(R).chunkQuantity) 〃第一个重载服务器上需要迁出的Chunk的数量小于第一个轻载服务器上需要 迁入的文件块的数量〃
Setp=first(P), n=size(p.O), r=first(R);
Set chunkServers= IJ F J (舰J e );
! =1
〃将第一个重载服务器上所有需要迁出的文件块(Chunk)的标识信息中 的所有Chunk Server的识别标记形成一个文件块存储服务器集合〃 if( r.c/m打^Server/c/ g c/mn^Serva^)
〃第一个轻载服务器不属于该文件块存储服务器集合,说明第一个重载服务器中
需要迁出的文件块(Chunk)在第一个轻载服务器上没有副本存在〃Master Server通知该p.chunkServerld禾卩r.chunkServerld对应的两台 Chunk Server进行负载均衡,并删除p, r.chunkQuantity= r.chunkQuantity-n;继续进行步骤(1); }else
〃第一个轻载服务器属于该文件块存储服务器集合,说明第一个重载服务器中部 分需要迁出的文件块(Chunk)的在第一个轻载服务器上有副本存在〃
Set File—fbs= Z7" — C^"^V.如Me證/d ;
〃将己经在第一个轻载服务器上有副本存在的Chunk去除,剩下的 文件块进行迁移〃
Master Server通知该r.chunkServerld禾卩p.chunkServerld对应的两台 Chunk Server进行负载均衡,把文件块File—fbs从p.chunkServerld 对应的Chunk Server迁移到r.chunkServerld对应的Chunk Server,
并令p.O=门cAw打fcS^ c/mw^en;er/d , r.chunkQuantity= r.chunkQuantity-size(File—fbs);继续步骤1;
(3 ) if(size(first(P).0)〉first(R).chunkQuantity)
〃第一个重载服务器上需要迁出的Chunk的数量大于第一个轻载服务器上需要 迁入的文件块的数量〃选取t,使得size(first(P).O)《Z!0.cA"W2""""&;Setp二first(P);按照 r.chunkQuantity的大小分p.O中的文件块为t份,按降序记为
For each O E p.O
〃执行循环算法,将每一份文件块依次按照上述方法进行负载均衡〃 Setn=size(0), r=first(R), chunkServers-l^)尸—_/& (OeO);
Master Server通知该p.chunkServerld禾口 r.chunkServerld对应的 两台Chunk Server进行负载均衡,把O对应的文件块迁移到 r.chunkServerld对应的Chunk Server上,并且令Onull, r.chunkQuantity= r.chunkQuantity-n; J else {
Set File—fbs= O — c/m"^en;eri^ ;Master Server通知该
p.chunkServerld禾口 r.chunkServerld对应的两台Chunk Server进行 负载均衡,把文件块File—fbs从p.chunkServerld对应Chunk Server 迁移至'j r.chunkServerld 对应 Chunk Server , 令
r.chunkQuantity=r.chunkQuantity-size(File_fbs); 将R按r.chunkQuantity降序排序;Set Otemp=null; For each OEp.O
if(0!=null) Otemp.add(O);
if(Otemp!=null) p.O=Otemp;
else删除p;
续进行步骤(1);
权利要求
1.一种应用于分布式海量存储系统的负载均衡方法,该方法包括,主服务器根据所有文件块存储服务器的负载量设定重载阈值和轻载阈值,将负载高于重载阈值的文件块存储服务器设定为重载服务器,将负载低于轻载阈值的文件块存储服务器设定为轻载服务器,并计算出重载服务器中需要迁出的文件块和轻载服务器中需要迁入的文件块数量,其特征在于,该方法还包括如下步骤(1)确定一种对文件块进行标识的方法,该方法将该文件块的识别标记以及该文件块和其所有副本所在文件块存储服务器的标识作为文件块的标识信息,所述的文件块存储服务器的标识信息含有该文件块存储服务器的识别标记以及该文件块存储服务器上所有文件块的识别标记;(2)对重载服务器进行标识,该标识信息含有该重载服务器的识别标记、需要迁出的文件块的数量、需要迁出的文件块的标识;(3)对轻载服务器进行标识,该标识信息含有该轻载服务器的识别标记、需要迁入的文件块数量;(4)将重载服务器按照需要迁出的文件块的数量进行降序排序,将含有需要迁出的文件块的数量最多的重载服务器排在最前面,即第一个重载服务器;(5)将轻载服务器按照需要迁入的文件块数量进行降序排序,将含有需要迁入的文件块数量最多的轻载服务器排在最前面,即第一个轻载服务器;(6)如果第一个重载服务器上需要迁出的文件块的数量小于第一个轻载服务器上需要迁入的文件块的数量,则将第一个重载服务器上需要迁出的且在第一个轻载服务器没有副本存在的文件块迁移到将第一个轻载服务器;(7)如果第一个重载服务器上需要迁出的文件块的数量大于第一个轻载服务器上需要迁入的文件块的数量,则选取排在前面的多个轻载服务器直至其需要迁入的文件块数量之和大于等于需要迁出文件块数量,按照所选取的轻载服务器需要迁入的文件块数量将第一个重载服务器上需要迁出的文件块分为数份,所分的份数与所选取的轻载服务器的数量一致,依次将第一个重载服务器上每一份文件块中在第一个轻载服务器没有副本存在的文件块迁移到第一个轻载服务器,每执行一次迁移后对按照步骤(5)对轻载服务器进行降序排序,将所有迁移过程执行完后重新循环进行步骤(4)及后续步骤直至负载均衡完成。
2. 根据权利要求1所述的应用于分布式海量存储系统的负载均衡方法,其特征 在于,步骤(6)所述的将第一个重载服务器上需要迁出的且在第一个轻载 服务器没有副本存在的文件块迁移到将第一个轻载服务器的具体方法为将 第一个重载服务器上所有需要迁出的文件块的标识信息中的所有文件块存 储服务器的识别标记形成一个文件块存储服务器集合,对第一个轻载服务器 是否属于该文件块存储服务器集合加以判定,如果第一个轻载服务器不属于 该文件块存储服务器集合,则将第一个重载服务器上需要迁出的文件块迁移 到第一个轻载服务器中,然后重新循环进行步骤(4)及后续步骤直至负载 均衡完成;如果第一个轻载服务器属于该文件存储服务器集合,则将那些在 第一个轻载服务器有副本存在的文件块去除,将剩余的文件块迁移到第一个 轻载服务器中,然后重新循环进行步骤(4)及后续步骤直至负载均衡完成。
3. 根据权利要求2所述的应用于分布式海量存储系统的负载均衡方法,其特征 在于,步骤(7)所述的将第一个重载服务器上每一份文件块中在第一个轻 载服务器没有副本存在的文件块迁移到第一个轻载服务器的具体方法为将 第一个重载服务器上该份文件块的标识信息中的所有文件块存储服务器的识别标记形成一个文件块存储服务器集合,对第一个轻载服务器是否属于该 文件块存储服务器集合加以判定,如果第一个轻载服务器不属于该文件块存 储服务器集合,则将第一个重载服务器上该份文件块迁移到第一个轻载服务 器中;如果第一个轻载服务器属于该文件存储服务器集合,则将那些在第一 个轻载服务器有副本存在的文件块去除,将剩余的文件块迁移到第一个轻载 服务器中。
全文摘要
本发明提供一种应用于分布式海量存储系统的负载均衡方法,该方法包括设置重载服务器和轻载服务器、对文件块(Chunk)进行标识、对重载服务器和轻载服务器进行标识、将重载服务器和轻载服务器进行降序排序、将第一个重载服务器的相应文件块是否在第一个轻载服务器上有拷贝进行判定、将第一个重载服务器的相应文件块迁移到第一个轻载服务器等步骤进行负载均衡。通过本发明提供的负载均衡算法可以解决在分布式海量存储系统的负载均衡过程中文件块(Chunk)的拷贝迁移到同一个文件块存储服务器(Chunk Server)而导致系统可靠性降低的问题。
文档编号H04L29/08GK101610287SQ20091009990
公开日2009年12月23日 申请日期2009年6月16日 优先权日2009年6月16日
发明者健 吴, 吴朝晖, 尹建伟, 曾文秋, 莹 李, 邓水光 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1