一种均衡服务器负载的方法和系统的制作方法
【技术领域】
[0001]本发明属于数据处理领域,尤其涉及一种均衡服务器负载的方法和系统。
【背景技术】
[0002]在大数据时代,随着云存储技术的成熟,当数据量达到T级别时,如何有效地存储、处理海量数据成了一个非常严峻的问题。对于数据库的并发性、可扩展性能力的要求也变的越来越高,传统数据库暴露了很多难以解决的问题。例如,对大并发量的访问需求、对大数据量的存储效率和快速访问的需求等等。在这种情况下,非传统数据库NoSQL由于其更灵活的存储模式以及弹性可扩展性等特点开始走入人们的视线,MongoDB(—种非传统数据库)是其中比较出色的一款。MongoDB在进行分布式存储时,会先将数据集进行分片,之后在多个服务器上对片进行管理。
[0003]在多个服务器集群中进行数据分片的管理就必然会涉及到服务器之间的负载均衡问题。MongoDB已有的负载均衡的实现主要来自于其内部Balancer进程的运行,但该进程只会移动在分片中片键较小的块,只考虑到了各个分片的存储平衡而未考虑到数据读写平衡,有可能使得某些分片成为单纯的“数据载体”。若在存储平衡的基础上进一步考虑数据块的读写平衡可以使整个集群更全面地实现负载均衡。
【发明内容】
[0004]鉴于此,本发明提供一种均衡服务器负载的方法和系统,以解决现有技术MongoDB系统中负载不均衡的技术问题。
[0005]本发明实施例是这样实现的,一种均衡服务器负载的方法,所述方法包括以下步骤:
[0006]通过Balancer进程对MongoDB系统的所有存储服务器中的存储的数据块进行扫描,根据所述数据块的数量确定需要进行负载均衡的存储服务器和每个数据块的访问操作的类型和次数;
[0007]根据所述类型和次数确定需要进行负载均衡的存储服务器的负载值;
[0008]通过预设的负载均衡算法和所述负载值均衡所述存储服务器的负载。
[0009]本发明实施例还提供一种均衡服务器负载的系统,所述系统包括:
[0010]确定单元,用于通过Balancer进程对MongoDB系统的所有存储服务器中的存储的数据块进行扫描,根据所述数据块的数量确定需要进行负载均衡的存储服务器和每个数据块的访问操作的类型和次数;
[0011]负载值确定单元,用于根据所述确定单元确定的类型和次数确定需要进行负载均衡的存储服务器的负载值;
[0012]负载均衡单元,用于通过预设的负载均衡算法和所述负载值确定子单元确定的负载值均衡所述存储服务器的负载。
[0013]本发明实施例,通过Balancer进程对MongoDB系统的所有存储服务器中的存储的数据块进行扫描,根据数据块的数量确定需要进行负载均衡的存储服务器和每个数据块的访问操作的类型和次数,根据类型和次数确定需要进行负载均衡的存储服务器的负载值,通过预设的负载均衡算法和负载值均衡存储服务器的负载,可以使MongoDB系统的所有存储服务器的负载均衡。
【附图说明】
[0014]为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0015]图1是本发明实施例提供的均衡服务器负载方法的流程图;
[0016]图2是本发明实施例提供的均衡服务器负载系统的结构图。
【具体实施方式】
[0017]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0018]为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。
[0019]实施例一
[0020]如图1所示为本发明实施例提供的均衡服务器负载方法的流程图,所述方法包括以下步骤:
[0021 ] 步骤SlOl,通过Balancer进程对MongoDB系统的所有存储服务器中的存储的数据块进行扫描,根据所述数据块的数量确定需要进行负载均衡的存储服务器和每个数据块的访问操作的类型和次数。
[0022]在本发明实施例中,MongoDB系统是一种分布式存储系统,在MongoDB系统中可以有多个存储服务器存储数据块,通过Balancer进程对MongoDB系统中存储的数据块进行扫描,确定需要进行负载均衡的存储服务器和每个数据块的访问操作,该访问操作的类型包括但不限于:增加操作、减少操作、修改操作和查看操作中的一种或多种。所述通过Balancer进程对MongoDB系统的所有存储服务器中的存储的数据块进行扫描,根据所述数据块的数量确定需要进行负载均衡的存储服务器和每个数据块的访问操作的类型和次数的步骤,包括:
[0023]1、通过Balancer进程获取每个存储服务器中数据块的数量,以及所述数据块的访问操作的类型和次数。
[0024]在本发明实施例中,首先通过Balancer进程对每一个存储服务器进行扫描,从每个存储服务器中获取数据块的数量,如:存储服务器a有8块、存储服务器b有9块、存储服务器c有10块。
[0025]2、将所述数据块数量之差大于预设的最大数量阈值的两个存储服务器确定为需要进行负载均衡的存储服务器。
[0026]在本发明实施例中,获取任意两个存储服务器之间的数据块的数量之差,如果这两个存储服务器中存储的数据块的数量之差大于预设的最大数量阈值,则表示这两个存储服务器的负载不平衡了,需要对这两个存储服务器进行负载均衡。
[0027]步骤S102,根据所述类型和次数确定需要进行负载均衡的存储服务器的负载值。
[0028]在本发明实施例中,根据对数据块的访问操作的类型和次数,获取存储服务器的负载值。根据对数据块的访问操作的类型和次数,获取存储服务器的负载值,具体为:获取每个数据块的块负载值,将所述块负载值相加获取负载值,获取每个数据块的块负载值具体为:将所述次数确定为基础负载值,根据所述类型的不同对所述基础负载值进行不同加权,将经过加权的基础负载值确定为块负载值。
[0029]举例说明:
[0030]假设存储服务器a有8块数据块,则基础负载值为8,假设增加操作的加权值为4、减少操作的加权值为3、修改操作的加权值为2、查看操作的加权值为1,有2块数据块进行了增加操作、有2块数据块进行了减少操作、有2块数据块进行了修改操作、有2块数据块进行了查看操作,则存储服务器a的最终负载值为:8+4*2+3*2+2*2+1*2 = 27。
[0031]步骤S103,通过预设的负载均衡算法和所述负载值均衡所述存储服务器的负载。
[0032]在本发明实施例中,负载均衡算法具体为:
[0033]1、根据存储服务器中数据块的数量和负载值获取平均负载值A ;
[0034]2、将仏与A 2进行比较:如果A P A 2,则将A1所属的存储服务器中块负载值最大的数据块迀移到A2所属的存储服务器;如果Ai< A2,则将仏所属的存储服务器中块负载值最小的数据块迀移到A2所属的存储服务器,所述A i为数据块数量多的存储服务器,A 2为数据块数量少的存储服务器。
[0035]本发明实施例,通过Balancer进程对MongoDB系统的所有存储服务器中的存储的数据块进行扫描,根据数据块的数量确定需要进行负载均衡的存储服务器和每个数据块的访问操作的类型和次数,根据类型和次数确定需要进行负载均衡的存储服务器的负载值,通过预设的负载均衡算法和负载值均衡存储服务器的负载,可以使MongoDB系统的所有存储服务器的负载均衡。
[0036]作为本发明一个可选实施例,在所述通过预设的负载均衡算法和所述负载值均衡所述存储服务器的负载的步骤之后,所述方法还包括:
[0037]当进行负载均衡的存储服务器的数据块的数量差小于预设的最小数量阈值时,停止所述负载均衡。
[0038]实施例二
[0039]如图2所示为本发明实施例提供的均衡服务器负载系统的结构图,为了便于说明,仅不出与本发明实施例相关的部分,包括:
[0040]确定单元201,用于通过Balancer进程对MongoDB系统的所有存储服务器中的存储的数据块进行扫描,根据所述数据块的数量确定需要进行负载均衡的存储服务器和每个数据