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

文档序号:9251020阅读:270来源:国知局
一种数据节点的分配方法及系统的制作方法
【技术领域】
[0001] 本发明涉及云存储技术领域,尤其涉及一种数据节点的分配方法及系统。
【背景技术】
[0002] 分布式存储系统作为一种商业系统,核心是管理海量存储资源,提供高速、稳定、 线性扩展的服务。分布式存储系统常用的负载分配方法主要是节点信息权重法,节点信息 权重法的实现流程如下:
[0003] 通过实时采集各个数据节点的负载信息(中央处理器CPU负载,内存负载,网络输 入输出负载),通过一定的权重算法,例如:负载load=x*A+y*B+z*C,其中A为CPU的当前 负载,B为当前内存的当前负载,C为当前网络输入输出的当前负载,x、y和z为权重因子, 且x+y+z= 1 ;通过该计算方式计算出各个数据节点的负载信息,选出负载最轻的多个数据 节点分配出去。
[0004]目前,节点信息权重法被作为分布式存储系统中的一种主流的动态负载分配方 式,但该方法也存在一些不足:
[0005] 分配方式取决于节点负载,对于新加入的数据节点,瞬间会被压到高负载,在后面 的所有时间,后加入的节点和先加入的节点是一致对待的,而先加入的节点已经被使用一 段时间,已经占有一定的磁盘容量,后面加入的节点和原有节点一致对待,导致先加入的节 点容量始终大于后加入的节点的容量,因此容量一直是不均衡的,这对于需要快速达到容 量均衡的分布式存储系统来说是不能接受的。
[0006] 因此,现有技术中,如何快速协调数据节点的容量和负载一直是分布式存储系统 的设计难点。

【发明内容】

