CN104967638A - 一种数据节点的分配方法及系统 - Google Patents

一种数据节点的分配方法及系统 Download PDF

Info

Publication number
CN104967638A
CN104967638A CN201410362891.5A CN201410362891A CN104967638A CN 104967638 A CN104967638 A CN 104967638A CN 201410362891 A CN201410362891 A CN 201410362891A CN 104967638 A CN104967638 A CN 104967638A
Authority
CN
China
Prior art keywords
back end
queue
load
available queue
unavailable
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201410362891.5A
Other languages
English (en)
Other versions
CN104967638B (zh
Inventor
翁健
许焰
周明伟
王亮
舒添翼
陈伟
张兴明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang Dahua Technology Co Ltd
Original Assignee
Zhejiang Dahua Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhejiang Dahua Technology Co Ltd filed Critical Zhejiang Dahua Technology Co Ltd
Priority to CN201410362891.5A priority Critical patent/CN104967638B/zh
Publication of CN104967638A publication Critical patent/CN104967638A/zh
Application granted granted Critical
Publication of CN104967638B publication Critical patent/CN104967638B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)
  • Computer And Data Communications (AREA)

Abstract

本发明公开了一种数据节点的分配方法及系统,用以在云存储系统中进行数据节点分配时,实现快速的达到容量均衡。本发明提供的一种数据节点的分配方法,包括:接收至少一个数据节点上报的心跳信息;根据每一数据节点的心跳信息,更新预先建立的可用队列的数据节点的负载信息和不可用队列的数据节点的负载信息;当满足预设条件时,确定该可用队列的负载列表和剩余容量列表和不可用队列的负载列表;当可用队列的最大负载大于不可用队列的最小负载时,将可用队列中剩余容量最小的数据节点移入不可用队列,将不可用队列中负载最小的数据节点移入可用队列;当接收到客户端发送的申请数据节点的请求时,在当前可用队列中为该客户端分配数据节点。

Description

