Mycat学习笔记

一、mycat概念

       从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了MySQL协议的的Server,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。 Mycat是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。

二、mycat特性

  • 支持SQL92标准
  • 支持MySQL、Oracle、DB2、SQL Server、PostgreSQL等DB的常见SQL语法
  • 遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。
  • 基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster集群。
  • 支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster
  • 基于Nio实现,有效管理线程,解决高并发问题。
  • 支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数,支持跨库分页。
  • 支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join。
  • 支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。
  • 支持多租户方案。
  • 支持分布式事务(弱xa)。
  • 支持XA分布式事务(1.6.5)。
  • 支持全局序列号,解决分布式下的主键生成问题。
  • 分片规则丰富,插件化开发,易于扩展。
  • 强大的web,命令行监控。
  • 支持前端作为MySQL通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。
  • 支持密码加密
  • 支持服务降级
  • 支持IP白名单
  • 支持SQL黑名单、sql注入攻击拦截
  • 支持prepare预编译指令(1.6)
  • 支持非堆内存(Direct Memory)聚合计算(1.6)
  • 支持PostgreSQL的native协议(1.6)
  • 支持mysql和oracle存储过程,out参数、多结果集返回(1.6)
  • 支持zookeeper协调主从切换、zk序列、配置zk化(1.6)
  • 支持库内分表(1.6)
  • 集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。

三、mycat架构图

 核心流程:

sql解析 ->数据源分配 -> 请求响应 -> 结果整合

框架图:

mycat有自身的监控机制,具备如下功能:

  • 支持对Mycat、Mysql性能监控
  • 支持对Mycat的JVM内存提供监控服务
  • 支持对线程的监控
  • 支持对操作系统的CPU、内存、磁盘、网络的监控

 高可用方案图:

     此处AHproxy起到转发的作用,类似网关功能,mycat部署采用多集群策略,数据库基于主从配置。

运用图:

  根据业务表特点,可以对特定表配置不同的策略,如以写为主、全局表等。

四、mycat配置文件介绍

      1、schema.xml  管理着MyCat的逻辑库、表、分片规则、DataNode以及DataSource。配置文件节点关系如下:

           逻辑库(sehema),逻辑表(table),配置分片(dataNode),配置物理库分片映射(dataHost)

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--逻辑库-->
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn1">
<!-- auto sharding by id (long) -->
<!--splitTableNames 启用<table name 属性使用逗号分割配置多个表,即多个表使用这个配置-->
<!--逻辑表-->
<table name="travelrecord,address" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" splitTableNames ="true"/>
</schema>

<!--配置分片-->
<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost1" database="db2" />
<dataNode name="dn3" dataHost="localhost1" database="db3" />

<!--配置物理库分片映射-->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="localhost:3306" user="root"
password="123456">
</writeHost>
</dataHost>

</mycat:schema>

    2、server.xml   保存了所有mycat需要的系统配置信息,定义登录mycat的用户和权限。

    3、rule.xml    定义了我们对表进行拆分所涉及到的规则定义。目前的分片规则有分片枚举  、固定分片hash算法、求模、按日期(天)分片、取模范围约束、ASCII码求模范围约束、字符串hash解析、一致性hash、按单月小时拆分、自然月分片 。

      分片规则的使用方式:在逻辑表的配置中有一个:    rule="auto-sharding-long",rule 对应的是 rule.xml  的 name = "auto-sharding-long"。这里可以结合schema.xml 与rule.xml及具体业务特点来配置。

  4、分片规则设计架构

        分布式数据库系统中,分片规则用于定义数据与分片的路由关系,也就是insert,delete,update,select的基本sql操作中,如

何将sql路由到对应的分片执行。分片总体路由图如下:

五、mycat经典实用场景

单纯的读写分离,此时配置最为简单,支持读写分离,主从切换

分表分库,对于超过1000 万的表进行分片,最大支持1000 亿的单表分片

多租户应用,每个应用一个库,但应用程序只连接Mycat,从而不改造程序本身,实现多租户化

报表系统,借助于Mycat的分表能力,处理大规模报表的统计

 替代Hbase,分析大数据作为海量数据实时查询的一种简单有效方案

 

学习地址:

http://www.mycat.org.cn/

  《Mycat权威指南-全部-完整版》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值