[0007] 本发明实施例提供了数据节点的分配方法,用以在云存储系统中进行数据节点分 配时,实现快速的达到容量均衡。
[0008] 本发明实施例提供的一种数据节点的分配方法,包括:
[0009] 接收至少一个数据节点上报的心跳信息,其中每一数据节点的心跳信息包括该数 据节点的标识信息和负载信息;
[0010] 根据每一数据节点的心跳信息,更新预先建立的可用队列的数据节点的负载信息 和不可用队列的数据节点的负载信息;
[0011] 当满足预设条件时,根据当前可用队列的每一数据节点的负载信息,确定该可用 队列的负载列表和剩余容量列表;根据当前不可用队列的每一数据节点的负载信息,确定 该不可用队列的负载列表;
[0012] 当可用队列中负载最大的数据节点的负载大于不可用队列中负载最小的数据节 点的负载时,将可用队列中剩余容量最小的数据节点移入不可用队列,将不可用队列中负 载最小的数据节点移入可用队列;
[0013] 当接收到客户端发送的申请数据节点的请求时,在当前可用队列中为该客户端分 配数据节点。
[0014] 需要说明的是,当接收到客户端发送的申请数据节点的请求时,在当前可用队列 中为该客户端分配数据节点,是指元数据中心接收到客户端发送的申请数据节点的请求 时,就在当前的可用队列中为该客户端分配数据节点。该过程是随时都可能发生的,不受上 述步骤的顺序的限制。
[0015] 采用本发明实施例提供的上述方法,采用预先建立的可用队列和不可用队列,有 利于数据节点的平滑分配,提供更为稳定的吞吐量,再将可用队列中剩余容量最小的数据 节点移入不可用队列,将不可用队列中负载最小的数据节点移入可用队列,从而能够实现 快速的达到容量均衡。
[0016] 较佳的,所述根据每一数据节点的心跳信息,更新预先建立的可用队列的数据节 点的负载信息和不可用队列的数据节点的负载信息,包括:
[0017] 根据每一数据节点的标识信息,判断该数据节点是否属于预先建立的可用队列;
[0018] 若该数据节点不属于可用队列,则判断该数据节点是否属于预先建立的不可用队 列;
[0019] 若该数据节点属于可用队列,则根据该数据节点的负载信息更新可用队列中该数 据节点的负载信息;
[0020] 若该数据节点不属于可用队列也不属于不可用队列,则将该数据节点加入可用队 列中,并更新可用队列中该数据节点的负载信息;
[0021] 若该数据节点属于不可用队列,则根据该数据节点的负载信息更新不可用队列中 该数据节点的负载信息。
[0022] 在本发明中,当接收到一个新的数据节点的心跳信息时,由于该数据节点是新上 线的,因此将该数据节点默认为低负荷,而将其加入可用队列。
[0023] 较佳的,
[0024] 在更新预先建立可用队列的数据节点的负载信息和不可用队列的数据节点的负 载信息之后,该方法还包括:
[0025] 根据当前可用队列的每一数据节点的负载信息和不可用队列的每一数据节点的 负载信息,更新可用队列的数据节点的数量占当前数据节点总数的比例;
[0026] 所述当满足预设条件时,根据当前可用队列的每一数据节点的负载信息,确定该 可用队列的负载列表和剩余容量列表;根据当前不可用队列的每一数据节点的负载信息, 确定该不可用队列的负载列表,包括:
[0027] 当满足预设条件时,判断可用队列的数据节点的数量占当前数据节点总数的比例 是否有变化,如果是,则根据当前可用队列的数据节点的数量占当前数据节点总数的比例, 调整可用队列的数据节点和不可用队列的数据节点;否则,保持可用队列的数据节点和不 可用队列的数据节点不变;
[0028] 根据当前可用队列的每一数据节点的负载信息,确定该可用队列的负载列表和剩 余容量列表;根据当前不可用队列的每一数据节点的负载信息,确定该不可用队列的负载 列表。
[0029] 较佳的,所述根据当前可用队列的每一数据节点的负载信息和不可用队列的每 一数据节点的负载信息,更新可用队列的数据节点的数量占当前数据节点总数的比例,包 括:
[0030] 对于每一数据节点,根据该数据节点的负载信息,确定该数据节点的负载;
[0031] 若可用队列中所有的数据节点的负载均大于第一阈值,则提高可用队列的数据节 点的数量占当前数据节点总数的比例;
[0032] 若可用队列中所有的数据节点的负载均小于第二阈值,则降低可用队列的数据节 点的数量占当前数据节点总数的比例。
[0033] 通过根据当前可用队列的每一数据节点的负载信息和不可用队列的每一数据节 点的负载信息,实时的更新用队列的数据节点的数量占当前数据节点总数的比例,进而在 满足预设条件时,根据该比例调整可用队列的数据节点和不可用队列的数据节点,若当前 可用队列中所有的数据节点的负载均大于第一阈值,则说明当前系统的存储需求较高,则 提高可用队列的数据节点的数量占当前数据节点总数的比例;若当前可用队列中所有的数 据节点的负载均小于第二阈值,则说明当前系统的存储需求较低,则降低可用队列的数据 节点的数量占当前数据节点总数的比例;如此调整,能够进一步使数据节点之间的容量均 衡。
[0034] 较佳的,所述根据当前可用队列的每一数据节点的负载信息,确定该可用队列的 负载列表和剩余容量列表,根据当前不可用队列的每一数据节点的负载信息,确定该不可 用队列的负载列表,包括:
[0035] 对于每一数据节点,根据该数据节点的负载信息,确定该数据节点的负载和该数 据节点的剩余容量;
[0036] 按照可用队列中数据节点的负载由大到小的顺序,确定该可用队列的负载列表;
[0037] 按照可用队列中数据节点的剩余容量由小到大的顺序,确定该可用队列的剩余容 量列表;
[0038] 按照不可用队列中数据节点的负载由大到小的顺序,确定该不可用队列的负载列 表。
[0039] 较佳的,所述数据节点的负载信息包括:剩余空间容量、CPU总赫兹数、使用CPU总 赫兹数、内存总容量、使用内存量、网络输入输出总带宽以及使用网络输入输出总带宽。
[0040] 较佳的,所述对于每一数据节点,根据该数据节点的负载信息,确定该数据节点的 负载,包括:
[0041] 根据该数据节点的CPU总赫兹数和使用CPU总赫兹数,计算该数据节点的CPU的 使用率;
[0042] 根据该数据节点的总内存量和使用内存量,计算该数据节点的内存使用率;
[0043] 根据该数据节点的网络输入输出总带宽以及使用网络输入输出总带宽,计算该数 据节点的网络输入输出的使用率;
[0044] 将CPU的使用率、内存使用率和网络输入输出的使用率三者之中数值最大的使用 率作为该数据节点的负载。
[0045] 当系统中的数据节点异构时,也就是数据节点之间的CPU、内存、网卡异构,例如,A 主机CPU强劲,内存很少,而B主机CPU很弱,但内存速度很快,容量又大。现有技术中,衡 量一台物理机的负载取决于三个维度(CPU负载,内存负载,输入输出负载),权重因子方式 会根据一个经验值,设定三个维度各一个比例值,三者相加为1,但是,在该数据节点异构的 情况下还是如此按照固定的因子比例,各数据节点显然是没有可比性的。而本发明采用将 CPU的使用率、内存使用率和网络输入输出的使用率三者之中数值最大的使用率作为该数 据节点的负载,权衡因子是一个比例,因此,不会受限于数据节点本身的CPU、内存等性能参 数。
[0046] 较佳的,确定数据节点的剩余容量,包括:
[0047] 根据每一数据节点的剩余空间容量,计算当前所有数据节点的剩余空间总容量;
[0048] 对于每一数据节点,将该数据节点的剩余空间容量与剩余空间总容量的比值作为 该数据节点的剩余容量。
[0049] 较佳的,所述预设条件包括:
[0050] 达到预设周期时;或,在预设的时间段内,接收到的客户端申请数据节点的请求的 次数达到预设值。
[0051] 例如,云存储系统在白天的存储需求较大,所以需要频繁的监测是否需要调整可 用队列和不可用队列,但是在夜间,云存储系统的存储需求较小,此时,只有当接收到的客 户端申请数据节点的请求的次数达到预设值时,才去监测是否需要调整可用队列和不可用 队列。如此,可以有效的节省资源。
[0052] 本发明实施例提供的一种数据节点的分配系统,包括:
[0053] 接收模块,用于接收至少一个数据节点上报的心跳信息,其中每一数据节点的心 跳信息包括该数据节点的标识信息和负载信息;
[0054] 负载信息更新模块,用于根据每一数据节点的心跳信息,更新预先建立的可用队 列的数据节点的负载信息和不可用队列的数据节点的负载信息;
[0055] 负载确定模块,用于当满足预设条件时,根据当前可用队列的每一数据节点的负 载信息,确定该可用队列的负载列表和剩余容量列表;根据当前不可用队列的每一数据节 点的负载信息,确定该不可用队列的负载列表;
[0056] 交互模块,用于当可用队列中负载最大的数据节点的负载大于不可用队列中负载 最小的数据节点的负载时,将可用队列中剩余容量最小的数据节点移入不可用队列,将不 可用队列中负载最小的数据节点移入可用队列;
[0057] 分配模块,用于当接收到客户端发送的申请数据节点的请求时,在当前可用队列 中为该客户端分配数据节点。
[0058] 需要说明的是,当接收到客户端发送的申请数据节点的请求时,在当前可用队列 中为该客户端分配数据节点,是指元数据中心接收到客户端发送的申请数据节点的请求 时,就在当前的可用队列中为该客户端分配数据节点。该过程是随时都可能发生的,不受上 述步骤的顺序的限制。
[0059] 采用本发明实施例提供的上述系统,预先建立的可用队列和不可用队列,有利于 数据节点的平滑分配,提供更为稳定的吞吐量,再将可用队列中剩余容量最小的数据节点 移入不可用队列,将不可用队列中负载最小的数据节点移入可用队列,从而能够实现更快 的达到容量均衡。
[0060] 较佳的,所述负载信息更新模块,具体用于:
[0061] 根据
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1