CN106254516B - 负载均衡方法及装置 - Google Patents
负载均衡方法及装置 Download PDFInfo
- Publication number
- CN106254516B CN106254516B CN201610791741.5A CN201610791741A CN106254516B CN 106254516 B CN106254516 B CN 106254516B CN 201610791741 A CN201610791741 A CN 201610791741A CN 106254516 B CN106254516 B CN 106254516B
- Authority
- CN
- China
- Prior art keywords
- data
- disk usage
- data node
- nodes
- preset number
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开是关于一种负载均衡方法及装置,属于分布式技术领域。所述方法包括:获取分布式文件系统中每一个数据节点的当前磁盘用量;为每一个数据节点分别分配一个磁盘用量随机数值;对于每一个数据节点,基于所述数据节点的当前磁盘用量和磁盘用量随机数值,计算所述数据节点的临时磁盘用量;在全部数据节点中选取预设数目的数据节点,所述预设数目的数据节点的临时磁盘用量小于其他数据节点的临时磁盘用量;将待写入的文件写入到所述预设数目的数据节点中。本公开在进行数据写入时直接选择负载量比较低的数据节点写入,无需为了均衡负载进行数据迁移,省略了I/O操作,节省了网络流量,避免了数据迁移过程中造成的数据丢失,负载均衡效果较优。
Description
技术领域
本公开涉及分布式技术领域,特别涉及一种负载均衡方法及装置。
背景技术
随着互联网技术的不断发展,分布式文件系统的出现有效地解决了数据的存储和管理难题。其中,在分布式文件系统中,数据存放在各个DataNode(数据节点)上。且每一个DataNode的数据存储量会随着分布式文件系统的使用而不断增长,为了增加系统的存储容量,通常需要在分布式文件系统加入新的DataNode。而新加入的DataNode的负载量会比之前存在的DataNode的负载量低很多,这时便需考虑到负载均衡的问题,以提升系统性能。
相关技术中,若各个DataNode(数据节点)之间出现负载不均衡的情况,一般采用数据迁移的方式实现各个DataNode之间数据存储量的均衡。比如,将数据存储量比较大的DataNode上的一部分Block迁移到数据存储量比较少的DataNode上。其中,Block是分布式文件系统中最小存储和处理单位。
在实现本公开的过程中,发明人发现相关技术至少存在以下问题:
在数据迁移的过程中,会涉及到大量的I/O(Input/Output,输入/输出)操作,这会耗费大量网络流量,此外在数据迁移的过程中容易造成数据的丢失。
发明内容
为克服相关技术中存在的问题,本公开提供一种负载均衡方法及装置。
根据本公开实施例的第一方面,提供一种负载均衡方法,包括:
获取分布式文件系统中每一个数据节点的当前磁盘用量;
为每一个数据节点分别分配一个磁盘用量随机数值;
对于每一个数据节点,基于所述数据节点的当前磁盘用量和磁盘用量随机数值,计算所述数据节点的临时磁盘用量;
在全部数据节点中选取预设数目的数据节点,所述预设数目的数据节点的临时磁盘用量小于其他数据节点的临时磁盘用量;
将待写入的文件写入到所述预设数目的数据节点中。
在另一个实施例中,所述获取分布式文件系统中每一个数据节点的当前磁盘用量,包括:
对于每一个数据节点,每隔预设时长获取一次所述数据节点的磁盘用量信息,所述磁盘用量信息至少包括所述数据节点的当前磁盘用量和所述数据节点的当前元数据版本号,所述当前磁盘用量由所述数据节点周期性获取得到;
判断所述当前元数据版本号与本地存储的所述数据节点的元数据版本号是否一致;
若所述当前元数据版本号与本地存储的所述数据节点的元数据版本号不一致,则将所述磁盘用量信息中包含的所述当前磁盘用量存储在本地。
在另一个实施例中,所述为每一个数据节点的当前磁盘用量分别分配一个磁盘用量随机数值,包括:
设置所述磁盘用量随机数值的取值上限和取值下限;
在所述取值上限和所述取值下限所规定的取值范围内,分别为每一个数据节点分配一个磁盘用量随机数值;
所述基于所述数据节点的当前磁盘用量和所述磁盘用量随机数值,计算所述数据节点的临时磁盘用量,包括:
计算所述当前磁盘用量和所述磁盘用量随机数值之和,得到所述数据节点的临时磁盘用量。
在另一个实施例中,所述将待写入的文件写入到所述预设数目的数据节点中,包括:
对于所述预设数目的数据节点中的每一个数据节点,在所述数据节点中创建Block(数据块);
向所述预设数目的数据节点中的主数据节点发送所述待写入的文件,以使所述主数据节点在将所述待写入的文件写入创建的Block后,将所述待写入的文件发送给所述预设数目的数据节点中的从数据节点,由所述从数据节点将所述待写入的文件写入创建的Block。
在另一个实施例中,所述在全部数据节点中选取预设数目的数据节点,包括:
按照临时磁盘用量由大到小的顺序,将每一个数据节点的临时磁盘用量进行排序,基于得到的第一排序结果选取所述预设数目的数据节点;
或按照临时磁盘用量由小到大的顺序,将每一个数据节点的临时磁盘用量进行排序,基于得到的第二排序结果选取所述预设数目的数据节点。
根据本公开实施例的第二方面,提供一种负载均衡装置,包括:
获取模块,被配置为获取分布式文件系统中每一个数据节点的当前磁盘用量;
分配模块,被配置为为每一个数据节点分别分配一个磁盘用量随机数值;
计算模块,被配置为对于每一个数据节点,基于所述数据节点的当前磁盘用量和磁盘用量随机数值,计算所述数据节点的临时磁盘用量;
选取模块,被配置为在全部数据节点中选取预设数目的数据节点,所述预设数目的数据节点的临时磁盘用量小于其他数据节点的临时磁盘用量;
写入模块,被配置为将待写入的文件写入到所述预设数目的数据节点中。
在另一个实施例中,所述获取模块,被配置为对于每一个数据节点,每隔预设时长获取一次所述数据节点的磁盘用量信息,所述磁盘用量信息至少包括所述数据节点的当前磁盘用量和所述数据节点的当前元数据版本号,所述当前磁盘用量由所述数据节点周期性获取得到;判断所述当前元数据版本号与本地存储的所述数据节点的元数据版本号是否一致。
在另一个实施例中,所述分配模块,被配置为设置所述磁盘用量随机数值的取值上限和取值下限;在所述取值上限和所述取值下限所规定的取值范围内,分别为每一个数据节点分配一个磁盘用量随机数值;
所述计算模块,被配置为计算所述当前磁盘用量和所述磁盘用量随机数值之和,得到所述数据节点的临时磁盘用量。
在另一个实施例中,所述写入模块,被配置为对于所述预设数目的数据节点中的每一个数据节点,在所述数据节点中创建Block;向所述预设数目的数据节点中的主数据节点发送所述待写入的文件,以使所述主数据节点在将所述待写入的文件写入创建的Block后,将所述待写入的文件发送给所述预设数目的数据节点中的从数据节点,由所述从数据节点将所述待写入的文件写入创建的Block。
在另一个实施例中,所述选取模块,被配置为按照临时磁盘用量由大到小的顺序,将每一个数据节点的临时磁盘用量进行排序,基于得到的第一排序结果选取所述预设数目的数据节点;或按照临时磁盘用量由小到大的顺序,将每一个数据节点的临时磁盘用量进行排序,基于得到的第二排序结果选取所述预设数目的数据节点。
根据本公开实施例的第三方面,提供一种负载均衡装置,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为:获取分布式文件系统中每一个数据节点的当前磁盘用量;为每一个数据节点分别分配一个磁盘用量随机数值;对于每一个数据节点,基于所述数据节点的当前磁盘用量和磁盘用量随机数值,计算所述数据节点的临时磁盘用量;在全部数据节点中选取预设数目的数据节点,所述预设数目的数据节点的临时磁盘用量小于其他数据节点的临时磁盘用量;将待写入的文件写入到所述预设数目的数据节点中。
本公开的实施例提供的技术方案可以包括以下有益效果:
在获取到分布式文件系统中每一个数据节点的当前磁盘用量后,为每一个数据节点分别分配一个磁盘用量随机数值,且基于每一个数据节点的当前磁盘用量和磁盘用量随机数值,计算每一个数据节点的临时磁盘用量,之后在全部数据节点中选取预设数目的数据节点,该选取的预设数目的数据节点的临时磁盘用量小于其他数据节点的临时磁盘用量,最终将待写入的文件写入到预设数目的数据节点中,由于客户端在进行数据写入时直接选择负载量比较低的数据节点写入,从而使得各个数据节点的数据存储量慢慢趋于平均,因此无需采用数据迁移的方式达到负载均衡,省略了I/O操作,节省了网络流量,避免了数据迁移过程中造成的数据丢失,安全快捷,负载均衡效果较优。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
图1是根据一示例性实施例示出的一种分布式文件系统的架构图。
图2是根据一示例性实施例示出的一种负载均衡方法的流程图。
图3是根据一示例性实施例示出的一种负载均衡方法的流程图。
图4是根据一示例性实施例示出的一种负载均衡装置的框图。
图5是根据一示例性实施例示出的一种负载均衡装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
在对本公开实施例进行详细的解释说明之前,先对本公开实施例涉及的分布式文件系统的架构进行简单介绍。参见图1,该分布式文件系统的架构中包括客户端(Client)、主节点(MasterNode)、从节点(SlaveNode)、数据节点(DataNode)以及磁盘(Storage)。
其中,客户端负责提供文件的读写接口。需要说明的是,此处的客户端并不等同于一般意义上的个人固定终端或个人移动终端等客户端,其本质上为分布式文件系统提供的应用服务器。主节点和从节点构成了MHA(Master High Availability,主节点高可用)架构,其中主节点对外提供写服务,一个从节点作为备选主节点,从节点提供读服务,一旦主节点宕机,将会把备选从节点提升为新的主节点继续工作。
此外,主节点负责存储分布式文件系统的相关元数据信息,包括数据块(Block)的分布信息和当前所有数据节点的信息。数据节点负责存储文件的数据和相关的元数据信息,按Block的方式存储,文件占用Block的一部分。Block按照多副本的方式存放在多个数据节点上,一个数据节点上可能有多个磁盘。本公开实施例对上述Block副本个数及数据节点上的磁盘数量均不进行具体限定。在本公开实施例中,为了实现各个数据节点上负载量的均衡,客户端在向各个数据节点写入数据时,直接选择负载量比较低的数据节点进行写入,无需在数据写入后再进行数据迁移,详细的负载均衡过程请参见下述实施例。
图2是根据一示例性实施例示出的一种负载均衡方法的流程图,如图2所示,该方法用于客户端中,包括以下步骤。
在步骤201中,获取分布式文件系统中每一个数据节点的当前磁盘用量。
在步骤202中,为每一个数据节点分别分配一个磁盘用量随机数值。
在步骤203中,对于每一个数据节点,基于该数据节点的当前磁盘用量和磁盘用量随机数值,计算该数据节点的临时磁盘用量。
在步骤204中,在全部数据节点中选取预设数目的数据节点,将待写入的文件写入到预设数目的数据节点中,该预设数目的数据节点的临时磁盘用量小于其他数据节点的临时磁盘用量。
本公开实施例提供的方法,在获取到分布式文件系统中每一个数据节点的当前磁盘用量后,为每一个数据节点分别分配一个磁盘用量随机数值,且基于每一个数据节点的当前磁盘用量和磁盘用量随机数值,计算每一个数据节点的临时磁盘用量,之后在全部数据节点中选取预设数目的数据节点,该选取的预设数目的数据节点的临时磁盘用量小于其他数据节点的临时磁盘用量,最终将待写入的文件写入到预设数目的数据节点中,由于客户端在进行数据写入时直接选择负载量比较低的数据节点写入,从而使得各个数据节点的数据存储量慢慢趋于平均,因此无需采用数据迁移的方式达到负载均衡,省略了I/O操作,节省了网络流量,避免了数据迁移过程中造成的数据丢失,安全快捷,负载均衡效果较优。
在另一个实施例中,获取分布式文件系统中每一个数据节点的当前磁盘用量,包括:
对于每一个数据节点,每隔预设时长获取一次数据节点的磁盘用量信息,磁盘用量信息至少包括数据节点的当前磁盘用量和数据节点的当前元数据版本号,当前磁盘用量由数据节点周期性获取得到;
判断当前元数据版本号与本地存储的数据节点的元数据版本号是否一致;
若当前元数据版本号与本地存储的数据节点的元数据版本号不一致,则将磁盘用量信息中包含的当前磁盘用量存储在本地。
在另一个实施例中,为每一个数据节点的当前磁盘用量分别分配一个磁盘用量随机数值,包括:
设置磁盘用量随机数值的取值上限和取值下限;
在取值上限和取值下限所规定的取值范围内,分别为每一个数据节点分配一个磁盘用量随机数值;
基于数据节点的当前磁盘用量和磁盘用量随机数值,计算数据节点的临时磁盘用量,包括:
计算当前磁盘用量和磁盘用量随机数值之和,得到数据节点的临时磁盘用量。
在另一个实施例中,将待写入的文件写入到预设数目的数据节点中,包括:
对于预设数目的数据节点中的每一个数据节点,在数据节点中创建Block;
向预设数目的数据节点中的主数据节点发送待写入的文件,以使主数据节点在将待写入的文件写入创建的Block后,将待写入的文件发送给预设数目的数据节点中的从数据节点,由从数据节点将待写入的文件写入创建的Block。
在另一个实施例中,在全部数据节点中选取预设数目的数据节点,包括:
按照临时磁盘用量由大到小的顺序,将每一个数据节点的临时磁盘用量进行排序,基于得到的第一排序结果选取预设数目的数据节点;
或按照临时磁盘用量由小到大的顺序,将每一个数据节点的临时磁盘用量进行排序,基于得到的第二排序结果选取预设数目的数据节点。
上述所有可选技术方案,可以采用任意结合形成本公开的可选实施例,在此不再一一赘述。
图3是根据一示例性实施例示出的一种负载均衡方法的流程图,包括如下步骤。
在步骤301中,分布式文件系统中每一个数据节点周期性计算当前磁盘用量,并将当前磁盘用量存储到数据库中。
在本公开实施例中,数据节点可通过自身的数据接口对当前磁盘用量进行读取,读取的当前磁盘用量可以用百分数进行表示,本公开实施例对此不进行具体限定。对于一个数据节点来说,在获取到自身的当前磁盘用量后,会将当前磁盘用量存储到数据库中。其中,数据节点可每隔10s或20s计算一次当前磁盘用量,本公开实施例对此同样不进行具体限定。
需要说明的是,在数据库对每一个数据节点的当前磁盘用量进行存储时,还会为每一个数据节点分配一个元数据版本号。其中,元数据版本号与当前磁盘用量一一对应,也即不同的当前磁盘用量会对应不同的元数据版本号。每当一个数据节点的当前磁盘用量发生变化时,便使用新的元数据版本号对该数据节点进行编号,以保证每次磁盘用量变化均对应不同的元数据版本号。
其中,上述提及的数据库存在于图1所示的主节点上。每当一个数据节点的当前磁盘用量发生变化时,该数据节点对应的元数据版本号便会更新到数据库中,以保证数据库中存储的该数据节点的磁盘用量是最新的。在本公开实例中,对于每一个数据节点来说,数据库会将该数据节点的当前磁盘用量和对应的元数据版本号作为该数据节点的磁盘用量信息进行存储。此外,为了对各个数据节点进行区分,可使用不同的ID(Identity,身份标识)对各个数据节点进行标识,比如数据库可维护一个数据节点ID与磁盘用量信息之间的对应关系表,本公开实施例对此不进行具体限定。
在步骤302中,客户端每隔预设时长获取一次数据库中每一个数据节点的磁盘用量信息;对于每一个数据节点,客户端判断该数据节点的磁盘用量信息中包括的当前元数据版本号与本地存储的该数据节点的元数据版本号是否一致;若不一致,则将该磁盘用量信息中包含的当前磁盘用量存储在本地;若一致,则直接执行下述步骤303。
其中,本地存储的该数据节点的元数据版本号指的是,上一次客户端从数据库中获取到的该数据节点的元数据版本号。这样,本次客户端在获取到该数据节点的当前元数据版本号后,只需将其与本地存储的该数据节点的元数据版本号进行对比即可。其中,元数据版本号可存储在本地cache(缓存)中,本公开实施例对此不进行具体限定。
在本公开实施例中,元数据主要描述数据的属性,如用来指示存储位置、历史数据、磁盘用量及文件记录等,这里我们仅根据磁盘用量的变化来更新元数据版本号。对于每一个数据节点来说,当数据库中存储的当前元数据版本号与本地缓存的元数据版本号不同时,说明该数据节点的当前磁盘用量发生了变化,需要缓存新的元数据版本号到本地。同时,删除之前缓存的元数据版本号对应的磁盘用量,并将当前获取到的磁盘用量信息中包括的当前磁盘用量更新至本地。
在步骤303中,若该数据节点的磁盘用量信息中包括的当前元数据版本号与本地存储的该数据节点的元数据版本号一致,则客户端为每一个数据节点分别分配一个磁盘用量随机数值。
其中,在为每一个数据节点分别分配一个磁盘用量随机数值时,可采取下述方式实现:
设置磁盘用量随机数值的取值上限和取值下限;在该取值上限和该取值下限所规定的取值范围内,分别为每一个数据节点分配一个磁盘用量随机数值。
需要说明的是,每一个数据节点对应的磁盘用量随机数值均不同。
在本公开实施例中,以FLAGS_balance_factor标识取值上限,random_num标识磁盘用量随机数值为例,对于每一个数据节点,客户端为其选取的磁盘用量随机数值满足条件0<random_num<FLAGS_balance_factor,其中0也即指代取值下限。例如,取值上限设置为1,取值下限设置为0,则选取的磁盘用量随机数值可为0.5及0.6等。例如,取值上限设置为2,取值下限设置为0,则选取的磁盘用量随机数值可为0.6及1.5等。其中,客户端可以通过设置取值上限和取值下限来控制磁盘用量随机数值的取值范围,取值范围越大,可选取的磁盘用量随机数值越多。
在步骤304中,对于每一个数据节点,客户端基于该数据节点的当前磁盘用量和磁盘用量随机数值,计算该数据节点的临时磁盘用量;客户端在全部数据节点中选取预设数目的数据节点。
以tmp_usage标识临时磁盘用量为例,则客户端在基于该数据节点的当前磁盘用量和磁盘用量随机数值计算该数据节点的临时磁盘用量时,具体计算当前磁盘用量usage和磁盘用量随机数值random_num之和,得到该数据节点的临时磁盘用量tmp_usage。也即,tmp_usage=usage+random_num。例如,当前磁盘用量为0.4,磁盘用量随机数值为0.2,则临时磁盘用量为0.4+0.2=0.6;例如,磁盘用量为0.5,随机数为1.3,则临时用量为0.5+1.3=1.8。
在得到每一个数据节点的临时磁盘用量后,可根据下述方式实现对预设数目的数据节点的选取:
第一种方式、按照临时磁盘用量由大到小的顺序,将每一个数据节点的临时磁盘用量进行排序,基于得到的第一排序结果选取预设数目的数据节点。
其中,选取的数据节点为第一排序结果中末尾预设数目的数据节点,例如,临时用量分别为0.7、0.3及1.5,预设数目为1,则从大到小排序为1.5、0.7、0.3,选择临时用量为0.3的数据节点。
第二种方式、按照临时磁盘用量由小到大的顺序,将每一个数据节点的临时磁盘用量进行排序,基于得到的第二排序结果选取预设数目的数据节点。
其中,选取的数据节点为第二排序结果首端预设数目的数据节点,例如,临时用量分别为0.7、0.3及1.5,预设数目为2,则从小到大排序为0.3、0.7、1.5,选择临时用量为0.3和0.7的数据节点。
其中,本公开实施例对磁盘用量随机数值、排序原则及预设数目均不进行具体限定。其中,预设数目指代Block的副本个数。采用usage+random_num的数据节点选取方式,可以使得客户端有一定的几率选择到当前磁盘用量usage比较大的DataNode,而不是一直选择usage最小的3个DataNode;而且客户端可以设置取值上限FLAGS_balance_factor的取值来修改控制这个几率。其中,通过取值上限FLAGS_balance_factor越大,选到当前磁盘用量比较大的数据节点的几率越大。
在步骤305中,客户端将待写入的文件写入到预设数目的数据节点中。
在本公开实施例中,客户端在进行文件写入时,首先在预设数目的数据节点中选取主数据节点,之后对于预设数目的数据节点中的每一个数据节点,在该数据节点中创建数据块Block,详细过程为:客户端向主数据节点发送创建Block请求;主数据节点将该创建Block请求链式传输给从数据节点;预设数目的数据节点分别按策略选择一个可用磁盘,并将可用磁盘标识的磁盘标识storage id返回给客户端,得到预设数目的标识对(datanodeid,storage id)。之后客户端为每个标识对生成一个唯一识别码作为Block id,并以Blockid为key(键)将预设数目的标识对(datanode id,storage id)存放到数据库中,进而完成Block创建过程。
客户端在进行文件写入时,首先向选取的主数据节点发送写入数据请求,该写入数据请求中至少包括待写入的文件;之后,通过该主数据节点将该写数据请求链式传输给预设数目的数据节点中的从数据节点,其中链式传输的含义是主数据节点在将待写入的文件写入创建的Block后,将待写入的文件发送给预设数目的数据节点中的一个从数据节点,由该从数据节点将待写入的文件写入创建的Block后,再次传输给下一个从数据节点,直至将待写入的文件传输给全部的从数据节点。链式传输数据保证每一个从数据节点均会将待写入的数据写入到创建的Block中,以保证数据的覆盖。
之后,客户端根据策略对完成数据写入的Block进行判断,判断该Block是否可用;若该Block可用,则将该Block放入本地空闲链表中。其中,本地空闲链表中可包括每个Block的Block id,以及每一个Block所在的的数据节点的datanode id、存储该Block的磁盘的storage id之间的对应关系。本地空间链表实质上用于标识本地中当前有剩余存储空间,可用于数据存储的Block。
其中,客户端在根据策略判断Block是否可用时,可采取的策略可为查看创建的Block在存放待写入的文件后,剩余的空闲用量是否还可以满足下一次存储数据的可能要求;如果剩余的空闲用量过小,则不计入本地空闲链表中。本公开实施例对客户端判断Block是否可用的策略和数据传输的方式不进行具体限定。
本公开实施例提供的方法,在获取到分布式文件系统中每一个数据节点的当前磁盘用量后,为每一个数据节点分别分配一个磁盘用量随机数值,且基于每一个数据节点的当前磁盘用量和磁盘用量随机数值,计算每一个数据节点的临时磁盘用量,之后在全部数据节点中选取预设数目的数据节点,该选取的预设数目的数据节点的临时磁盘用量小于其他数据节点的临时磁盘用量,最终将待写入的文件写入到预设数目的数据节点中,由于客户端在进行数据写入时直接选择负载量比较低的数据节点写入,从而使得各个数据节点的数据存储量慢慢趋于平均,因此无需采用数据迁移的方式达到负载均衡,省略了I/O操作,节省了网络流量,避免了数据迁移过程中造成的数据丢失,安全快捷,负载均衡效果较优。
图4是根据一示例性实施例示出的一种负载均衡装置的框图。参照图4,该装置包括获取模块401,分配模块402,计算模块403,选取模块404和写入模块405。
该获取模块401被配置为获取分布式文件系统中每一个数据节点的当前磁盘用量;
该分配模块402被配置为为每一个数据节点分别分配一个磁盘用量随机数值;
该计算模块403被配置为对于每一个数据节点,基于该数据节点的当前磁盘用量和磁盘用量随机数值,计算该数据节点的临时磁盘用量;
该选取模块404被配置为在全部数据节点中选取预设数目的数据节点,预设数目的数据节点的临时磁盘用量小于其他数据节点的临时磁盘用量;
该写入模块405被配置为将待写入的文件写入到预设数目的数据节点中。
在另一个实施例中,获取模块401,被配置为对于每一个数据节点,每隔预设时长获取一次数据节点的磁盘用量信息,磁盘用量信息至少包括数据节点的当前磁盘用量和数据节点的当前元数据版本号,当前磁盘用量由数据节点周期性获取得到;判断当前元数据版本号与本地存储的数据节点的元数据版本号是否一致。
在另一个实施例中,分配模块402,被配置为设置磁盘用量随机数值的取值上限和取值下限;在取值上限和取值下限所规定的取值范围内,分别为每一个数据节点分配一个磁盘用量随机数值;
计算模块403,被配置为计算当前磁盘用量和磁盘用量随机数值之和,得到数据节点的临时磁盘用量。
在另一个实施例中,写入模块405,被配置为对于预设数目的数据节点中的每一个数据节点,在数据节点中创建数据块Block;向预设数目的数据节点中的主数据节点发送待写入的文件,以使主数据节点在将待写入的文件写入创建的Block后,将待写入的文件发送给预设数目的数据节点中的从数据节点,由从数据节点将待写入的文件写入创建的Block。
在另一个实施例中,选取模块404,被配置为按照临时磁盘用量由大到小的顺序,将每一个数据节点的临时磁盘用量进行排序,基于得到的第一排序结果选取预设数目的数据节点;或按照临时磁盘用量由小到大的顺序,将每一个数据节点的临时磁盘用量进行排序,基于得到的第二排序结果选取预设数目的数据节点。
本公开实施例提供的装置,在获取到分布式文件系统中每一个数据节点的当前磁盘用量后,为每一个数据节点分别分配一个磁盘用量随机数值,且基于每一个数据节点的当前磁盘用量和磁盘用量随机数值,计算每一个数据节点的临时磁盘用量,之后在全部数据节点中选取预设数目的数据节点,该选取的预设数目的数据节点的临时磁盘用量小于其他数据节点的临时磁盘用量,最终将待写入的文件写入到预设数目的数据节点中,由于在进行数据写入时直接选择负载量比较低的数据节点写入,从而使得各个数据节点的数据存储量慢慢趋于平均,因此无需采用数据迁移的方式达到负载均衡,省略了I/O操作,节省了网络流量,避免了数据迁移过程中造成的数据丢失,安全快捷,负载均衡效果较优。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图5是根据一示例性实施例示出的一种负载均衡装置500的框图。例如,装置500可以被提供为一服务器。参照图5,装置500包括处理组件522,其进一步包括一个或多个处理器,以及由存储器532所代表的存储器资源,用于存储可由处理组件522的执行的指令,例如应用程序。存储器532中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件522被配置为执行指令,以执行上述数据均衡方法。
装置500还可以包括一个电源组件526被配置为执行装置500的电源管理,一个有线或无线网络接口550被配置为将装置500连接到网络,和一个输入输出(I/O)接口558。装置500可以操作基于存储在存储器532的操作系统,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM或类似。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。
Claims (11)
1.一种负载均衡方法,其特征在于,所述方法包括:
获取分布式文件系统中每一个数据节点的当前磁盘用量;
为每一个数据节点分别分配一个磁盘用量随机数值;
对于每一个数据节点,基于所述数据节点的当前磁盘用量和磁盘用量随机数值,计算所述数据节点的临时磁盘用量;
在全部数据节点中选取预设数目的数据节点,所述预设数目的数据节点的临时磁盘用量小于其他数据节点的临时磁盘用量;
将待写入的文件写入到所述预设数目的数据节点中,
所述基于所述数据节点的当前磁盘用量和所述磁盘用量随机数值,计算所述数据节点的临时磁盘用量,包括:
计算所述当前磁盘用量和所述磁盘用量随机数值之和,得到所述数据节点的临时磁盘用量。
2.根据权利要求1所述的方法,其特征在于,所述获取分布式文件系统中每一个数据节点的当前磁盘用量,包括:
对于每一个数据节点,每隔预设时长获取一次所述数据节点的磁盘用量信息,所述磁盘用量信息至少包括所述数据节点的当前磁盘用量和所述数据节点的当前元数据版本号,所述当前磁盘用量由所述数据节点周期性获取得到;
判断所述当前元数据版本号与本地存储的所述数据节点的元数据版本号是否一致;
若所述当前元数据版本号与本地存储的所述数据节点的元数据版本号不一致,则将所述磁盘用量信息中包含的所述当前磁盘用量存储在本地。
3.根据权利要求1所述的方法,其特征在于,所述为每一个数据节点的当前磁盘用量分别分配一个磁盘用量随机数值,包括:
设置所述磁盘用量随机数值的取值上限和取值下限;
在所述取值上限和所述取值下限所规定的取值范围内,分别为每一个数据节点分配一个磁盘用量随机数值。
4.根据权利要求1所述的方法,其特征在于,所述将待写入的文件写入到所述预设数目的数据节点中,包括:
对于所述预设数目的数据节点中的每一个数据节点,在所述数据节点中创建数据块Block;
向所述预设数目的数据节点中的主数据节点发送所述待写入的文件,以使所述主数据节点在将所述待写入的文件写入创建的Block后,将所述待写入的文件发送给所述预设数目的数据节点中的从数据节点,由所述从数据节点将所述待写入的文件写入创建的Block。
5.根据权利要求1所述的方法,其特征在于,所述在全部数据节点中选取预设数目的数据节点,包括:
按照临时磁盘用量由大到小的顺序,将每一个数据节点的临时磁盘用量进行排序,基于得到的第一排序结果选取所述预设数目的数据节点;
或按照临时磁盘用量由小到大的顺序,将每一个数据节点的临时磁盘用量进行排序,基于得到的第二排序结果选取所述预设数目的数据节点。
6.一种负载均衡装置,其特征在于,所述装置包括:
获取模块,被配置为获取分布式文件系统中每一个数据节点的当前磁盘用量;
分配模块,被配置为为每一个数据节点分别分配一个磁盘用量随机数值;
计算模块,被配置为对于每一个数据节点,基于所述数据节点的当前磁盘用量和磁盘用量随机数值,计算所述数据节点的临时磁盘用量;
选取模块,被配置为在全部数据节点中选取预设数目的数据节点,所述预设数目的数据节点的临时磁盘用量小于其他数据节点的临时磁盘用量;
写入模块,被配置为将待写入的文件写入到所述预设数目的数据节点中,
所述计算模块,被配置为计算所述当前磁盘用量和所述磁盘用量随机数值之和,得到所述数据节点的临时磁盘用量。
7.根据权利要求6所述的装置,其特征在于,所述获取模块,被配置为对于每一个数据节点,每隔预设时长获取一次所述数据节点的磁盘用量信息,所述磁盘用量信息至少包括所述数据节点的当前磁盘用量和所述数据节点的当前元数据版本号,所述当前磁盘用量由所述数据节点周期性获取得到;判断所述当前元数据版本号与本地存储的所述数据节点的元数据版本号是否一致。
8.根据权利要求6所述的装置,其特征在于,所述分配模块,被配置为设置所述磁盘用量随机数值的取值上限和取值下限;在所述取值上限和所述取值下限所规定的取值范围内,分别为每一个数据节点分配一个磁盘用量随机数值。
9.根据权利要求6所述的装置,其特征在于,所述写入模块,被配置为对于所述预设数目的数据节点中的每一个数据节点,在所述数据节点中创建数据块Block;向所述预设数目的数据节点中的主数据节点发送所述待写入的文件,以使所述主数据节点在将所述待写入的文件写入创建的Block后,将所述待写入的文件发送给所述预设数目的数据节点中的从数据节点,由所述从数据节点将所述待写入的文件写入创建的Block。
10.根据权利要求6所述的装置,其特征在于,所述选取模块,被配置为按照临时磁盘用量由大到小的顺序,将每一个数据节点的临时磁盘用量进行排序,基于得到的第一排序结果选取所述预设数目的数据节点;或按照临时磁盘用量由小到大的顺序,将每一个数据节点的临时磁盘用量进行排序,基于得到的第二排序结果选取所述预设数目的数据节点。
11.一种负载均衡装置,其特征在于,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为:获取分布式文件系统中每一个数据节点的当前磁盘用量;为每一个数据节点分别分配一个磁盘用量随机数值;对于每一个数据节点,基于所述数据节点的当前磁盘用量和磁盘用量随机数值,计算所述数据节点的临时磁盘用量;在全部数据节点中选取预设数目的数据节点,所述预设数目的数据节点的临时磁盘用量小于其他数据节点的临时磁盘用量;将待写入的文件写入到所述预设数目的数据节点中,
所述基于所述数据节点的当前磁盘用量和所述磁盘用量随机数值,计算所述数据节点的临时磁盘用量,包括:
计算所述当前磁盘用量和所述磁盘用量随机数值之和,得到所述数据节点的临时磁盘用量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610791741.5A CN106254516B (zh) | 2016-08-31 | 2016-08-31 | 负载均衡方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610791741.5A CN106254516B (zh) | 2016-08-31 | 2016-08-31 | 负载均衡方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106254516A CN106254516A (zh) | 2016-12-21 |
CN106254516B true CN106254516B (zh) | 2020-02-28 |
Family
ID=58080679
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610791741.5A Active CN106254516B (zh) | 2016-08-31 | 2016-08-31 | 负载均衡方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106254516B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106682185B (zh) * | 2016-12-29 | 2019-05-24 | 北京奇虎科技有限公司 | 防止Mongos集群中的均衡操作失效的方法和装置 |
CN109376013B (zh) * | 2018-10-11 | 2020-12-15 | 北京小米智能科技有限公司 | 负载均衡方法及装置 |
CN113760172A (zh) * | 2020-06-04 | 2021-12-07 | 杭州海康威视数字技术股份有限公司 | 一种分片分配方法、装置及电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104965840A (zh) * | 2014-09-26 | 2015-10-07 | 浙江大华技术股份有限公司 | 一种数据节点的随机分配方法及系统 |
CN104994156A (zh) * | 2015-07-01 | 2015-10-21 | 北京京东尚科信息技术有限公司 | 一种集群的负载均衡方法及系统 |
CN106506608A (zh) * | 2016-10-19 | 2017-03-15 | 北京华云网际科技有限公司 | 分布式块数据的访问方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103942112B (zh) * | 2013-01-22 | 2018-06-15 | 深圳市腾讯计算机系统有限公司 | 磁盘容错方法、装置及系统 |
-
2016
- 2016-08-31 CN CN201610791741.5A patent/CN106254516B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104965840A (zh) * | 2014-09-26 | 2015-10-07 | 浙江大华技术股份有限公司 | 一种数据节点的随机分配方法及系统 |
CN104994156A (zh) * | 2015-07-01 | 2015-10-21 | 北京京东尚科信息技术有限公司 | 一种集群的负载均衡方法及系统 |
CN106506608A (zh) * | 2016-10-19 | 2017-03-15 | 北京华云网际科技有限公司 | 分布式块数据的访问方法和装置 |
Non-Patent Citations (1)
Title |
---|
云存储环境下的负载均衡策略研究;邓青 等;《航空计算技术》;20111115(第6期);第1.1节、第3节、图1 * |
Also Published As
Publication number | Publication date |
---|---|
CN106254516A (zh) | 2016-12-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107943421B (zh) | 一种基于分布式存储系统的分区划分方法及装置 | |
US11704144B2 (en) | Creating virtual machine groups based on request | |
CN108780386B (zh) | 一种数据存储的方法、装置和系统 | |
CN109995677B (zh) | 资源分配方法、装置及存储介质 | |
US11194569B2 (en) | Method, electronic device and medium for upgrading a hyper-converged infrastructure node | |
CN105094997B (zh) | 一种云计算主机节点间物理内存共享方法和系统 | |
CN104954468A (zh) | 资源的分配方法及装置 | |
CN113037794B (zh) | 计算资源配置调度方法、装置及系统 | |
CN109408590B (zh) | 分布式数据库的扩容方法、装置、设备及存储介质 | |
CN106815218A (zh) | 数据库访问方法、装置和数据库系统 | |
CN106716385A (zh) | 以应用程序为中心分布式存储系统和方法 | |
CN109981702B (zh) | 一种文件存储方法及系统 | |
CN106254516B (zh) | 负载均衡方法及装置 | |
CN111309440B (zh) | 一种多类型gpu的管理调度的方法和设备 | |
CN112269661B (zh) | 基于Kafka集群的分区迁移方法和装置 | |
CN109597903B (zh) | 图像文件处理装置和方法、文件存储系统及存储介质 | |
CN113674131A (zh) | 硬件加速器设备管理方法、装置及电子设备和存储介质 | |
CN105653373A (zh) | 资源分配方法及装置 | |
CN108833592A (zh) | 云主机调度器优化方法、装置、设备及存储介质 | |
JP2019008454A (ja) | 情報処理システムおよびリソース割り当て方法 | |
CN112631994A (zh) | 数据迁移方法及系统 | |
CN111459913B (zh) | 分布式数据库的容量扩展方法、装置及电子设备 | |
CN113347249A (zh) | 一种作业加载方法、装置及设备 | |
CN110286854B (zh) | 群成员管理和群消息处理的方法、装置、设备及存储介质 | |
KR101671119B1 (ko) | 클라우드 컴퓨팅 시스템의 자원 관리 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |