首页> 中国专利> 一种基于开源技术的数据库高可用实现方法

一种基于开源技术的数据库高可用实现方法

摘要

一种基于开源技术的数据库高可用实现方法,本发明使用关系型数据库——MySQL与非关系型数据库——Redis结合的方式,将传统数据放入MySQL中,将一部分使用频繁或者I/O量比较大的数据放入非关系型数据库Redis中,并定期将Redis内的数据转存到MySQL内。本发明的有益效果是,实现的技术均为开源技术;(2)、使用此方法实现的数据库性能强于非开源、非免费的数据库;(3)、使用该方法实现的数据库能长时间支持大数据的读写操作,数据实时性高;(4)、该方法实现的数据库规模可弹性控制,并且具有一定的容灾能力。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-01-30

    授权

    授权

  • 2015-11-11

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20150429

    实质审查的生效

  • 2015-10-07

    公开

    公开

说明书

技术领域

本发明适用于云计算中的数据采集、交换等大I/O操作,属于IT数据存储技术领域。

背景技术

当前云计算已经成为一个比较热门的话题,在提交给用户良好的使用体验的背后,是维护人员的大量工作,其中就包括大量的性能数据分析(包括CPU、内存、网络、磁盘的性能)。对于规模比较大的集群来说,大量的性能数据采集到后需要及时的存放并且还要能实时的给其他业务系统使用,采用传统关系型数据库在面对这样的问题时就有些吃力,当大量采集数据写入时,业务系统获取性能数据就会变得比较缓慢;一方面,现在大多比较可靠的企业级关系型数据库都是非开源、非免费的,尤其在面对大数据需要集群化部署时更需要昂贵的费用;另一方面,作为政府企业,将大量重要的数据存放于一个非开源、自己不能完全掌握的系统内是一个很危险的行为,这将面临数据绑架或资料泄密的可能。在这样的情况下一个既开源又能满足性能需求的解决方案就变得尤其重要。

发明内容

本发明的目的正是为了克服上述现有技术存在的缺陷而提供一种基于开源技术的数据库高可用实现方法,本发明所使用的技术均基于开源技术,将多种技术结合在一起既满足了开源带来的好处,也避免了各个单独技术的缺点。本发明本身自带负载均衡机制与容灾功能,同时整个设计内添加了内存数据库作为高速缓存部分,提升了性能的同时也加强了系统的安全性与稳定性。

本发明是通过如下技术方案来实现的。

一种基于开源技术的数据库高可用实现方法,本发明特征在于,使用关系型数据库——MySQL与非关系型数据库——Redis结合的方式,将传统数据放入MySQL中 ,将一部分使用频繁或者I/O量比较大的数据放入非关系型数据库Redis中,并定期将Redis内的数据转存到MySQL内,使得数据能保持完整性;本方法分为三个部分:MySQL数据库、Redis数据库以及控制器部分,每个部分实现功能如下:

    MySQL数据库:用于存放写入量少、修改操作交少的数据,并将存放Redis数据库内定期迁移的数据和历史记录等;提供给持久化数据给应用访问;

    Redis数据库:存放I/O比较集中、I/O量比较大、数据频繁变动的数据;提供一段时间内的数据给应用访问;

    控制器:监控MySQL与Redis每个节点的运行情况,当节点出故障时使用相应的措施使整个数据库可以被持续使用;提供一个单一的MySQL或Redis接口供外部应用访问;执行调度功能,定期迁移Redis数据到MySQL数据库内;数据节点负载均衡功能,分发请求,平衡每个数据库节点压力;

 本方法实现方式为:

1).搭建MySQL数据库:使用集群化部署方案,集群内每两个MySQL作为一组,每组采用主从部署方式部署,其中一个MySQL只用于响应写入和修改操作,另外一个MySQL只用于读取操作,两个数据库之前的数据同步由主从方式自动完成,使用amoeba作为控制器,对外提供单个访问地址;

    2).搭建Redis数据库:使用集群化部署方案,集群内每两个Redis为一组,每组采用主从化部署方式,其中一个Redis用于响应写入操作,另外一个Redis用于响应查询操作;两个Redis之间使用Redis自带同步机制同步数据,使用自主研发的Redis作为控制器,对外提供单个访问地址;