一种数据节点的分配方法及系统
技术领域
本发明涉及云存储技术领域,尤其涉及一种数据节点的分配方法及系统。
背景技术
分布式存储系统作为一种商业系统,核心是管理海量存储资源,提供高速、稳定、线性扩展的服务。分布式存储系统常用的负载分配方法主要是节点信息权重法,节点信息权重法的实现流程如下:
通过实时采集各个数据节点的负载信息(中央处理器CPU负载,内存负载,网络输入输出负载),通过一定的权重算法,例如:负载load=x*A+y*B+z*C,其中A为CPU的当前负载,B为当前内存的当前负载,C为当前网络输入输出的当前负载,x、y和z为权重因子,且x+y+z=1;通过该计算方式计算出各个数据节点的负载信息,选出负载最轻的多个数据节点分配出去。
目前,节点信息权重法被作为分布式存储系统中的一种主流的动态负载分配方式,但该方法也存在一些不足:
分配方式取决于节点负载,对于新加入的数据节点,瞬间会被压到高负载,在后面的所有时间,后加入的节点和先加入的节点是一致对待的,而先加入的节点已经被使用一段时间,已经占有一定的磁盘容量,后面加入的节点和原有节点一致对待,导致先加入的节点容量始终大于后加入的节点的容量,因此容量一直是不均衡的,这对于需要快速达到容量均衡的分布式存储系统来说是不能接受的。
因此,现有技术中,如何快速协调数据节点的容量和负载一直是分布式存储系统的设计难点。
发明内容
本发明实施例提供了数据节点的分配方法,用以在云存储系统中进行数据节点分配时,实现快速的达到容量均衡。
本发明实施例提供的一种数据节点的分配方法,包括:
接收至少一个数据节点上报的心跳信息,其中每一数据节点的心跳信息包括该数据节点的标识信息和负载信息;
根据每一数据节点的心跳信息,更新预先建立的可用队列的数据节点的负载信息和不可用队列的数据节点的负载信息;
当满足预设条件时,根据当前可用队列的每一数据节点的负载信息,确定该可用队列的负载列表和剩余容量列表;根据当前不可用队列的每一数据节点的负载信息,确定该不可用队列的负载列表;
当可用队列中负载最大的数据节点的负载大于不可用队列中负载最小的数据节点的负载时,将可用队列中剩余容量最小的数据节点移入不可用队列,将不可用队列中负载最小的数据节点移入可用队列;
当接收到客户端发送的申请数据节点的请求时,在当前可用队列中为该客户端分配数据节点。
需要说明的是,当接收到客户端发送的申请数据节点的请求时,在当前可用队列中为该客户端分配数据节点,是指元数据中心接收到客户端发送的申请数据节点的请求时,就在当前的可用队列中为该客户端分配数据节点。该过程是随时都可能发生的,不受上述步骤的顺序的限制。
采用本发明实施例提供的上述方法,采用预先建立的可用队列和不可用队列,有利于数据节点的平滑分配,提供更为稳定的吞吐量,再将可用队列中剩余容量最小的数据节点移入不可用队列,将不可用队列中负载最小的数据节点移入可用队列,从而能够实现快速的达到容量均衡。
较佳的,所述根据每一数据节点的心跳信息,更新预先建立的可用队列的数据节点的负载信息和不可用队列的数据节点的负载信息,包括:
根据每一数据节点的标识信息,判断该数据节点是否属于预先建立的可用队列;
若该数据节点不属于可用队列,则判断该数据节点是否属于预先建立的不可用队列;
若该数据节点属于可用队列,则根据该数据节点的负载信息更新可用队列中该数据节点的负载信息;
若该数据节点不属于可用队列也不属于不可用队列,则将该数据节点加入可用队列中,并更新可用队列中该数据节点的负载信息;
若该数据节点属于不可用队列,则根据该数据节点的负载信息更新不可用队列中该数据节点的负载信息。
在本发明中,当接收到一个新的数据节点的心跳信息时,由于该数据节点是新上线的,因此将该数据节点默认为低负荷,而将其加入可用队列。
较佳的,
在更新预先建立可用队列的数据节点的负载信息和不可用队列的数据节点的负载信息之后,该方法还包括:
根据当前可用队列的每一数据节点的负载信息和不可用队列的每一数据节点的负载信息,更新可用队列的数据节点的数量占当前数据节点总数的比例;
所述当满足预设条件时,根据当前可用队列的每一数据节点的负载信息,确定该可用队列的负载列表和剩余容量列表;根据当前不可用队列的每一数据节点的负载信息,确定该不可用队列的负载列表,包括:
当满足预设条件时,判断可用队列的数据节点的数量占当前数据节点总数的比例是否有变化,如果是,则根据当前可用队列的数据节点的数量占当前数据节点总数的比例,调整可用队列的数据节点和不可用队列的数据节点;否则,保持可用队列的数据节点和不可用队列的数据节点不变;
根据当前可用队列的每一数据节点的负载信息,确定该可用队列的负载列表和剩余容量列表;根据当前不可用队列的每一数据节点的负载信息,确定该不可用队列的负载列表。
较佳的,所述根据当前可用队列的每一数据节点的负载信息和不可用队列的每一数据节点的负载信息,更新可用队列的数据节点的数量占当前数据节点总数的比例,包括:
对于每一数据节点,根据该数据节点的负载信息,确定该数据节点的负载;
若可用队列中所有的数据节点的负载均大于第一阈值,则提高可用队列的数据节点的数量占当前数据节点总数的比例;
若可用队列中所有的数据节点的负载均小于第二阈值,则降低可用队列的数据节点的数量占当前数据节点总数的比例。
通过根据当前可用队列的每一数据节点的负载信息和不可用队列的每一数据节点的负载信息,实时的更新用队列的数据节点的数量占当前数据节点总数的比例,进而在满足预设条件时,根据该比例调整可用队列的数据节点和不可用队列的数据节点,若当前可用队列中所有的数据节点的负载均大于第一阈值,则说明当前系统的存储需求较高,则提高可用队列的数据节点的数量占当前数据节点总数的比例;若当前可用队列中所有的数据节点的负载均小于第二阈值,则说明当前系统的存储需求较低,则降低可用队列的数据节点的数量占当前数据节点总数的比例;如此调整,能够进一步使数据节点之间的容量均衡。
较佳的,所述根据当前可用队列的每一数据节点的负载信息,确定该可用队列的负载列表和剩余容量列表,根据当前不可用队列的每一数据节点的负载信息,确定该不可用队列的负载列表,包括:
对于每一数据节点,根据该数据节点的负载信息,确定该数据节点的负载和该数据节点的剩余容量;
按照可用队列中数据节点的负载由大到小的顺序,确定该可用队列的负载列表;
按照可用队列中数据节点的剩余容量由小到大的顺序,确定该可用队列的剩余容量列表;
按照不可用队列中数据节点的负载由大到小的顺序,确定该不可用队列的负载列表。
较佳的,所述数据节点的负载信息包括:剩余空间容量、CPU总赫兹数、使用CPU总赫兹数、内存总容量、使用内存量、网络输入输出总带宽以及使用网络输入输出总带宽。
较佳的,所述对于每一数据节点,根据该数据节点的负载信息,确定该数据节点的负载,包括:
根据该数据节点的CPU总赫兹数和使用CPU总赫兹数,计算该数据节点的CPU的使用率;
根据该数据节点的总内存量和使用内存量,计算该数据节点的内存使用率;
根据该数据节点的网络输入输出总带宽以及使用网络输入输出总带宽,计算该数据节点的网络输入输出的使用率;
将CPU的使用率、内存使用率和网络输入输出的使用率三者之中数值最大的使用率作为该数据节点的负载。
当系统中的数据节点异构时,也就是数据节点之间的CPU、内存、网卡异构,例如,A主机CPU强劲,内存很少,而B主机CPU很弱,但内存速度很快,容量又大。现有技术中,衡量一台物理机的负载取决于三个维度(CPU负载,内存负载,输入输出负载),权重因子方式会根据一个经验值,设定三个维度各一个比例值,三者相加为1,但是,在该数据节点异构的情况下还是如此按照固定的因子比例,各数据节点显然是没有可比性的。而本发明采用将CPU的使用率、内存使用率和网络输入输出的使用率三者之中数值最大的使用率作为该数据节点的负载,权衡因子是一个比例,因此,不会受限于数据节点本身的CPU、内存等性能参数。
较佳的,确定数据节点的剩余容量,包括:
根据每一数据节点的剩余空间容量,计算当前所有数据节点的剩余空间总容量;
对于每一数据节点,将该数据节点的剩余空间容量与剩余空间总容量的比值作为该数据节点的剩余容量。
较佳的,所述预设条件包括:
达到预设周期时;或,在预设的时间段内,接收到的客户端申请数据节点的请求的次数达到预设值。
例如,云存储系统在白天的存储需求较大,所以需要频繁的监测是否需要调整可用队列和不可用队列,但是在夜间,云存储系统的存储需求较小,此时,只有当接收到的客户端申请数据节点的请求的次数达到预设值时,才去监测是否需要调整可用队列和不可用队列。如此,可以有效的节省资源。
本发明实施例提供的一种数据节点的分配系统,包括:
接收模块,用于接收至少一个数据节点上报的心跳信息,其中每一数据节点的心跳信息包括该数据节点的标识信息和负载信息;
负载信息更新模块,用于根据每一数据节点的心跳信息,更新预先建立的可用队列的数据节点的负载信息和不可用队列的数据节点的负载信息;
负载确定模块,用于当满足预设条件时,根据当前可用队列的每一数据节点的负载信息,确定该可用队列的负载列表和剩余容量列表;根据当前不可用队列的每一数据节点的负载信息,确定该不可用队列的负载列表;
交互模块,用于当可用队列中负载最大的数据节点的负载大于不可用队列中负载最小的数据节点的负载时,将可用队列中剩余容量最小的数据节点移入不可用队列,将不可用队列中负载最小的数据节点移入可用队列;
分配模块,用于当接收到客户端发送的申请数据节点的请求时,在当前可用队列中为该客户端分配数据节点。
需要说明的是,当接收到客户端发送的申请数据节点的请求时,在当前可用队列中为该客户端分配数据节点,是指元数据中心接收到客户端发送的申请数据节点的请求时,就在当前的可用队列中为该客户端分配数据节点。该过程是随时都可能发生的,不受上述步骤的顺序的限制。
采用本发明实施例提供的上述系统,预先建立的可用队列和不可用队列,有利于数据节点的平滑分配,提供更为稳定的吞吐量,再将可用队列中剩余容量最小的数据节点移入不可用队列,将不可用队列中负载最小的数据节点移入可用队列,从而能够实现更快的达到容量均衡。
较佳的,所述负载信息更新模块,具体用于:
根据每一数据节点的标识信息,判断该数据节点是否属于预先建立的可用队列;
若该数据节点不属于可用队列,则判断该数据节点是否属于预先建立的不可用队列;
若该数据节点属于可用队列,则根据该数据节点的负载信息更新可用队列中该数据节点的负载信息;
若该数据节点不属于可用队列也不属于不可用队列,则将该数据节点加入可用队列中,并更新可用队列中该数据节点的负载信息;
若该数据节点属于不可用队列,则根据该数据节点的负载信息更新不可用队列中该数据节点的负载信息。
在本发明中,当接收到一个新的数据节点的心跳信息时,由于该数据节点是新上线的,因此将该数据节点默认为低负荷,而将其加入可用队列。
较佳的,该系统还包括双队列占比更新模块,用于:根据当前可用队列的每一数据节点的负载信息和不可用队列的每一数据节点的负载信息,更新可用队列的数据节点的数量占当前数据节点总数的比例;
当满足预设条件时,所述负载确定模块具体用于:
判断可用队列的数据节点的数量占当前数据节点总数的比例是否有变化,如果是,则根据当前可用队列的数据节点的数量占当前数据节点总数的比例,调整可用队列的数据节点和不可用队列的数据节点;否则,保持可用队列的数据节点和不可用队列的数据节点不变;
根据当前可用队列的每一数据节点的负载信息,确定该可用队列的负载列表和剩余容量列表;根据当前不可用队列的每一数据节点的负载信息,确定该不可用队列的负载列表。
较佳的,所述双队列占比更新模块,具体用于:
对于每一数据节点,根据该数据节点的负载信息,确定该数据节点的负载;
若可用队列中所有的数据节点的负载均大于第一阈值,则提高可用队列的数据节点的数量占当前数据节点总数的比例;
若可用队列中所有的数据节点的负载均小于第二阈值,则降低可用队列的数据节点的数量占当前数据节点总数的比例。
通过根据当前可用队列的每一数据节点的负载信息和不可用队列的每一数据节点的负载信息,实时的更新用队列的数据节点的数量占当前数据节点总数的比例,进而在满足预设条件时,根据该比例调整可用队列的数据节点和不可用队列的数据节点,若当前可用队列中所有的数据节点的负载均大于第一阈值,则说明当前系统的存储需求较高,则提高可用队列的数据节点的数量占当前数据节点总数的比例;若当前可用队列中所有的数据节点的负载均小于第二阈值,则说明当前系统的存储需求较低,则降低可用队列的数据节点的数量占当前数据节点总数的比例;如此调整,能够进一步使数据节点之间的容量均衡。
较佳的,所述负载确定模块在根据当前可用队列的每一数据节点的负载信息,确定该可用队列的负载列表和剩余容量列表,根据当前不可用队列的每一数据节点的负载信息,确定该不可用队列的负载列表时,具体用于:
对于每一数据节点,根据该数据节点的负载信息,确定该数据节点的负载和该数据节点的剩余容量;
按照可用队列中数据节点的负载由大到小的顺序,确定该可用队列的负载列表;
按照可用队列中数据节点的剩余容量由小到大的顺序,确定该可用队列的剩余容量列表;
按照不可用队列中数据节点的负载由大到小的顺序,确定该不可用队列的负载列表。
较佳的,所述数据节点的负载信息包括:剩余空间容量、CPU总赫兹数、使用CPU总赫兹数、内存总容量、使用内存量、网络输入输出总带宽以及使用网络输入输出总带宽。
较佳的,对于每一数据节点,所述负载确定模块或双队列占比更新模块在根据该数据节点的负载信息,确定该数据节点的负载时,具体用于:
根据该数据节点的CPU总赫兹数和使用CPU总赫兹数,计算该数据节点的CPU的使用率;
根据该数据节点的总内存量和使用内存量,计算该数据节点的内存使用率;
根据该数据节点的网络输入输出总带宽以及使用网络输入输出总带宽,计算该数据节点的网络输入输出的使用率;
将CPU的使用率、内存使用率和网络输入输出的使用率三者之中数值最大的使用率作为该数据节点的负载。
当系统中的数据节点异构时,也就是数据节点之间的CPU、内存、网卡异构,例如,A主机CPU强劲,内存很少,而B主机CPU很弱,但内存速度很快,容量又大。现有技术中,衡量一台物理机的负载取决于三个维度(CPU负载,内存负载,输入输出负载),权重因子方式会根据一个经验值,设定三个维度各一个比例值,三者相加为1,但是,在该数据节点异构的情况下还是如此按照固定的因子比例,各数据节点显然是没有可比性的。而本发明采用将CPU的使用率、内存使用率和网络输入输出的使用率三者之中数值最大的使用率作为该数据节点的负载,权衡因子是一个比例,因此,不会受限于数据节点本身的CPU、内存等性能参数。
较佳的,所述负载确定模块在确定数据节点的剩余容量时,具体用于:
根据每一数据节点的剩余空间容量,计算当前所有数据节点的剩余空间总容量;
对于每一数据节点,将该数据节点的剩余空间容量与剩余空间总容量的比值作为该数据节点的剩余容量。
较佳的,所述预设条件包括:
达到预设周期时;或,在预设的时间段内,接收到的客户端申请数据节点的请求的次数达到预设值。
例如,云存储系统在白天的存储需求较大,所以需要频繁的监测是否需要调整可用队列和不可用队列,但是在夜间,云存储系统的存储需求较小,此时,只有当接收到的客户端申请数据节点的请求的次数达到预设值时,才去监测是否需要调整可用队列和不可用队列。如此,可以有效的节省资源。
附图说明
图1为本发明实施例提供的一种数据节点的分配方法的流程示意图;
图2为本发明实施例一提供的一种数据节点的分配方法的流程示意图;
图3为本发明实施例二提供的一种数据节点分配方法的流程示意图;
图4为本发明实施例提供的一种数据节点的分配系统的结构示意图。
具体实施方式
本发明实施例提供了数据节点的分配方法,用以在云存储系统中进行数据节点分配时,实现快速的达到容量均衡。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明实施例提供的一种数据节点的分配方法,包括:
步骤S101:接收至少一个数据节点上报的心跳信息,其中每一数据节点的心跳信息包括该数据节点的标识信息和负载信息;
步骤S102:根据每一数据节点的心跳信息,更新预先建立的可用队列的数据节点的负载信息和不可用队列的数据节点的负载信息;
步骤S103:当满足预设条件时,根据当前可用队列的每一数据节点的负载信息,确定该可用队列的负载列表和剩余容量列表;根据当前不可用队列的每一数据节点的负载信息,确定该不可用队列的负载列表;
步骤S104:当可用队列中负载最大的数据节点的负载大于不可用队列中负载最小的数据节点的负载时,将可用队列中剩余容量最小的数据节点移入不可用队列,将不可用队列中负载最小的数据节点移入可用队列;
步骤S105:当接收到客户端发送的申请数据节点的请求时,在当前可用队列中为该客户端分配数据节点。
需要说明的是,对于步骤S105,当接收到客户端发送的申请数据节点的请求时,在当前可用队列中为该客户端分配数据节点,是指元数据中心接收到客户端发送的申请数据节点的请求时,就在当前的可用队列中为该客户端分配数据节点。也就是说,该步骤S105是随时都可能发生的,不受上述步骤的顺序的限制。
采用本发明实施例提供的上述方法,预先建立的可用队列和不可用队列,有利于数据节点的平滑分配,提供更为稳定的吞吐量,再将可用队列中剩余容量最小的数据节点移入不可用队列,将不可用队列中负载最小的数据节点移入可用队列,从而能够实现更快的达到容量均衡。
较佳的,在步骤S102中,根据每一数据节点的心跳信息,更新预先建立的可用队列的数据节点的负载信息和不可用队列的数据节点的负载信息,包括:
根据每一数据节点的标识信息,判断该数据节点是否属于预先建立的可用队列;
若该数据节点不属于可用队列,则判断该数据节点是否属于预先建立的不可用队列;
若该数据节点属于可用队列,则根据该数据节点的负载信息更新可用队列中该数据节点的负载信息;
若该数据节点不属于可用队列也不属于不可用队列,则将该数据节点加入可用队列中,并更新可用队列中该数据节点的负载信息;
若该数据节点属于不可用队列,则根据该数据节点的负载信息更新不可用队列中该数据节点的负载信息。
在具体实施过程中,云存储系统的元数据中心是实时采集各个上线的数据节点的心跳信息的,通过数据节点周期性上报其心跳信息,比如上报周期可以是3s;当元数据中心接收到一个新的数据节点的心跳信息时,由于该数据节点是新上线的,因此将该数据节点默认为低负荷,而将其加入可用队列。
较佳的,
在更新预先建立可用队列的数据节点的负载信息和不可用队列的数据节点的负载信息之后,该方法还包括:
根据当前可用队列的每一数据节点的负载信息和不可用队列的每一数据节点的负载信息,更新可用队列的数据节点的数量占当前数据节点总数的比例;
所述当满足预设条件时,根据当前可用队列的每一数据节点的负载信息,确定该可用队列的负载列表和剩余容量列表;根据当前不可用队列的每一数据节点的负载信息,确定该不可用队列的负载列表,包括:
当满足预设条件时,判断可用队列的数据节点的数量占当前数据节点总数的比例是否有变化,如果是,则根据当前可用队列的数据节点的数量占当前数据节点总数的比例,调整可用队列的数据节点和不可用队列的数据节点;否则,保持可用队列的数据节点和不可用队列的数据节点不变;
根据当前可用队列的每一数据节点的负载信息,确定该可用队列的负载列表和剩余容量列表;根据当前不可用队列的每一数据节点的负载信息,确定该不可用队列的负载列表。
较佳的,所述根据当前可用队列的每一数据节点的负载信息和不可用队列的每一数据节点的负载信息,更新可用队列的数据节点的数量占当前数据节点总数的比例,包括:
对于每一数据节点,根据该数据节点的负载信息,确定该数据节点的负载;
若可用队列中所有的数据节点的负载均大于第一阈值,则提高可用队列的数据节点的数量占当前数据节点总数的比例;
若可用队列中所有的数据节点的负载均小于第二阈值,则降低可用队列的数据节点的数量占当前数据节点总数的比例。
通过根据当前可用队列的每一数据节点的负载信息和不可用队列的每一数据节点的负载信息,实时的更新用队列的数据节点的数量占当前数据节点总数的比例,进而在满足预设条件时,根据该比例调整可用队列的数据节点和不可用队列的数据节点,若当前可用队列中所有的数据节点的负载均大于第一阈值,则说明当前系统的存储需求较高,则提高可用队列的数据节点的数量占当前数据节点总数的比例;若当前可用队列中所有的数据节点的负载均小于第二阈值,则说明当前系统的存储需求较低,则降低可用队列的数据节点的数量占当前数据节点总数的比例;如此调整,能够进一步使数据节点之间的容量均衡。
较佳的,在步骤S103中,所述根据当前可用队列的每一数据节点的负载信息,确定该可用队列的负载列表和剩余容量列表,根据当前不可用队列的每一数据节点的负载信息,确定该不可用队列的负载列表,包括:
对于每一数据节点,根据该数据节点的负载信息,确定该数据节点的负载和该数据节点的剩余容量;
按照可用队列中数据节点的负载由大到小的顺序,确定该可用队列的负载列表;
按照可用队列中数据节点的剩余容量由小到大的顺序,确定该可用队列的剩余容量列表;
按照不可用队列中数据节点的负载由大到小的顺序,确定该不可用队列的负载列表。
较佳的,所述数据节点的负载信息包括:剩余空间容量、CPU总赫兹数、使用CPU总赫兹数、内存总容量、使用内存量、网络输入输出总带宽以及使用网络输入输出总带宽。
较佳的,所述对于每一数据节点,根据该数据节点的负载信息,确定该数据节点的负载,包括:
根据该数据节点的CPU总赫兹数和使用CPU总赫兹数,计算该数据节点的CPU的使用率;
根据该数据节点的总内存量和使用内存量,计算该数据节点的内存使用率;
根据该数据节点的网络输入输出总带宽以及使用网络输入输出总带宽,计算该数据节点的网络输入输出的使用率;
将CPU的使用率、内存使用率和网络输入输出的使用率三者之中数值最大的使用率作为该数据节点的负载。
当系统中的数据节点异构时,也就是数据节点之间的CPU、内存、网卡异构,例如,A主机CPU强劲,内存很少,而B主机CPU很弱,但内存速度很快,容量又大。现有技术中,衡量一台物理机的负载取决于三个维度(CPU负载,内存负载,输入输出负载),权重因子方式会根据一个经验值,设定三个维度各一个比例值,三者相加为1,但是,在该数据节点异构的情况下还是如此按照固定的因子比例,各数据节点显然是没有可比性的。而本发明采用将CPU的使用率、内存使用率和网络输入输出的使用率三者之中数值最大的使用率作为该数据节点的负载,权衡因子是一个比例,因此,不会受限于数据节点本身的CPU、内存等性能参数。
较佳的,确定数据节点的剩余容量,包括:
根据每一数据节点的剩余空间容量,计算当前所有数据节点的剩余空间总容量;
对于每一数据节点,将该数据节点的剩余空间容量与剩余空间总容量的比值作为该数据节点的剩余容量。
较佳的,所述预设条件包括:
达到预设周期时;或,在预设的时间段内,接收到的客户端申请数据节点的请求的次数达到预设值。
例如,云存储系统在白天的存储需求较大,所以需要频繁的监测是否需要调整可用队列和不可用队列,但是在夜间,云存储系统的存储需求较小,此时,只有当接收到的客户端申请数据节点的请求的次数达到预设值时,才去监测是否需要调整可用队列和不可用队列。如此,可以有效的节省资源。
下面结合流程图和具体实施例对本发明提供的数据节点的分配方法进行详细说明。
实施例一
如图2所示,本发明实施例一提供的一种数据分配方法,包括:
步骤S201:接收数据节点上报的心跳信息;
步骤S202:判断数据节点是否属于可用队列;若是,则继续步骤S203;若否,则继续步骤S204;
步骤S203:更新可用队列中该数据节点的负载信息;并继续步骤S207;
步骤S204:判断数据节点是否属于不可用队列;若否,则继续步骤S205;若是,则继续步骤S206;
步骤S205:将该数据节点加入可用队列,并更新该数据节点的负载信息;并继续步骤S207;
步骤S206:更新不可用队列中该数据节点的负载信息;并继续步骤S207;
步骤S207:当接收到客户端发送的申请数据节点的请求时,在当前可用队列中分配数据节点;
步骤S208:判断是否达到预设周期或接收到的客户端申请数据节点的请求的次数达到预设值;若是,则继续步骤S209;若否,则继续步骤S207;
步骤S209:确定可用队列的负载列表和剩余容量列表,以及不可用队列的负载列表;
步骤S210:判断可用队列负载最大的数据节点的负载是否大于不可用队列的负载最小的数据节点的负载;若是,则继续步骤S211;若否,则继续步骤S207;
步骤S211:交换可用队列的剩余容量最小的数据节点和不可用队列的负载最小的数据节点;即将可用队列中剩余容量最小的数据节点移入不可用队列,将不可用队列中负载最小的数据节点移入可用队列;例如,该步骤的伪代码如下:
当然在步骤S211之后,系统会继续步骤S208以循环。
其中,在步骤S201中,数据节点上报的心跳信息包括该数据节点的负载信息,包括:
Struct SDNLoadInfo{
TotalCapacity;//空间总容量
RemainCapacity;//剩余空间容量
TotalCpuHz;//cpu总赫兹数
UsedCpuHz;//使用cpu总赫兹数
TotalMemory;//总内存量
UsedMemory;//使用内存量
TotalIoBand;//网络输入输出总带宽
UsedIoBand;//使用网络输入输出带宽
};
在步骤S209中,确定可用队列的负载列表和剩余容量列表,以及不可用队列的负载列表,具体包括:
对于每一数据节点,确定该数据节点的负载,包括:
根据该数据节点的CPU总赫兹数和使用CPU总赫兹数,计算该数据节点的CPU的使用率,例如计算方式如下:
CpuPercenti=UsedCpuHzi/TotalCpuHzi
其中,TotalCpuHzi为第i个数据节点的总赫兹数,UsedCpuHzi为该数据节点的使用CPU总赫兹数,CpuPercenti为该数据节点的CPU的使用率;
根据该数据节点的总内存量和使用内存量,计算该数据节点的内存使用率,例如计算方式如下:
MemoryPercenti=UsedMemoryi/TotalMemoryi
其中,TotalMemoryi为第i个数据节点的总内存量,UsedMemoryi为该数据节点的使用内存量,MemoryPercenti为该数据节点的内存使用率;
根据该数据节点的网络输入输出总带宽以及使用网络输入输出总带宽,计算该数据节点的网络输入输出的使用率,例如计算方式如下:
IOPercenti=UsedIoBandi/TotalIoBandi
其中,TotalIoBandi为第i个数据节点的网络输入输出总带宽,UsedIoBandi为该数据节点的使用网络输入输出总带宽,IOPercenti为该数据节点的网络输入输出的使用率;
将CPU的使用率、内存使用率和网络输入输出的使用率三者之中数值最大的使用率作为该数据节点的负载,例如计算方式如下:
DNLoadPercenti=MAX(CpuPercenti,MemoryPercenti,IOPercenti),
其中,DNLordPercenti为该第i个数据节点的负载;
以及,计算每一数据节点的剩余容量,包括:
根据每一数据节点的剩余空间容量,计算当前所有数据节点的剩余空间总容量;
对于每一数据节点,将该数据节点的剩余空间容量与剩余空间总容量的比值作为该数据节点的剩余容量,例如:
RemainCapacityPercen t i = RemainCapacity i / Σ i = 1 n RemainCapacity ,
其中,RemainCapacityi为第i个数据节点的剩余空间容量,RemainCapacityPercenti为该数据节点的剩余容量。
根据每一数据节点的负载和剩余容量,确定可用队列的负载列表和剩余容量列表,以及不可用队列的负载列表,包括:
按照可用队列中数据节点的负载由大到小的顺序,确定该可用队列的负载列表;
按照可用队列中数据节点的剩余容量由小到大的顺序,确定该可用队列的剩余容量列表;
按照不可用队列中数据节点的负载由大到小的顺序,确定该不可用队列的负载列表。
当然,在步骤S207中,当接收到客户端发送的申请数据节点的请求时,在当前可用队中分配数据节点,这一步骤是随时都可以执行的。同时,在可用队列中分配数据节点,可以采用节点轮训的方式。当采用节点轮训的方式时,相比以负载最轻的N个节点算法(TopN)的方式,可以使可用队列的数据节点的负载更加均衡。
实施例二
如图3所示,本发明实施例二提供的一种数据节点的分配方法,包括:
步骤S301:接收数据节点上报的心跳信息;
步骤S302:判断数据节点是否属于可用队列;若是,则继续步骤S303;若否,则继续步骤S304;
步骤S303:更新可用队列中该数据节点的负载信息;并继续步骤S307;
步骤S304:判断数据节点是否属于不可用队列;若否,则继续步骤S305;若是,则继续步骤S306;
步骤S305:将该数据节点加入可用队列,并更新该数据节点的负载信息;并继续步骤S207;
步骤S306:更新不可用队列中该数据节点的负载信息;并继续步骤S207;
步骤S307:根据当前可用队列的每一数据节点的负载信息和不可用队列的每一数据节点的负载信息,更新可用队列的数据节点的数据占当前数据节点总数的比例;
步骤S308:判断是否达到预设周期或接收到的客户端申请数据节点的请求的次数达到预设值;若是,则继续步骤S309;若否,则继续步骤S307;
步骤S309:判断可用队列的数据节点的数据占当前数据节点总数的比例是否有变化;若有,继续步骤S310;若否,则继续步骤S311;
步骤S310:调整可用队列的数据节点和不可用队列的数据节点;
步骤S311:保存可用队列的数据节点和不可用队列的数据节点不变;
步骤S312:确定可用队列的负载列表和剩余容量列表,以及不可用队列的负载列表;在具体实施过程中,该步骤采用的方法与实施例一中的步骤S209相同;
步骤S313:判断可用队列负载最大的数据节点的负载是否大于不可用队列的负载最小的数据节点的负载;若是,则继续步骤S314;若否,则继续步骤S307;
步骤S314:交换可用队列的剩余容量最小的数据节点和不可用队列的最小负载节点;即将可用队列中剩余容量最小的数据节点移入不可用队列,将不可用队列中负载最小的数据节点移入可用队列;
步骤S315:当接收到客户端发送的申请数据节点的请求时,在当前可用队列中分配数据节点。当然,在该步骤中,当接收到客户端发送的申请数据节点的请求时,在当前可用队中分配数据节点,这一步骤是随时都可以执行的。同时,在可用队列中分配数据节点,可以采用节点轮训的方式。当采用节点轮训的方式时,相比以负载最轻的N个节点算法(TopN)的方式,可以使可用队列的数据节点的负载更加均衡。
其中,在步骤S307中,根据当前可用队列的每一数据节点的负载信息和不可用队列的每一数据节点的负载信息,更新可用队列的数据节点的数据占当前数据节点总数的比例,具体包括:
对于每一数据节点,根据该数据节点的负载信息,确定该数据节点的负载;
若可用队列中所有的数据节点的负载均大于第一阈值,则提高可用队列的数据节点的数量占当前数据节点总数的比例;若可用队列中所有的数据节点的负载均小于第二阈值,则降低可用队列的数据节点的数量占当前数据节点总数的比例。
其中,根据该数据节点的负载信息,确定该数据节点的负载,采用实施例一中步骤S209的方法,在此不再赘述。
具体实施过程中,在系统初始配置时,可用采用马特来法则,即2:8法则,将可用队列的数据节点的数量占数据节点总数的比例设置为80%,则不可用队列的数据节点的数量占数据节点总数的比例设置为20%;当可用队列中所有的数据节点的负载均大于第一阈值,例如可以将第一阈值设置为80%,则此时可以将可用队列的数据节点的数量占数据节点总数的比例提高为90%,以提供更多资源参与分配;当可用队列中所有的数据节点的负载均小于第二阈值,例如,可以讲第二阈值设置为30%,则此时,可以将可用队列的数据节点的数量占数据节点总数的比例降低为60%,以节约资源。
以上对本发明实施例提供的一种数据节点的分配方法进行了详细说明,下面结合附图对本发明实施例提供的数据节点的分配系统进行说明。
如图4所示,本发明实施例提供的一种数据节点的分配系统,包括:
接收模块Z401,用于接收至少一个数据节点上报的心跳信息,其中每一数据节点的心跳信息包括该数据节点的标识信息和负载信息;
负载信息更新模块Z402,用于根据每一数据节点的心跳信息,更新预先建立的可用队列的数据节点的负载信息和不可用队列的数据节点的负载信息;
负载确定模块Z403,用于当满足预设条件时,根据当前可用队列的每一数据节点的负载信息,确定该可用队列的负载列表和剩余容量列表;根据当前不可用队列的每一数据节点的负载信息,确定该不可用队列的负载列表;
交互模块Z404,用于当可用队列中负载最大的数据节点的负载大于不可用队列中负载最小的数据节点的负载时,将可用队列中剩余容量最小的数据节点移入不可用队列,将不可用队列中负载最小的数据节点移入可用队列;
分配模块Z405,用于当接收到客户端发送的申请数据节点的请求时,在当前可用队列中为该客户端分配数据节点。
需要说明的是,当接收到客户端发送的申请数据节点的请求时,在当前可用队列中为该客户端分配数据节点,是指元数据中心接收到客户端发送的申请数据节点的请求时,就在当前的可用队列中为该客户端分配数据节点。该过程是随时都可能发生的,不受上述步骤的顺序的限制。
采用本发明实施例提供的上述系统,采用预先建立的可用队列和不可用队列,有利于数据节点的平滑分配,提供更为稳定的吞吐量,再将可用队列中剩余容量最小的数据节点移入不可用队列,将不可用队列中负载最小的数据节点移入可用队列,从而能够实现更快的达到容量均衡。
较佳的,所述负载信息更新模块Z402,具体用于:
根据每一数据节点的标识信息,判断该数据节点是否属于预先建立的可用队列;
若该数据节点不属于可用队列,则判断该数据节点是否属于预先建立的不可用队列;
若该数据节点属于可用队列,则根据该数据节点的负载信息更新可用队列中该数据节点的负载信息;
若该数据节点不属于可用队列也不属于不可用队列,则将该数据节点加入可用队列中,并更新可用队列中该数据节点的负载信息;
若该数据节点属于不可用队列,则根据该数据节点的负载信息更新不可用队列中该数据节点的负载信息。
在本发明中,当接收到一个新的数据节点的心跳信息时,由于该数据节点是新上线的,因此将该数据节点默认为低负荷,而将其加入可用队列。
较佳的,该系统还包括双队列占比更新模块,用于:根据当前可用队列的每一数据节点的负载信息和不可用队列的每一数据节点的负载信息,更新可用队列的数据节点的数量占当前数据节点总数的比例;
当满足预设条件时,所述负载确定模块具体用于:
判断可用队列的数据节点的数量占当前数据节点总数的比例是否有变化,如果是,则根据当前可用队列的数据节点的数量占当前数据节点总数的比例,调整可用队列的数据节点和不可用队列的数据节点;否则,保持可用队列的数据节点和不可用队列的数据节点不变;
根据当前可用队列的每一数据节点的负载信息,确定该可用队列的负载列表和剩余容量列表;根据当前不可用队列的每一数据节点的负载信息,确定该不可用队列的负载列表。
较佳的,所述双队列占比更新模块,具体用于:
对于每一数据节点,根据该数据节点的负载信息,确定该数据节点的负载;
若可用队列中所有的数据节点的负载均大于第一阈值,则提高可用队列的数据节点的数量占当前数据节点总数的比例;
若可用队列中所有的数据节点的负载均小于第二阈值,则降低可用队列的数据节点的数量占当前数据节点总数的比例。
通过根据当前可用队列的每一数据节点的负载信息和不可用队列的每一数据节点的负载信息,实时的更新用队列的数据节点的数量占当前数据节点总数的比例,进而在满足预设条件时,根据该比例调整可用队列的数据节点和不可用队列的数据节点,若当前可用队列中所有的数据节点的负载均大于第一阈值,则说明当前系统的存储需求较高,则提高可用队列的数据节点的数量占当前数据节点总数的比例;若当前可用队列中所有的数据节点的负载均小于第二阈值,则说明当前系统的存储需求较低,则降低可用队列的数据节点的数量占当前数据节点总数的比例;如此调整,能够进一步使数据节点之间的容量均衡。
较佳的,所述负载确定模块Z403在根据当前可用队列的每一数据节点的负载信息,确定该可用队列的负载列表和剩余容量列表,根据当前不可用队列的每一数据节点的负载信息,确定该不可用队列的负载列表时,具体用于:
对于每一数据节点,根据该数据节点的负载信息,确定该数据节点的负载和该数据节点的剩余容量;
按照可用队列中数据节点的负载由大到小的顺序,确定该可用队列的负载列表;
按照可用队列中数据节点的剩余容量由小到大的顺序,确定该可用队列的剩余容量列表;
按照不可用队列中数据节点的负载由大到小的顺序,确定该不可用队列的负载列表。
较佳的,所述数据节点的负载信息包括:剩余空间容量、CPU总赫兹数、使用CPU总赫兹数、内存总容量、使用内存量、网络输入输出总带宽以及使用网络输入输出总带宽。
较佳的,对于每一数据节点,所述负载确定模块或双队列占比更新模块在根据该数据节点的负载信息,确定该数据节点的负载时,具体用于:
根据该数据节点的CPU总赫兹数和使用CPU总赫兹数,计算该数据节点的CPU的使用率;
根据该数据节点的总内存量和使用内存量,计算该数据节点的内存使用率;
根据该数据节点的网络输入输出总带宽以及使用网络输入输出总带宽,计算该数据节点的网络输入输出的使用率;
将CPU的使用率、内存使用率和网络输入输出的使用率三者之中数值最大的使用率作为该数据节点的负载。
当系统中的数据节点异构时,也就是数据节点之间的CPU、内存、网卡异构,例如,A主机CPU强劲,内存很少,而B主机CPU很弱,但内存速度很快,容量又大。现有技术中,衡量一台物理机的负载取决于三个维度(CPU负载,内存负载,输入输出负载),权重因子方式会根据一个经验值,设定三个维度各一个比例值,三者相加为1,但是,在该数据节点异构的情况下还是如此按照固定的因子比例,各数据节点显然是没有可比性的。而本发明采用将CPU的使用率、内存使用率和网络输入输出的使用率三者之中数值最大的使用率作为该数据节点的负载,权衡因子是一个比例,因此,不会受限于数据节点本身的CPU、内存等性能参数。
较佳的,所述负载确定模块Z403在确定数据节点的剩余容量时,具体用于:
根据每一数据节点的剩余空间容量,计算当前所有数据节点的剩余空间总容量;
对于每一数据节点,将该数据节点的剩余空间容量与剩余空间总容量的比值作为该数据节点的剩余容量。
较佳的,所述预设条件包括:
达到预设周期时;或,在预设的时间段内,接收到的客户端申请数据节点的请求的次数达到预设值。
例如,云存储系统在白天的存储需求较大,所以需要频繁的监测是否需要调整可用队列和不可用队列,但是在夜间,云存储系统的存储需求较小,此时,只有当接收到的客户端申请数据节点的请求的次数达到预设值时,再去监测是否需要调整可用队列和不可用队列。如此,可以有效的节省资源。
较佳的,本发明实施例提供的数据节点的分配系统,例如可以是元数据服务器。
综上所述,本发明实施例提供的数据节点的分配方法及系统,采用预先建立的可用队列和不可用队列,有利于数据节点的平滑分配,提供更为稳定的吞吐量,再将可用队列中剩余容量最小的数据节点移入不可用队列,将不可用队列中负载最小的数据节点移入可用队列,从而能够实现更快的达到容量均衡。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的系统。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令系统的制造品,该指令系统实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (18)

