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

一种基于开源技术的数据库高可用实现方法有效专利 发明

技术领域

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

相关背景技术

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

具体实施方式

[0010] 一种基于开源技术的数据库高可用实现方法,本发明特征在于,使用关系型数据库——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的对外接口;编写负载均衡机制,实现分配任务均衡数据库节点压力。
[0011] 4).将搭建好的MySQL访问地址、Redis访问地址、控制器的对外访问接口提供给应用来访问数据。
[0012] 本方法的操作步骤为:1)、启动数据库实例与数据库管理软件, 启动数据库负载均衡、读写分离控制器;
2)、启动作为大容量、高速的缓存,启动缓存负载均衡、读写分离控制器;
3)、启动数据库控制器;
4)、启动应用实例;
5)、当有大量数据操作时,根据数据变动类型将读写量大或变动频繁的数据先写入缓存写入部分,读写相对少并且变动不频繁的数据写入数据库写入部分;
6)、应用实例或其他功能读取数据时直接读取缓存读取部分、数据库读取部分(由控制器实现);
7)、当规模比较小时:如果缓存写入部分出现故障,控制器自动将读取部分转换为写入、读取部分,不影响应用正常使用;当数据库读、写部分出现故障时,控制器自动切换功能,不影响应用使用;当规模相对较大时,部分节点故障并不影响应用的使用。
[0013] 如图1所示,从整体架构来看,整个MySQL+Redis对外作为一个单独的数据库,当外部的数据数据采集服务器或应用服务器(以下统称为外部应用服务)连接到数据库的控制器,并不需要单独的去连接MySQL数据库和Redis数据库,当外部应用服务有大量的数据需要记录到数据库的时候,由外部应用服务给出标识数据需要存放的类型(需要存放的Redis还是MySQL),控制器接收数据后自动将数据存入指定的数据库内;当需要读取数据时,外部应用服务器自行根据存入的标识到控制器给出请求就能获得相应的数据。从系统性能来看,首先Redis集群部分充当了整个数据库的缓存部分,由于Redis是非关系型的内存数据库,数据同时存在内存和存储中,在做数据交换时可直接操作内存中的数据,避免了还需要去存储查询的问题,同时由于Redis是非关系型数据库而避免了关系数据库的加锁问题;其次Redis和MySQL均采用读写分离的部署方式,同时使用集群化部署方式,使得分配到单个数据库节点的压力得到均衡,不会因为大量的写入和修改操作而造成数据查询缓慢。从数据的安全性与完整性来看,首先Redis本身采用内存+存储的方式来存放数据,数据同时存放在内存和存储中,不会因为断电而造成数据丢失,同时Redis采用集群化部署方式,一部分节点故障并不会使得整个数据库服务中断;其次MySQL数据库目前比较成熟,采用集群化部署的方式部署大大增加了数据库的安全性,同时集群内每两个节点作为一组,每组采用读写分离机制,当集群内一部分节点出现故障时并不会中断整个数据库的服务;从数据完整性方面来说,数据库控制器会定期的将Redis内存放的数据迁移到MySQL内,总能保证数据有一个完整的快照;数据库控制器部分增加了负载均衡机制,使得每个数据节点不会因为需要响应的请求量突然增加而压力集中到一个节点上,导致该节点出现故障。

当前第1页 第1页 第2页 第3页
相关技术
实现方法相关技术
开源技术相关技术
黄文载发明人的其他相关专利技术