《Mycat分布式数据库架构》之原理及架构

随着大数据的蓬勃发展,当数据量的增长达到一定程度的时候,传统关系型数据库就有了单点故障及容量问题,为解决这类问题,程序员大佬超带你们学习下数据库中间件Mycat。

Mycat是基于阿里的Cobar开发的一款面向企业级应用的开源 数据库中间件 产品,它目前支持数据库集群、分布式事务与ACID,被普遍视为基于MySQL技术的集群分布式数据库解决方案。支持百亿级别的数据分片和并行计算,支持高可用和MySQL的读写分离。

Mycat不仅可以轻松对接MySQL、SQL Server等传统关系型数据库,也融合了内存缓存、NoSQL、HDFS等新兴大数据技术,是一款优秀的数据库中间件。


1、优势

mycat可以解决传统关系型数据库的单点故障及容量问题,搭建分布式数据库架构,实现集群化与分布式管理,提升数据存储能力及整体性能。

  • 分布式存储
    通过Mycat, 可以实现集群化与分布式管理,使数据库容量与处理能力大大改善。

  • 读写分离
    将数据库的读和写操作分开,以对应不同的数据库服务器。主数据库提供写操作,从数据库提供读操作,这样能有效的减轻单台服务器的压力。主数据库进行写操作后,数据及时同步到所读的数据库,尽可能保证读、写数据库的数据一致,比如MySQL的主从复制、Oracle的data guard、SQL Server的复制订阅等。通过mycat可以实现读写分离功能,不仅支持MySQL,也可以支持Oracle和SQL Server。

  • 性能加速
    通过分布式集群及Mycat Booster 对MySQL数据库在集群环境下的加速,Mycat大大提升了MySQL集群的性能。

  • 异构数据互联互通
    除了MySQL, Mycat 同时支持如SequoiaDB、MongoDB这样的NoSQL数据库及HDFS分布式文件系统,实现了对非结构化数据、半结构化数据及结构化数据的存储及互联。


2、应用场合

  • 高可用性
    利用Mycat可以实现热备份,当一台服务器停机时,可以由双机或集群中的另一台服务器自动接管其业务,从而在无须人工干预的情况下,保证系统持续提供服务。

  • 读写分离
    Mycat还可以实现数据库的读写分离。需要强调的是,Mycat的读写分离及自动切换都依赖于数据库产品的主从数据同步。

  • 业务数据分级存储保障
    在Mycat中,一个逻辑库可以对应Oracle、MySQL、MongoDB等多个数据源,对于用户而言就像一个数据库,用户并不知道后端有哪些数据库,只需要关注Mycat。

  • 大表水平分片,集群并行计算
    数据切分是Mycat的核心功能,是指通过某种特定的条件,将存放在同一个数据库中的数据分散存放在多个数据库(主机)中,以达到分散单台设备负载的效果。
    数据切分有两种切分模式:一种是按照不同的表(或者schema)将数据切分到不同的数据库(主机)中,这种切分可以叫作数据的垂直(纵向)切分。另外一种则是根据表中数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多个数据库(主机)中, 这种切分叫作数据的水平(横向)切分

  • 数据库路由器
    Mycat基于MySQL实例的连接池复用机制,可以让每个应用最大程度地共享一个MySQL实例的所有连接池,让数据库的并发访问能力大大提升。

  • 整合多种数据源
    当一个项目需要用到多种数据源如Oracle、MySQL、SQL Server、PostgreSQL时,可以利用Mycat进行整合,只需访问Mycat这一个数据源就行。


3、环境要求

3.1 系统环境

Mycat是采用Java开发的开源分布式中间件,支持Linux和Windows运行环境,可根据自己需要下载不同的版本,本文将在Linux中进行搭建演示,Linux具体配置如下。
系统:CentOS 7 64位
内存:3GB
硬盘:80GB


3.2 数据库

Mycat支持多种数据库,如MySQL、Oracle、SQL Server和PostgreSQL,但和MySQL更加兼容,其余数据库是随后期版本更新后加入,本次研究将使用Oracle数据库,版本为Oracle 11g企业版。建议至少准备两台服务器,并且都安装oracle 11g 企业版数据库。


3.3 Java环境

Mycat是java语言开发,运行Mycat需要先安装JDK环境,并且需要JDK1.7以上的版本才可以。查看当前仓库的Java版本(yum -y list java*),如下图所示,建议安装当前仓库的1.8版本。
在这里插入图片描述

配置好环境变量后通过java -version查看当前安装完成的Java版本,如下图所示。

在这里插入图片描述


3.4 Mycat版本

Mycat官网地址:http://www.mycat.io/,如下图所示。版本的不同,其中某些配置不同,请按照自己使用版本进行修改,本文将选用版本1.6.7.4。
在这里插入图片描述


4、Mycat原理

Mycat作为一个中间件,其原理便是对用户发送过来的SQL语句进行拦截,首先对SQL语句做一些特定的分析,例如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL语句发往后端的真实数据库,并将返回的结果做适当处理,最终再返回给用户,如下图所示。

在这里插入图片描述

在上图中,users表被分为三个分片节点db1、db2、dnb3,它们分布在两台MySQL和一台oracle上,分片规则(sharding rule)使用字符串枚举分片规则,一个规则的定义是分片字段(sharding column)+分片函数(rule function)。这里的分片字段为city,分片函数则为字符串枚举方式。

Mycat收到一条SQL语句时,首先解析SQL语句涉及的表,接着查看此表的定义,如果该表存在分片规则,则获取SQL语句里分片字段的值,并匹配分片函数,得到该SQL语句对应的分片列表,然后将SQL语句发送到相应的分片去执行,最后处理所有分片返回的数据并返回给客户端。


5、Mycat架构

Mycat是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而Mycat并没有存储引擎,所以并不是完全意义的分布式数据库系统。

Mycat是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。由于前面讲的对数据进行分片处理后,从原有的一个库,被切分为多个分片数据库,所有的分片数据库集群构成了整个完整的数据库存储。

应用层与mycat应用连接池之间利用MySQL Protocol通讯层(NIO、AIO)连接,所以在使用时无论底层物理数据库是什么数据库,这里都按照MySQL的方式连接,只是在Mycat内部通过不同的驱动来连接不同的物理数据库,比如oracle是使用jdbc驱动。同时mycat还起到监控和管理的作用,包括会话管理、心跳管理、内存管理和线程管理等,如下图所示。

在这里插入图片描述


后续继续更新Mycat的搭建步骤、数据切分实战以及应用层连接Mycat等,敬请关注。

更多技术干货,请持续关注程序员大佬超。
原创不易,转载请注明出处。


版权声明:本文为xch_yang原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。