一种数据节点的分配方法及系统的制作方法_3

文档序号:9251020阅读:来源:国知局
点的负载信息,实时的更新用队列的数据节点的数量占当前数据节点总数的比例,进而在 满足预设条件时,根据该比例调整可用队列的数据节点和不可用队列的数据节点,若当前 可用队列中所有的数据节点的负载均大于第一阈值,则说明当前系统的存储需求较高,则 提高可用队列的数据节点的数量占当前数据节点总数的比例;若当前可用队列中所有的数 据节点的负载均小于第二阈值,则说明当前系统的存储需求较低,则降低可用队列的数据 节点的数量占当前数据节点总数的比例;如此调整,能够进一步使数据节点之间的容量均 衡。
[0126] 较佳的,在步骤S103中,所述根据当前可用队列的每一数据节点的负载信息,确 定该可用队列的负载列表和剩余容量列表,根据当前不可用队列的每一数据节点的负载信 息,确定该不可用队列的负载列表,包括:
[0127] 对于每一数据节点,根据该数据节点的负载信息,确定该数据节点的负载和该数 据节点的剩余容量;
[0128] 按照可用队列中数据节点的负载由大到小的顺序,确定该可用队列的负载列表;
[0129] 按照可用队列中数据节点的剩余容量由小到大的顺序,确定该可用队列的剩余容 量列表;
[0130] 按照不可用队列中数据节点的负载由大到小的顺序,确定该不可用队列的负载列 表。
[0131] 较佳的,所述数据节点的负载信息包括:剩余空间容量、CPU总赫兹数、使用CPU总 赫兹数、内存总容量、使用内存量、网络输入输出总带宽以及使用网络输入输出总带宽。
[0132] 较佳的,所述对于每一数据节点,根据该数据节点的负载信息,确定该数据节点的 负载,包括:
[0133] 根据该数据节点的CPU总赫兹数和使用CPU总赫兹数,计算该数据节点的CPU的 使用率;
[0134] 根据该数据节点的总内存量和使用内存量,计算该数据节点的内存使用率;
[0135] 根据该数据节点的网络输入输出总带宽以及使用网络输入输出总带宽,计算该数 据节点的网络输入输出的使用率;
[0136] 将CPU的使用率、内存使用率和网络输入输出的使用率三者之中数值最大的使用 率作为该数据节点的负载。
[0137] 当系统中的数据节点异构时,也就是数据节点之间的CPU、内存、网卡异构,例如,A 主机CPU强劲,内存很少,而B主机CPU很弱,但内存速度很快,容量又大。现有技术中,衡 量一台物理机的负载取决于三个维度(CPU负载,内存负载,输入输出负载),权重因子方式 会根据一个经验值,设定三个维度各一个比例值,三者相加为1,但是,在该数据节点异构的 情况下还是如此按照固定的因子比例,各数据节点显然是没有可比性的。而本发明采用将 CPU的使用率、内存使用率和网络输入输出的使用率三者之中数值最大的使用率作为该数 据节点的负载,权衡因子是一个比例,因此,不会受限于数据节点本身的CPU、内存等性能参 数。
[0138] 较佳的,确定数据节点的剩余容量,包括:
[0139] 根据每一数据节点的剩余空间容量,计算当前所有数据节点的剩余空间总容量;
[0140] 对于每一数据节点,将该数据节点的剩余空间容量与剩余空间总容量的比值作为 该数据节点的剩余容量。
[0141] 较佳的,所述预设条件包括:
[0142] 达到预设周期时;或,在预设的时间段内,接收到的客户端申请数据节点的请求的 次数达到预设值。
[0143] 例如,云存储系统在白天的存储需求较大,所以需要频繁的监测是否需要调整可 用队列和不可用队列,但是在夜间,云存储系统的存储需求较小,此时,只有当接收到的客 户端申请数据节点的请求的次数达到预设值时,才去监测是否需要调整可用队列和不可用 队列。如此,可以有效的节省资源。
[0144] 下面结合流程图和具体实施例对本发明提供的数据节点的分配方法进行详细说 明。
[0145] 实施例一
[0146] 如图2所示,本发明实施例一提供的一种数据分配方法,包括:
[0147] 步骤S201 :接收数据节点上报的心跳信息;
[0148] 步骤S202 :判断数据节点是否属于可用队列;若是,则继续步骤S203 ;若否,则继 续步骤S204 ;
[0149] 步骤S203 :更新可用队列中该数据节点的负载信息;并继续步骤S207 ;
[0150] 步骤S204 :判断数据节点是否属于不可用队列;若否,则继续步骤S205 ;若是,则 继续步骤S206 ;
[0151] 步骤S205 :将该数据节点加入可用队列,并更新该数据节点的负载信息;并继续 步骤S207 ;
[0152] 步骤S206 :更新不可用队列中该数据节点的负载信息;并继续步骤S207 ;
[0153] 步骤S207 :当接收到客户端发送的申请数据节点的请求时,在当前可用队列中分 配数据节点;
[0154] 步骤S208 :判断是否达到预设周期或接收到的客户端申请数据节点的请求的次 数达到预设值;若是,则继续步骤S209 ;若否,则继续步骤S207 ;
[0155] 步骤S209 :确定可用队列的负载列表和剩余容量列表,以及不可用队列的负载列 表;
[0156] 步骤S210 :判断可用队列负载最大的数据节点的负载是否大于不可用队列的负 载最小的数据节点的负载;若是,则继续步骤S211 ;若否,则继续步骤S207 ;
[0157] 步骤S211 :交换可用队列的剩余容量最小的数据节点和不可用队列的负载最小 的数据节点;即将可用队列中剩余容量最小的数据节点移入不可用队列,将不可用队列中 负载最小的数据节点移入可用队列;例如,该步骤的伪代码如下:
[0158]
[0159] 当然在步骤S211之后,系统会继续步骤S208以循环。
[0160] 其中,在步骤S201中,数据节点上报的心跳信息包括该数据节点的负载信息,包 括:
[0161] StructSDNLoadInfo{
[0162] TotalCapacity;// 空间总容量
[0163] RemainCapacity;// 剩余空间容量
[0164] TotalCpuHz ;//cpu总赫兹数
[0165] UsedCpuHz;// 使用cpu总赫兹数
[0166] TotalMemory;//总内存量
[0167] UsedMemory;//使用内存量
[0168] TotalIoBand;//网络输入输出总带宽
[0169] UsedIoBand;//使用网络输入输出带宽
[0170] };
[0171] 在步骤S209中,确定可用队列的负载列表和剩余容量列表,以及不可用队列的负 载列表,具体包括:
[0172] 对于每一数据节点,确定该数据节点的负载,包括:
[0173] 根据该数据节点的CPU总赫兹数和使用CPU总赫兹数,计算该数据节点的CPU的 使用率,例如计算方式如下:
[0174] CpuPercenti=UsedCpuHZi/TotalCpuHZi,
[0175] 其中,TotalCpuHzi为第i个数据节点的总赫兹数,UsedCpuHzi为该数据节点的使 用CPU总赫兹数,CpuPercenti为该数据节点的CPU的使用率;
[0176] 根据该数据节点的总内存量和使用内存量,计算该数据节点的内存使用率,例如 计算方式如下:
[0177] MemoryPercenti=UsedMemoryiAotalMemoryi,
[0178] 其中,TotalMemoryi为第i个数据节点的总内存量,UsedMemoryi为该数据节点的 使用内存量,MemoryPercenti为该数据节点的内存使用率;
[0179] 根据该数据节点的网络输入输出总带宽以及使用网络输入输出总带宽,计算该数 据节点的网络输入输出的使用率,例如计算方式如下:
[0180] IOPercenti=UsedIoBandiAotal IoBandi,
[0181] 其中,TotalIoBandi为第i个数据节点的网络输入输出总带宽,UsedIoBandi为 该数据节点的使用网络输入输出总带宽,IOPercenti为该数据节点的网络输入输出的使用 率;
[0182] 将CPU的使用率、内存使用率和网络输入输出的使用率三者之中数值最大的使用 率作为该数据节点的负载,例如计算方式如下:
[0183] DNLoadPercenti=MAX (CpuPercenti, MemoryPercenti, IOPercenti),
[0184] 其中,DNLordPercenti为该第i个数据节点的负载;
[0185] 以及,计算每一数据节点的剩余容量,包括:
[0186] 根据每一数据节点的剩余空间容量,计算当前所有数据节点的剩余空间总容量;
[0187] 对于每一数据节点,将该数据节点的剩余空间容量与剩余空间总容量的比值作为 该数据节点的剩余容量,例如:
[0189]其中,RemainCapacityi为第i个数据节点的剩余空间容量, RemainCapacityPercenti为该数据节点的剩余容量。
[0190] 根据每一数据节点的负载和剩余容量,确定可用队列的负载列表和剩余容量列 表,以及不可用队列的负载列表,包括:
[0191] 按照可用队列中数据节点的负载由大到小的顺序,确定该可用队列的负载列表;
[0192] 按照可用队列中数据节点的剩余容量由小到大的顺序,确定该可用队列的剩余容 量列表;
[0193] 按照不可用队列中数据节点的负载由大到小的顺序,确定该不可用队列的负载列 表。
[0194] 当然,在步骤S207中,当接收到客户端发送的申请数据节点的请求时,在当前可 用队中分配数据节点,这一步骤是随时都可以执行的。同时,在可用队列中分配数据节点, 可以采用节点轮训的方式。当采用节点轮训的方式时,相比以负载最轻的N个节点算法 (TopN)的方式,可以使可用队列的数据节点的负载更加均衡。
[0195] 实施例二
[0196] 如图3所示,本发明实施例二提供的一种数据节点的分配方法,包括:
[0197] 步骤S301 :接收数据节点上报的心跳信息;
[0198] 步骤S302 :判断数据节点是否属于可用队列;若是,则继续步骤S303 ;若否,则继 续步骤S304 ;
[0199] 步骤S303 :更新可用队列中该数据节点的负载信息;并继续步骤S307 ;
[0200] 步骤S304 :判断数据节点是否属于不可用队列;若否,则继续步骤S305 ;若是,则 继续步骤S306 ;
[0201] 步骤S305 :将该数据节点加入可用队列,并更新该数据节点的负载信息;并继续 步骤S207 ;
[0202] 步骤S306 :更新不可用队列中该数据节点的负载信息;并继续步骤S207 ;
[0203] 步骤S307 :根据当前可用队列的每一数据节点的负载信息和不可用队列的每一 数据节点的负载信息,更新可用队列的数据节点的数据占当前数据节点总数的比例;
[0204] 步骤S308 :判断是否达到预设周期或接收到的客户端申请数据节点的请求的次 数达到预设值;若是,则继续步骤S309 ;若否,则继续步骤S307 ;
[0205] 步骤S309 :判断可用队列的数据节点的数据占当前数据节点总数的比例是否有 变化;若有,继续步骤S310 ;若否,则继续步骤S311 ;
[0206] 步骤S310 :调整可用队列的数据节点和不可用队列的数据节点;
[0207] 步骤S311 :
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1