采用交叉备份的分布式数据库日志收集与负载调节系统及其方法
【技术领域】
[0001]本发明涉及分布式数据库存储技术领域,尤其涉及采用交叉备份的分布式数据库日志收集与负载调节系统及其方法。
【背景技术】
[0002]在当今的云计算和大数据时代,在社会的各个领域以及各个行业,都存在着对海量数据存储与计算的需求。传统的单机存储系统和单机数据库系统面对着海量数据的压力与冲击,根本无法完成存储与计算的任务。而分布式技术、高速网络传输技术以及并行计算技术的发展与成熟,使分布式数据库成为了当前数据存储界的主流发展趋势。
[0003]分布式数据库大多数是采用多存储节点的并行工作模式,即将海量业务数据利用某些数据分布算法散布到数据库的各台机器中,以期望每台工作机器能够均摊整体数据量,这样使每一台机器的数据量适中,减少每一台机器的存储与计算压力。当前业界知名的互联网巨头,例如Goolge的分布式存储系统就是将数据分成固定大小的块,将这些数据块以一定的分布算法散布到每个存储节点中。而当前业界知名的分布式数据库厂商的产品也是如此,例如Vertica与GreenPlum等均是采用将海量数据散布到各个工作机器中,以数据库集群来解决海量数据存储与计算的问题。GreenPlum采用的是多存储节点之间交叉备份的方式来存放备份数据。
[0004]分布式数据库自然需要对数据分片进行多个备份以保持高可用性、高性能与高度扩展灵活性。当代的业务需求,会对分布式数据库进行高并发、大压力的访问,如果没有多个备份分片,当主分片机器损坏后,系统就无法对外提供服务,这是不可以接受的。而采用多数据分片的架构带来的一个问题就是数据冗余问题,此外,还有负载均衡问题。如果数据库集群中某些机器的负载明显高于其他机器,那么这些机器很可能会在短时间内损坏,造成短板效应。
[0005]有一些简单的保证负载均衡的方式,例如可以将请求以RoundRobin的方式或者是随机选取的方式下发到该请求的可用机器之一。但是这些方法存在很大缺陷,即没有充分考虑到系统中各台机器的负载情况,是一种盲目的调节方式,因此效果并不是很好。
[0006]分布式数据库的日志管理问题也需要考虑,如何高效的收集并管理好日志信息是一个要考虑的重要问题。如果能够从日志信息中得到系统的负载情况,并利用这些负载数据指导数据分发模块分发请求,则是一个更加高效合理的解决方案,并且不会对系统造成任何额外负担。
【发明内容】
[0007]为解决上述问题,实现利用日志信息指导系统的负载调节,本发明提供一种采用交叉备份的分布式数据库日志收集与负载调节系统,可确保系统尽可能的负载均衡,保护高负载的机器,以免造成机器损坏。
[0008]为实现上述目的,本发明采用的技术方案为:
[0009]—种采用交叉备份的分布式数据库日志收集与负载调节系统,包括:日志收集节点,用于定期从数据库各台机器中获取日志信息,并将日志信息中有关系统负载的统计信息发送给负载调节节点;负载调节节点,用于将数据库各台机器的负载信息与预先配置好的负载压力级别比较,对各台机器的负载情况进行评估,将评估得到的负载分值发送到请求分发节点;请求分发节点,用于根据各台机器的负载分值,将用户下发的请求优先发送给低负载压力的机器进行处理,若某请求对应的数据分片所在的机器全部处于高压力的状态,则请求分发节点将请求缓存起来,暂停该请求的分发,直到有可用机器的负载情况更新为非高压力的状态时,再将缓存的请求分发给该机器。
[0010]本发明将日志收集机制从各个工作机器中剥离,利用额外的日志收集节点和统一的日志回收机制收集各个工作机器的各类日志信息,对日志信息进行分类,并将不同种类的日志信息发送给不同的处理节点,而对于与系统负载有关的日志信息,则发送给负载调节节点进行信息的统计与量化,负载调节节点将量化的负载信息发送给请求分发节点进行负载均衡控制,以粗粒度的方式去保证每个分片(每台机器)的负载均衡。
[0011]本发明的日志收集节点以不同的时间间隔到各个工作机器中获取不同的日志信息。对于实时变化或者变化较为频繁的日志信息以较短的时间间隔进行获取,例如机器的实时负载信息等;而对于非频繁变化的日志信息将以较长的时间间隔进行获取,例如机器进程崩溃信息等。对于与机器负载相关的统计信息,要及时地将其发送给负载调节节点。
[0012]负载调节节点需要利用管理员设置的参数评估出每台机器的负载情况,负载调节节点的评估过程为:负载调节节点从日志收集节点获取到各台机器负载情况的日志信息,将这些信息更新到自己维护的各台机器资源使用信息中,并根据数据库管理员预先设置的CPU、内存、1的资源阈值对每台机器的负载情况进行打分,即对每台机器赋予一个从I到5的分值,分值越高机器负载越高。
[0013]负载调节节点定期将这些机器的负载分值发送给请求分发节点,请求分发节点会利用机器的分值信息进行粗粒度的负载调节。具体为:请求分发节点收到用户请求后,获取该请求所对应的数据分片所在的机器组,然后查找该组机器的负载分值,从中找到一台负载分值最低的机器,将请求发送给这台机器去执行。请求分发节点设有一缓存池,若某个请求所对应的可用机器的负载分值均为5,即全部处于高压力状态,请求分发节点会将该请求缓存到这个缓存池中;当请求分发节点收到新的机器负载分值后,若发现某台机器的负载分值由5变为非5,即负载降低,会从缓存池中找到所有可用数据分片在该机器的请求,并将这些请求发送给该机器去处理。若请求分发节点的缓存池所缓存的请求数大于数据库管理员设置的阈值,则也会向管理员发送警报信息。上述方式可以最大限度地保护系统中的高负载机器,保证数据库各机器负载均衡。
[0014]日志收集节点、负载调节节点和请求分发节点各包括工作节点和至少一个备份节点,工作节点定期将其维护的信息发送给相对应的备份节点,工作节点与其相应的备份节点之间有心跳检测,若备份的节点发现工作的节点无响应,则备份的节点马上接管该无响应的节点的任务,并向数据库管理员发送相关警报信息。各个节点有主有备,可在主节点出现问题时,备份节点能迅速接管主节点的任务,保证系统不受影响。
[0015]日志收集节点收集日志、日志收集节点发送负载相关的日志信息到负载调节节点、负载调节节点发送评估后的负载分值到请求分发节点以及当前工作的日志收集节点、负载调节节点和请求分发节点发送相关信息到其对应的备份节点中的时间间隔都是由管理员配置的,这些时间间隔在系统运行的过程中可实时调节,以适应不同的业务需求。
[0016]上述系统所采用的日志收集与负载调节方法,主要有以下几点:
[0017](I)日志收集节点按一定时间间隔启用多个线程从每台工作机器中获取与系统负载相关的日志信息,以机器为单位存放,并将其发送给负载调节节点;
[0018](2)负载调节节点利用机器负载分值标准和每台机器的负载信息对每台机器的负载情况进行评估,以分值形式表示机器的负载压力状态,将评估得到的负载分值发送到请求分发节点;
[0019](3)请求分发节点接收用户下发的请求,查找出该请求对应数据分片所在的机器集合,查找该集合中每台机器对应的负载分值,将该请求发送给最低负载压力的机器去执行;若该请求对应数据分片所在的机器全部处于高压力状态,请求分发节点则将该请求缓存到缓存池中,直到有可用机器的负载情况更新为非高压力的状态时,再将缓存的请求分发给该机器。
[0020]日志收集节点、负载调节节点、请求分发节点定期将其维护的负载信息进行备份,以防止当前工作的节点出现损坏影响系统运行。
[0021]本发明将分布式数据库的负载调节机制与日志收集机制相融合,利用集中日志收集机制收集出与每台工作机器负载相关的日志信息,并将这些信息进行相应的处理,转化为量化的机器负载等级,利用这些量化的机器负载信息来辅助分发请求到低负载机器,尽可能地保护高负载的机器,避免高负载的机器持续收到请求所导致的机器损坏,能够很好的避免短板问题的发生。
【附图说明】
[0022]图1是分布式数据库交叉备份存储示意图;
[0023]图2是分布式数据库日志收集与负载调节系统示意图;
[0024]图3是分布式数据库日志收集节点收集负载相关日志的工作流程图;
[0025]图4是分布式数据库负载调节节点进行负载调节的工作流程图;
[0026]图5是分布式数据库请求分发节点中请求分发线程工作流程图;
[0027]图6是分布式数据库请求分发节点中分值更新线程工作流程图。
【具体实施方式】
[0028]下面结合附图和【具体实施方式】对本发明做详细说明:
[0029]图1为本发明中采用交叉备份方式存储数据分片的数据库集群示例,该集群中共有6台机器,共6个数据分片,每个分片均有I个备份分片,这些分片以交叉备份的方式散布到数据库集群的各台机器中。
[0030]图2为分布式数据库日志收集与负载调节系统示意图,能够看出系统的整体架构。该系统包括日志收集节点、负载调节节点和请求分发节点三类节点,三类节点都是由正在工作的节点和1-2个备份节点组成,在工作节点和备份节点之间进行心跳检测和相关信息的传递。日志收集节点与数据库集群的各台机器连接,定时获取日志信息,从中过滤出与机器负载有关的日志信息。日志调节节点从日志收集节点获取到各台机器的负载信息,对各台机器负载情况进行评估打分,赋予1-5之间的一个分值,分值越低说明机器负载越低,反之表示机器负载越高。请求分发节点从负载调节节点获取量化的机器负载信息并利用这些信息指导请求的分发,使请求尽可能地发往对应的低负载的可用机器中。
[0031]图3所示为本发明中日志收集节点从集群中收集机器负载相关的日志信息,并且简单处理转发日志信息的工作流程,具体步骤如下所述:
[0032]步骤S301、判断是否到达获取各台机器负载相关日志的时间间隔T,若没到达则继续等待若