3).编写控制器:本发明使用java作为开发语言,实现实时监控MySQL和Redis的每个节点情况,并执行从Redis转存数据到MySQL的操作。具体行为过程为:每隔一段时间给MySQL和Redis的每个节点发送心跳包,当发现其中的主节点(响应写入操作的节点)断线时,自动将该组的从节点转换为主节点继续工作,当原主节点恢复后,将原主节点转为从节点工作,当从节点掉线时,将读取操作也分配到主节点上,当从节点恢复后将读取的操作还原回原来的从节点上;在控制器内设定定时器,定时执行操作将数据从Redis内转移到MySQL数据库内;提供Redis和MySQL的对外接口;编写负载均衡机制,实现分配任务均衡数据库节点压力。

       4).将搭建好的MySQL访问地址、Redis访问地址、控制器的对外访问接口提供给应用来访问数据。

    本方法的操作步骤为:

1)、启动数据库实例与数据库管理软件, 启动数据库负载均衡、读写分离控制器;

2)、启动作为大容量、高速的缓存,启动缓存负载均衡、读写分离控制器;

3)、启动数据库控制器;

4)、启动应用实例;

5)、当有大量数据操作时,根据数据变动类型将读写量大或变动频繁的数据先写入缓存写入部分,读写相对少并且变动不频繁的数据写入数据库写入部分;

6)、应用实例或其他功能读取数据时直接读取缓存读取部分、数据库读取部分(由控制器实现);

7)、当规模比较小时:如果缓存写入部分出现故障,控制器自动将读取部分转换为写入、读取部分,不影响应用正常使用;当数据库读、写部分出现故障时,控制器自动切换功能,不影响应用使用;当规模相对较大时,部分节点故障并不影响应用的使用。

本发明的有益效果是,实现的技术均为开源技术;(2)、使用此方法实现的数据库性能强于非开源、非免费的数据库;(3)、使用该方法实现的数据库能长时间支持大数据的读写操作,数据实时性高;(4)、该方法实现的数据库规模可弹性控制,并且具有一定的容灾能力。

附图说明

图1为本发明架构示意图。

具体实施方式

一种基于开源技术的数据库高可用实现方法,本发明特征在于,使用关系型数据库——MySQL与非关系型数据库——Redis结合的方式,将传统数据放入MySQL中 ,将一部分使用频繁或者I/O量比较大的数据放入非关系型数据库Redis中,并定期将Redis内的数据转存到MySQL内,使得数据能保持完整性;本方法分为三个部分:MySQL数据库、Redis数据库以及控制器部分,每个部分实现功能如下:

    MySQL数据库:用于存放写入量少、修改操作交少的数据,并将存放Redis数据库内定期迁移的数据和历史记录等;提供给持久化数据给应用访问;

    Redis数据库:存放I/O比较集中、I/O量比较大、数据频繁变动的数据;提供一段时间内的数据给应用访问;

    控制器:监控MySQL与Redis每个节点的运行情况,当节点出故障时使用相应的措施使整个数据库可以被持续使用;提供一个单一的MySQL或Redis接口供外部应用访问;执行调度功能,定期迁移Redis数据到MySQL数据库内;数据节点负载均衡功能,分发请求,平衡每个数据库节点压力;

 本方法实现方式为:

1).搭建MySQL数据库:使用集群化部署方案,集群内每两个MySQL作为一组,每组采用主从部署方式部署,其中一个MySQL只用于响应写入和修改操作,另外一个MySQL只用于读取操作,两个数据库之前的数据同步由主从方式自动完成,使用amoeba作为控制器,对外提供单个访问地址;

    2).搭建Redis数据库:使用集群化部署方案,集群内每两个Redis为一组,每组采用主从化部署方式,其中一个Redis用于响应写入操作,另外一个Redis用于响应查询操作;两个Redis之间使用Redis自带同步机制同步数据,使用自主研发的Redis作为控制器,对外提供单个访问地址;