1.一种数据节点的分配方法,其特征在于,该方法包括:
接收至少一个数据节点上报的心跳信息,其中每一数据节点的心跳信息包括该数据节点的标识信息和负载信息;
根据每一数据节点的心跳信息,更新预先建立的可用队列的数据节点的负载信息和不可用队列的数据节点的负载信息;
当满足预设条件时,根据当前可用队列的每一数据节点的负载信息,确定该可用队列的负载列表和剩余容量列表;根据当前不可用队列的每一数据节点的负载信息,确定该不可用队列的负载列表;
当可用队列中负载最大的数据节点的负载大于不可用队列中负载最小的数据节点的负载时,将可用队列中剩余容量最小的数据节点移入不可用队列,将不可用队列中负载最小的数据节点移入可用队列;
当接收到客户端发送的申请数据节点的请求时,在当前可用队列中为该客户端分配数据节点。
2.根据权利要求1所述的方法,其特征在于,所述根据每一数据节点的心跳信息,更新预先建立的可用队列的数据节点的负载信息和不可用队列的数据节点的负载信息,包括:
根据每一数据节点的标识信息,判断该数据节点是否属于预先建立的可用队列;
若该数据节点不属于可用队列,则判断该数据节点是否属于预先建立的不可用队列;
若该数据节点属于可用队列,则根据该数据节点的负载信息更新可用队列中该数据节点的负载信息;
若该数据节点不属于可用队列也不属于不可用队列,则将该数据节点加入可用队列中,并更新可用队列中该数据节点的负载信息;
若该数据节点属于不可用队列,则根据该数据节点的负载信息更新不可用队列中该数据节点的负载信息。
3.根据权利要求1所述的方法,其特征在于,
在更新预先建立可用队列的数据节点的负载信息和不可用队列的数据节点的负载信息之后,该方法还包括:
根据当前可用队列的每一数据节点的负载信息和不可用队列的每一数据节点的负载信息,更新可用队列的数据节点的数量占当前数据节点总数的比例;
所述当满足预设条件时,根据当前可用队列的每一数据节点的负载信息,确定该可用队列的负载列表和剩余容量列表;根据当前不可用队列的每一数据节点的负载信息,确定该不可用队列的负载列表,包括:
当满足预设条件时,判断可用队列的数据节点的数量占当前数据节点总数的比例是否有变化,如果是,则根据当前可用队列的数据节点的数量占当前数据节点总数的比例,调整可用队列的数据节点和不可用队列的数据节点;否则,保持可用队列的数据节点和不可用队列的数据节点不变;
根据当前可用队列的每一数据节点的负载信息,确定该可用队列的负载列表和剩余容量列表;根据当前不可用队列的每一数据节点的负载信息,确定该不可用队列的负载列表。
4.根据权利要求3所述的方法,其特征在于,所述根据当前可用队列的每一数据节点的负载信息和不可用队列的每一数据节点的负载信息,更新可用队列的数据节点的数量占当前数据节点总数的比例,包括:
对于每一数据节点,根据该数据节点的负载信息,确定该数据节点的负载;
若可用队列中所有的数据节点的负载均大于第一阈值,则提高可用队列的数据节点的数量占当前数据节点总数的比例;
若可用队列中所有的数据节点的负载均小于第二阈值,则降低可用队列的数据节点的数量占当前数据节点总数的比例。
5.根据权利要求1所述的方法,其特征在于,所述根据当前可用队列的每一数据节点的负载信息,确定该可用队列的负载列表和剩余容量列表,根据当前不可用队列的每一数据节点的负载信息,确定该不可用队列的负载列表,包括:
对于每一数据节点,根据该数据节点的负载信息,确定该数据节点的负载和该数据节点的剩余容量;
按照可用队列中数据节点的负载由大到小的顺序,确定该可用队列的负载列表;
按照可用队列中数据节点的剩余容量由小到大的顺序,确定该可用队列的剩余容量列表;
按照不可用队列中数据节点的负载由大到小的顺序,确定该不可用队列的负载列表。
6.根据权利要求4或5所述的方法,其特征在于,所述数据节点的负载信息包括:剩余空间容量、CPU总赫兹数、使用CPU总赫兹数、内存总容量、使用内存量、网络输入输出总带宽以及使用网络输入输出总带宽。
7.根据权利要求6所述的方法,其特征在于,所述对于每一数据节点,根据该数据节点的负载信息,确定该数据节点的负载,包括:
根据该数据节点的CPU总赫兹数和使用CPU总赫兹数,计算该数据节点的CPU的使用率;
根据该数据节点的总内存量和使用内存量,计算该数据节点的内存使用率;
根据该数据节点的网络输入输出总带宽以及使用网络输入输出总带宽,计算该数据节点的网络输入输出的使用率;
将CPU的使用率、内存使用率和网络输入输出的使用率三者之中数值最大的使用率作为该数据节点的负载。
8.根据权利要求6所述的方法,其特征在于,确定数据节点的剩余容量,包括:
根据每一数据节点的剩余空间容量,计算当前所有数据节点的剩余空间总容量;
对于每一数据节点,将该数据节点的剩余空间容量与剩余空间总容量的比值作为该数据节点的剩余容量。
9.根据权利要求1所述的方法,其特征在于,所述预设条件包括:
达到预设周期时;或,在预设的时间段内,接收到的客户端申请数据节点的请求的次数达到预设值。
10.一种数据节点的分配系统,其特征在于,该系统包括:
接收模块,用于接收至少一个数据节点上报的心跳信息,其中每一数据节点的心跳信息包括该数据节点的标识信息和负载信息;
负载信息更新模块,用于根据每一数据节点的心跳信息,更新预先建立的可用队列的数据节点的负载信息和不可用队列的数据节点的负载信息;
负载确定模块,用于当满足预设条件时,根据当前可用队列的每一数据节点的负载信息,确定该可用队列的负载列表和剩余容量列表;根据当前不可用队列的每一数据节点的负载信息,确定该不可用队列的负载列表;
交互模块,用于当可用队列中负载最大的数据节点的负载大于不可用队列中负载最小的数据节点的负载时,将可用队列中剩余容量最小的数据节点移入不可用队列,将不可用队列中负载最小的数据节点移入可用队列;
分配模块,用于当接收到客户端发送的申请数据节点的请求时,在当前可用队列中为该客户端分配数据节点。
11.根据权利要求10所述的系统,其特征在于,
所述负载信息更新模块,具体用于:
根据每一数据节点的标识信息,判断该数据节点是否属于预先建立的可用队列;
若该数据节点不属于可用队列,则判断该数据节点是否属于预先建立的不可用队列;
若该数据节点属于可用队列,则根据该数据节点的负载信息更新可用队列中该数据节点的负载信息;
若该数据节点不属于可用队列也不属于不可用队列,则将该数据节点加入可用队列中,并更新可用队列中该数据节点的负载信息;
若该数据节点属于不可用队列,则根据该数据节点的负载信息更新不可用队列中该数据节点的负载信息。
12.根据权利要求10所述的系统,其特征在于,该系统还包括双队列占比更新模块,用于:根据当前可用队列的每一数据节点的负载信息和不可用队列的每一数据节点的负载信息,更新可用队列的数据节点的数量占当前数据节点总数的比例;
当满足预设条件时,所述负载确定模块具体用于:
判断可用队列的数据节点的数量占当前数据节点总数的比例是否有变化,如果是,则根据当前可用队列的数据节点的数量占当前数据节点总数的比例,调整可用队列的数据节点和不可用队列的数据节点;否则,保持可用队列的数据节点和不可用队列的数据节点不变;
根据当前可用队列的每一数据节点的负载信息,确定该可用队列的负载列表和剩余容量列表;根据当前不可用队列的每一数据节点的负载信息,确定该不可用队列的负载列表。
13.根据权利要求12所述的系统,其特征在于,所述双队列占比更新模块,具体用于:
对于每一数据节点,根据该数据节点的负载信息,确定该数据节点的负载;
若可用队列中所有的数据节点的负载均大于第一阈值,则提高可用队列的数据节点的数量占当前数据节点总数的比例;
若可用队列中所有的数据节点的负载均小于第二阈值,则降低可用队列的数据节点的数量占当前数据节点总数的比例。
14.根据权利要求10所述的系统,其特征在于,所述负载确定模块在根据当前可用队列的每一数据节点的负载信息,确定该可用队列的负载列表和剩余容量列表,根据当前不可用队列的每一数据节点的负载信息,确定该不可用队列的负载列表时,具体用于:
对于每一数据节点,根据该数据节点的负载信息,确定该数据节点的负载和该数据节点的剩余容量;
按照可用队列中数据节点的负载由大到小的顺序,确定该可用队列的负载列表;
按照可用队列中数据节点的剩余容量由小到大的顺序,确定该可用队列的剩余容量列表;
按照不可用队列中数据节点的负载由大到小的顺序,确定该不可用队列的负载列表。
15.根据权利要求13或14所述的系统,其特征在于,所述数据节点的负载信息包括:剩余空间容量、CPU总赫兹数、使用CPU总赫兹数、内存总容量、使用内存量、网络输入输出总带宽以及使用网络输入输出总带宽。
16.根据权利要求15所述的系统,其特征在于,对于每一数据节点,所述负载确定模块或双队列占比更新模块在根据该数据节点的负载信息,确定该数据节点的负载时,具体用于:
根据该数据节点的CPU总赫兹数和使用CPU总赫兹数,计算该数据节点的CPU的使用率;
根据该数据节点的总内存量和使用内存量,计算该数据节点的内存使用率;
根据该数据节点的网络输入输出总带宽以及使用网络输入输出总带宽,计算该数据节点的网络输入输出的使用率;
将CPU的使用率、内存使用率和网络输入输出的使用率三者之中数值最大的使用率作为该数据节点的负载。
17.根据权利要求15所述的系统,其特征在于,所述负载确定模块在确定数据节点的剩余容量时,具体用于:
根据每一数据节点的剩余空间容量,计算当前所有数据节点的剩余空间总容量;
对于每一数据节点,将该数据节点的剩余空间容量与剩余空间总容量的比值作为该数据节点的剩余容量。
18.根据权利要求10所述的系统,其特征在于,所述预设条件包括:
达到预设周期时;或,在预设的时间段内,接收到的客户端申请数据节点的请求的次数达到预设值。
CN201410362891.5A 2014-07-28 2014-07-28 一种数据节点的分配方法及系统 Active CN104967638B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410362891.5A CN104967638B (zh) 2014-07-28 2014-07-28 一种数据节点的分配方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410362891.5A CN104967638B (zh) 2014-07-28 2014-07-28 一种数据节点的分配方法及系统

