基于MyCat中间件的分布式数据库实现与应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于MyCat中间件的分布式数据库实现与应用
摘要:MyCat中间件是当前主流的分布式代理中间件,能够降低分布式数据库使用的复杂性和代价。本文结合某运营商IT系统的转型实例,对基于MyCat中间件的分布式数据库实现原理以及其应用进行了详细的介绍,为有关需要提供参考。
关键词:MyCat;分布式数据库;实现;应用
引言
随着信息时代的发展以及互联网技术的不断推广应用,数据日益累积,社会各个行业都普遍面临着海量数据带来的挑战。而分布式关系数据库作为大数据存储和处理的主要解决方案之一,在企业生产中得到越来越广泛的应用。在这背景下,研究基于MyCat中间件的分布式数据库实现与应用具有十分重要的意义。
1.Mycat分片规则
随着互联网的快速发展,海量数据的存储问题越来越突出,数据的量级也是指数的增长。分片,是指通过对某一个字段通过特定的算法进行计算、分片,将原本存放在一个数据库中的数据分散存放到多个数据库,以达到分散单节点数据的压力。数据分片在维度上可以分为垂直分片和水平分片。垂直分片:在传统系统设计中应用非常广泛,按照不同的业务进行数据库分库。在运营商支撑系统就按照业务分为营业数据库、账务数据库、报表数据库等,如图1。水平分片:将每个独立的表按照一定的计算规则,将每个表中的数据分散到多个数据库中。每个库的数据表结构一样,但是存储的数据不一样,如图2。
图1系统数据垂直分片
图2系统数据水平分片
分片规则:Mycat是在数据库和业务应用之间增加的一个数据库中间层,可以对数据量小且不需要做数据切片的表归集到非分片表;对于数据量大,并且业务上有分片需求的表归集为分片表。分片表按照分片规则分为以下四大类:
ER关系分片:ER模型是实体关系模型,基本元素是实体、关系和属性,Mycat 针对ER关系表的切分规则中,使得有相互依赖的表能够按照某一个规则切分到相同的节点上,避免跨库 Join 关系查询。比如订单表和订单明细表就存在依赖关系,可以抽象为父子关系。子表的记录与所关联的父表存放在同一个数据分片上。
时间分片:将不同月甚至日的数据分散到不同的库中。具体可以按照日期、单月小时、自然月以及日期范围hash算法。
固定值分片:按照所选分片字段通过特定的计算,按照计算得到的值进行分片。具体如下:
(1)取模分片;
(2)枚举分片;
(3)范围分片;
(4)范围求模分片。
Hash算法分片:通过hash算法对分片字段进行计算,将计算后的值按照求模、范围等进行分片。具体方法有:
(1)固定分片hash算法;
(2)字符串hash求模范围算法;
(3)一致性hash算法。
通过以上的分片方法,可以将数据按照既定的规则落到对应的分片数据库中。
2.Mycat搭建读写分离
读写分离,简单地说就是把对数据库的读和写分开,以应对不同的数据库服
务器。主数据库提供写操作,从数据库提供读操作,这样可以有效地减轻单台服
务器的压力。主服务器进行写操作后,数据及时同步到所读的数据库,尽可能保
证读写数据库的数据一致。正常情况下,一个写数据库的操作在几十毫秒内即可
完成,而系统中大部分语查询语句需要几秒甚至几分钟才能得到结果,而这些查
询语句需要消耗大量的计算能力,高峰期间甚至可以引起系统的崩溃。所以从保
护数据的角度来看,也需要进行有容灾处理机制,避免没有主从复制机制的单节
点数据库。
MySQL的主流读写分离是Master-Slave和GaleraCluster两种模式。
Master-Slave是MySQL数据库的标准读写分离模式。一般由Master节点负责
写操作,在Master后配置多个Slave节点作为读的操作。Slave节点的多少取决于系统的读操作的压力,可以进行水平扩展。具体原理图如下:
图3Master-Slave读写分离同步机制
此方法同步机制:
(1)主库在每次更新数据前,将更新的记录到二进制文件中。
(2)备库将主库的二进制日志复制到本地的中继日志中。具体原理是备库启动
一个工作线程,和主库建立连接,用来监控主库更新状态,将主库的二进制日志
变化写入到本地中继日志中。
(3)备库启动一个SQL线程,将中继日志中的数据读取并在备库中执行,完成
备库的数据更新。
GaleraCluster读写分离模式是一种多主同步复制模式。该模式可以在任意节
点进行读写及复制,各节点之间无延迟且节点宕机也不会导致数据丢失。所有的
节点保持相同的状态,节点间没有不同的数据。无需手工备份当前数据库并复制
到新节点;无需更改或者很小的改动可以实现任意节点上进行读写。并且可以自
动剔除故障节点,自动加入新节点;该模式通常采用至少3个MySQL节点作为一个Cluster。理论上可以进行多写,但是在多个案例中,多写会引起较为严重的锁
等待,所以使用Galera推荐使用一写多读。
图4GaleraCluster读写分离同步机制
Mycat读写分离:Mysql的复制由Mysql自行控制,Mycat不负责数据的同步
问题。
Mycat作为数据库中间件,在配置好数据库的从属关系后,只需要配置相关
参数既可以实现读写分离,和前端应用无关,应用侧只需要侧重业务即可。
读写模式的变更,通过修改Mycat中配置文件属性balance来实现。