3).编写控制器:本发明使用java作为开发语言,实现实时监控MySQL和Redis的每个节点情况,并执行从Redis转存数据到MySQL的操作。具体行为过程为:每隔一段时间给MySQL和Redis的每个节点发送心跳包,当发现其中的主节点(响应写入操作的节点)断线时,自动将该组的从节点转换为主节点继续工作,当原主节点恢复后,将原主节点转为从节点工作,当从节点掉线时,将读取操作也分配到主节点上,当从节点恢复后将读取的操作还原回原来的从节点上;在控制器内设定定时器,定时执行操作将数据从Redis内转移到MySQL数据库内;提供Redis和MySQL的对外接口;编写负载均衡机制,实现分配任务均衡数据库节点压力。

       4).将搭建好的MySQL访问地址、Redis访问地址、控制器的对外访问接口提供给应用来访问数据。

    本方法的操作步骤为:

1)、启动数据库实例与数据库管理软件, 启动数据库负载均衡、读写分离控制器;

2)、启动作为大容量、高速的缓存,启动缓存负载均衡、读写分离控制器;

3)、启动数据库控制器;

4)、启动应用实例;

5)、当有大量数据操作时,根据数据变动类型将读写量大或变动频繁的数据先写入缓存写入部分,读写相对少并且变动不频繁的数据写入数据库写入部分;

6)、应用实例或其他功能读取数据时直接读取缓存读取部分、数据库读取部分(由控制器实现);

7)、当规模比较小时:如果缓存写入部分出现故障,控制器自动将读取部分转换为写入、读取部分,不影响应用正常使用;当数据库读、写部分出现故障时,控制器自动切换功能,不影响应用使用;当规模相对较大时,部分节点故障并不影响应用的使用。

如图1所示,从整体架构来看,整个MySQL+Redis对外作为一个单独的数据库,当外部的数据数据采集服务器或应用服务器(以下统称为外部应用服务)连接到数据库的控制器,并不需要单独的去连接MySQL数据库和Redis数据库,当外部应用服务有大量的数据需要记录到数据库的时候,由外部应用服务给出标识数据需要存放的类型(需要存放的Redis还是MySQL),控制器接收数据后自动将数据存入指定的数据库内;当需要读取数据时,外部应用服务器自行根据存入的标识到控制器给出请求就能获得相应的数据。从系统性能来看,首先Redis集群部分充当了整个数据库的缓存部分,由于Redis是非关系型的内存数据库,数据同时存在内存和存储中,在做数据交换时可直接操作内存中的数据,避免了还需要去存储查询的问题,同时由于Redis是非关系型数据库而避免了关系数据库的加锁问题;其次Redis和MySQL均采用读写分离的部署方式,同时使用集群化部署方式,使得分配到单个数据库节点的压力得到均衡,不会因为大量的写入和修改操作而造成数据查询缓慢。从数据的安全性与完整性来看,首先Redis本身采用内存+存储的方式来存放数据,数据同时存放在内存和存储中,不会因为断电而造成数据丢失,同时Redis采用集群化部署方式,一部分节点故障并不会使得整个数据库服务中断;其次MySQL数据库目前比较成熟,采用集群化部署的方式部署大大增加了数据库的安全性,同时集群内每两个节点作为一组,每组采用读写分离机制,当集群内一部分节点出现故障时并不会中断整个数据库的服务;从数据完整性方面来说,数据库控制器会定期的将Redis内存放的数据迁移到MySQL内,总能保证数据有一个完整的快照;数据库控制器部分增加了负载均衡机制,使得每个数据节点不会因为需要响应的请求量突然增加而压力集中到一个节点上,导致该节点出现故障。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号