Publications (2)

Publication Number Publication Date
CN104967638A true CN104967638A (zh) 2015-10-07
CN104967638B CN104967638B (zh) 2016-08-24

Family

ID=54221579

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410362891.5A Active CN104967638B (zh) 2014-07-28 2014-07-28 一种数据节点的分配方法及系统

Country Status (1)

Country Link
CN (1) CN104967638B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109413209A (zh) * 2018-12-17 2019-03-01 上海金融期货信息技术有限公司 一种基于双队列及注册中心的动态负载均衡方法和系统
WO2019169998A1 (zh) * 2018-03-08 2019-09-12 华为技术有限公司 选择数据节点的方法、系统以及相关设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101841565A (zh) * 2010-04-20 2010-09-22 中国科学院软件研究所 数据库集群系统负载均衡方法和数据库集群系统
CN102270157A (zh) * 2011-07-25 2011-12-07 浪潮(北京)电子信息产业有限公司 一种实现服务器资源分配的系统及方法
CN102281329A (zh) * 2011-08-02 2011-12-14 北京邮电大学 一种PaaS云平台的资源调度方法和系统
CN102857577A (zh) * 2012-09-24 2013-01-02 北京联创信安科技有限公司 一种集群存储自动负载均衡的系统及方法
US20130024612A1 (en) * 2009-08-19 2013-01-24 Oracle International Corporation Storing row-major data with an affinity for columns

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130024612A1 (en) * 2009-08-19 2013-01-24 Oracle International Corporation Storing row-major data with an affinity for columns
CN101841565A (zh) * 2010-04-20 2010-09-22 中国科学院软件研究所 数据库集群系统负载均衡方法和数据库集群系统
CN102270157A (zh) * 2011-07-25 2011-12-07 浪潮(北京)电子信息产业有限公司 一种实现服务器资源分配的系统及方法
CN102281329A (zh) * 2011-08-02 2011-12-14 北京邮电大学 一种PaaS云平台的资源调度方法和系统
CN102857577A (zh) * 2012-09-24 2013-01-02 北京联创信安科技有限公司 一种集群存储自动负载均衡的系统及方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019169998A1 (zh) * 2018-03-08 2019-09-12 华为技术有限公司 选择数据节点的方法、系统以及相关设备
CN110309223A (zh) * 2018-03-08 2019-10-08 华为技术有限公司 选择数据节点的方法、系统以及相关设备
CN110309223B (zh) * 2018-03-08 2023-08-22 华为技术有限公司 选择数据节点的方法、系统以及相关设备
CN109413209A (zh) * 2018-12-17 2019-03-01 上海金融期货信息技术有限公司 一种基于双队列及注册中心的动态负载均衡方法和系统

