MyCat是一款开源(遵循ApacheLicense2.0协议)的大数据库集群中间件,用于搭建MySQL数据库的分布式集群,实现分库分表功能,解决数据库中海量数据存储和查询性能的问题。MyCat还是一个MySQL数据库的集群中间件,主要实现RDBMS数据库集群的故障转移、负载均衡、读写分离等功能。MyCat2.0使用了全新架构。
Keepalived是一款基于VRRP协议的轻量级服务高可用和负载均衡方案,提供避免服务器单点故障和请求分流的能力。
本方案基于CentOS8系统设计,建议在RedHat/CentOS系统中使用。部署数据库集群使用服务器及网络资源较多,建议在实施前做好规划工作,有利于部署工作顺利、有序进行。
1.前言
1、分库分表
MyCat的关键技术是分库分表,它通过将MySQL数据库中物理表中的数据切分成多个表分片,并将表分片存储在多个数据库节点上,从而构建分布式存储架构,提升巨表关联、排序、分组聚合等OLAP的能力。
分库分表的工作原理:拦截客户端提交的SQL语句并进行分析(如:分片分析、路由分析、读写分离分析、缓存分析等),然后将此SQL发往后端的真实数据库,并将返回的结果处理(如:数据合并)后再返回给客户端。如下图:
单个规则匹配
多个规则匹配
2、读写分离集群
MyCat还是一个位于MySQL数据库和客户端之间,主要实现读写分离功能的集群中间件。主要解决在业务系统存在大量的读并发时,通过负载均衡提高查询请求吞吐量,并将多个数据库节点集群化管理,在多主集群中单点数据库故障时候选主节点切换。
MySQL数据库集群
3、运维监控
MyCat提供运维监控系统,能够实现对MyCat的JVM、线程、后端RDBMS数据库、服务器(CPU、内存、磁盘、网络)的监控服务。
运维监控
4、应用场景
1)适用于MySQL数据库集群的读写分离、候选主节点切换、负载均衡等高可用模式;
2)适用于MySQL数据库集群的分表分库,对于单表数据超过万的物理表进行分片,最大支持亿数据的单表分片;
3)适用于多租户应用,通过分库分表实现应用数据按照租户划分物理数据库存储。从租户的角度来看,个人应用的数据集约存储在独立的空间,从应用角度看,分布式数据库有利于海量数据的分析和查询;
4)适用于海量数据的统计、分析、研判等OLAP能力的支撑数据库,分库分表能够快速完成巨表关联、排序、分组聚合等数据计算功能;
5)适用于海量数据的实时查询,如:百亿数据频繁查询的记录需要在3秒内反馈结果,包括主键查询、范围查询或其他属性查询的情况;
6)不适用物理表无法分片、分布式事务强一致性、分布式数据JOIN查询的应用场景。
5、关键特性
支持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分布式事务(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开发版)。
6、基本概念
1)物理库和物理表:在数据库实例上部署的物理数据库(如:MySQL数据库)和库中的表;
2)逻辑表:MyCat定义的表,MyCat将逻辑表的操作解释为物理库表的操作,一个逻辑表可能对应多个物理库表;
3)逻辑库:MyCat定义的逻辑表集合。
2.数据库集群部署拓扑图
部署拓扑图
网络资源规划:
1、MySQL主从库
2、MyCat+Keepalived高可用集群
KeepalivedVirtualIP:..0.30。
3、MyCat监控节点
主机名:Monitor
IP