本节一起学习下mycat的入门和安装。
(一)Mycat入门
Mycat做为数据库中间件,应用开发中间的一款工具,当数据库因为数据的存储,并发压力问题需要用到集群的时候,选择中间件这种工具,要想使用它,必须要了解到它能做什么?什么情况下做怎样的配置,才能够正确选择合适的工具,以及把它用好,所以在选择它之前要对它有深入的了解!
①Mycat是什么?
MyCat数据库分库分表中间件,国内最活跃,性能最好的开源数据库中间件!
一个彻底开源,面向企业应用开发的大数据库集群。
支持事务,ACID(衡量事务的四个特性:原子性(Atomicity,或称不可分割性)一致性(Consistency)隔离性(Isolation)持久性(Durability)),可以替代MySQL的加强版数据库。
一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群。
一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQLServer。
结合传统数据库和新型分布式数据仓库的新一代企业级数据库新品。
一个新颖的数据库中间件产品。
②Mycat的信息
github中的MYCATApache。系统的学习mycat在github中有文档的信息,里面非常非常的全面。
③Mycat的前世今生
年阿里的Cobar在社区使用过程中发现存在一个比较严重的问题,以及使用限制,经过MyCat发起人第一次改良,第一代改良版本MyCat诞生。MyCat开源以后,一些Cobar的用户也参与了MyCat的开发中,最终MyCat发展成为了一个由众多软件公司的实力派架构师和自身开发人员维护的社区型开源软件。
④Mycat的应用场景
1、单纯的读写分离,此时配置最为简单,支持读写分离,主从切换。2、分表分库,对于超过万的表进行分片,最大支持亿的单表分片。3、多租户应用,每个应用一个库,但是应用程序只能连接Mycat,从而不改造程序本身,实现多租户化。4、报表系统,借助于Mycat的分表能力,处理大规模报表的统计。5、替代Hbase,分析大数据。6、作为海量数据实时查询的一种简单有限方案,比如亿频繁查询的记录需要在3秒内查询出来结果,除了基于主键的查询,还可能存在范围查询或者其他属性查询,此时MyCat可能是最简单有效的选择。
⑤Mycat工作原理
非常有必要了解,首先有一个数据库,数据库里面的数据量很大,所以需要进行分片存储,这也是数据库里面MyCat的一个常用的分库分表。应用MyCat让前端的应用访问后端的服务简单,数据库由单台变成了数据库的集群,数据分片存储了,通过一个表中的省份字段进行了数据库列表的拆分,zhejiang放到dn1节点,真正的物理承载是db1数据库,db1是字啊mysql1这台服务器上边,依次类推shanghai的放一个,beijing的放一个。当应用连接到mycat的时候,就可以正常的使用数据库,select*fromorderswhereprov=’zhejiang’。这是一个很简单的sql语句,Mycat作为服务的代理层,它会(解析SQL,分片分析,路由分析,读写分离分析,缓存分析。。。),找到dn1这个库,然后(结果合并,聚合处理,排序处理,分页处理。。。)
原理就是:,它拦截了用户发送过来的SQL语句,首先解析SQL语句,做一些特定的分析,如分片分析,路由分析,读写分离分析,缓存分析等,然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。
⑥Mycat架构
这个架构图就是对上边那个进入深入的理解,内部的核心构成,从上往下,应用来连接Mycat的时候,通过原生的MYSQL协议,应用连接myCat就像连接MySQL一样,只要应用中引入mysql的驱动jar包就可以jdbc直接连接到mycat上边。正常的mysql的客户端也可以直接连接到MyCat上边,MyCat就相当于一个mysql。下面有一个应用连接池这是每个数据库都有的一个连接池,连接池就是跟应用建立连接的,当SQL语句发送过来之后会经历解析组件,优化组件,路由组件等,最终执行组件进行执行,执行组件要真正的发送到后端的执行引擎中去的,通过前面的解析可以很确定的认定这个SQL语句需要发送到那台机器上去的,下面的数据库连接池就跟做应用开发时,要做一个数据库连接池是一个概念,通过这里获取一个连接发送到指定的MySQL或者其他类型的数据库中。你会发现连接mysql数据库的时候用的Mysql协议,连接oracle的时候使用的是jdbc驱动,拿到数据之后,会经历有没有结果集合并,如果是从多个节点分片获取到的数据,涉及到结果的合并,如果语句中有groupby就是结果的聚合,语句中有order就涉及到排序,经历了这些组件的处理之后返回给应用。
在MyCat里面有一个管理模块:会话管理,心跳管理,内存管理,线程管理。对外提供链接通过管理组件就可以连接到管理模块,了解到Mycat内部的情况。
⑦Mycat关键特性
支持SQL92标准
支持MySQL、Oracle、DB2、SQLServer、PostgreSQL等DB的常见SQL语法
遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。
基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galeracluster集群。
支持GaleraforMySQL集群,PerconaCluster或者MariaDBcluster
基于Nio实现,有效管理线程,解决高并发问题。
支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数,支持跨库分页。
支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join。
支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。
支持多租户方案。
支持分布式事务(弱xa)。
支持XA分布式事务(1.6.5)。
支持全局序列号,解决分布式下的主键生成问题。
分片规则丰富,插件化开发,易于扩展。
强大的web,命令行监控。
支持前端作为MySQL通用代理,后端JDBC方式支持Oracle、DB2、SQLServer、mongodb、巨杉。
支持密码加密。
支持服务降级。
支持IP白名单。
支持SQL黑名单、sql注入攻击拦截。
支持prepare预编译指令(1.6)。
支持非堆内存(DirectMemory)聚合计算(1.6)。
支持PostgreSQL的native协议(1.6)。
支持mysql和oracle存储过程,out参数、多结果集返回(1.6)。
支持zookeeper协调主从切换、zk序列、配置zk化(1.6)。
支持库内分表(1.6)。
集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。
⑧长期2.0规划
完全实现分布式事务,完全的支持分布式。
通过Mycatweb(eye)完成可视化配置,及智能监控,自动运维。
通过mysql本地节点,完整的解决数据扩容难度,实现自动扩容机制,解决扩容难点。
支持基于zookeeper的主从切换及Mycat集群化管理。
通过MycatBalance替代第三方的Haproxy,LVS等第三方高可用,完整的兼容Mycat集群节点的动态上下线。
接入Spark等第三方工具,解决数据分析及大数据聚合的业务场景。
通过Mycat智能优化,分析分片热点,提供合理的分片建议,索引建议,及数据切分实时业务建议。
(二)Mycat安装
①虚拟机准备
②安装JDK、maven、git
mycat依赖jdk1.7+shell脚本```bash
Author:liming
Date:-12-:14:59
LastModifiedby:liming
LastModifiedtime:23:15:05
!/bin/bash
SOFT_PATH=/opt/soft
if[!-dSOFT_PATH];thenmkdirSOFT_PATHelseecho“文件夹已经存在”fi
yuminstall-ywget
installjdk1.8
cdSOFT_PATHwget—no-cookies—no-check-certificate—header“Cookie:gpw_e24=