Also Published As

Publication number Publication date
CN104967638B (zh) 2016-08-24

Similar Documents

Publication Publication Date Title
Ma et al. A novel dynamic task scheduling algorithm based on improved genetic algorithm in cloud computing
CN108628674A (zh) 基于云平台的任务调度方法、云平台及计算机存储介质
CN104375897B (zh) 基于最小相对负载不均衡度的云计算资源调度方法
CN103810048A (zh) 一种面向资源利用最优的线程数量自动调整方法及装置
CN110413391A (zh) 基于容器集群的深度学习任务服务质量保证方法和系统
CN104038392A (zh) 一种云计算资源服务质量评估方法
CN102681902A (zh) 一种基于多核系统任务分配的负载均衡方法
CN102508714A (zh) 一种云计算中基于绿色计算的虚拟机调度方法
CN104735095A (zh) 一种云计算平台作业调度方法及装置
CN112817728B (zh) 任务调度方法、网络设备和存储介质
CN103179048A (zh) 云数据中心的主机QoS策略变换方法及系统
CN106681839A (zh) 弹性计算动态分配方法
CN103605578A (zh) 基于虚拟机迁移的负载均衡调度方法
CN105657449A (zh) 一种视频转码分配方法、装置及视频转码系统
CN104363282A (zh) 一种云计算资源调度方法及装置
CN103957280A (zh) 一种物联网中的传感网络连接分配和调度方法
CN104023042A (zh) 云平台资源调度方法
CN105847385B (zh) 一种基于运行时长的云计算平台虚拟机调度方法
CN102480502B (zh) 一种i/o负载均衡方法及i/o服务器
CN105607943A (zh) 一种云环境下虚拟机动态部署机制
CN103703830B (zh) 一种物理资源调整方法、装置及控制器
CN105391968A (zh) 一种视频会话分配方法及装置
Zhang et al. Dynamic energy-efficient virtual machine placement optimization for virtualized clouds
CN103501509B (zh) 一种均衡无线网络控制器负载的方法及装置
CN104967638A (zh) 一种数据节点的分配方法及系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant