Mycat笔记

Mycat关键特性:
  • 基于心跳的自动故障切换
  • 支持读写分离,支持Mysql主从
  • 基于NIO实现,有效管理线程,解决高并发问题
  • 支持数据库的多片自动路由与聚合,支持sum、count、max等常用的聚合函数,支持跨库分页
  • 支持单库内部任意join,支持跨库2表join
  • 支持通过全局表,ER关系的分片策略,实现高效的多表join查询
  • 支持全局序列号
  • 支持XA分布式事务(弱XA)
  • 支持ZK协调主从切换、zk序列
    ....

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

Mycat 概念
  • 逻辑库:一个或多个数据库集群构成的逻辑库。个人看法:就是我们最后连接Mycat进行数据表操作的数据库名,通过这个数据库可以操作我们配置的物理数据库
  • 逻辑表:存储在逻辑库中,用于给应用提供数据的表称为逻辑表。逻辑表可以是经过数据分片,分布在不同的分片库中的表;也可以是不经过数据分片,只存在一个分片中的表
  • 分片表:数据量很大的表切分到多个分片库中,所有的分片组合起来构成一张完整的表
  • 非分片表:相对于上面的分片表,就是不需要进行切分的表
  • ER表:基于实体关系模型的数据分片策略,子表的记录与其所关联的记录在同一个分片库上,即子表依赖父表,通过表分组保证数据关联查询不会跨库操作
  • 全局表:全局表是所有分片都复制同一份数据的表,例如:字典表

Mycat架构图:
mycat架构图.png

从图上我们可见,Mycat 的原理大致就是拦截用户发送的sql,然后经过sql解析、sql优化、sql路由然后最后到sql执行。sql执行之后会根据不同的情况进行排序、聚合、合并操作,最终把结果集返回给用户。


Mycat 配置
  • server.xml : 服务器参数调整 和 用户授权的配置文件

  • schema.xml : 逻辑库、表定义,库、表定义, 读写配置

    • schma:逻辑库配置,多个schma代表多个多个逻辑库
    • dataNode:逻辑库对应的分片
    • dataHost:实际的物理库配置(可配置主从)
      重要参数:
      balence 负载均衡类型:
        0:不开启读写分离机制
        1: 全部的readHost 和 stand by writeHost 参与select 语句的负载均衡
        2: 所有的读操作都随机在write、readhost 上分发
        3: 所有读请求随机分发到write对应的 readhost执行
      switchType 主从切换类型:
        -1:不自动切换
        1:自动切换(默认值)
        2:基于Mysql主从同步状态决定是否切换
        3: 基于Mysql galary cluster 的切换机制
  • rule.xml:分片规则配置
    分片规则:
    枚举法、固定分片、范围约定、求模法、日期列分区法、通配取模、ASCII 取模、编程指定、字符串拆分hash解析、一致性hash
    参考链接:https://www.cnblogs.com/kingsonfu/p/10627423.html

  • log4j.xml :日志文件配置


rule 配置
  • 枚举法:枚举节点值,如果没在枚举值中,则判断是否有默认节点,没有则抛错
  • 固定分片hash:划分几个不同区域,区域最大为1024,节点通过hash取模决定在哪个分区
  • 范围约定:划分几个范围,节点在一个范围内则划分到对应的分区
  • 求模法:设置一个值,然后进行取模,然后将节点划分到取模后结果的哪个分区
  • 日期列分区法:从开始日期,没隔多久为一个分区
  • 通配取模:通过和一个值进行取模操作,然后将取模结果和配置的范围进行匹配,放入对应的分区
  • ASCII码取模:和通配取模区别是,通配取模是使用int型分片字段进行取模,而ASCII码是截取字段值ASCII码的指定位数进行取模运算
  • 编程约定:通过截取指定分区字段来获取要划分的分区
  • 字符串拆分hash解析:截取字符串值进行hash取模计算得到对应的分区
  • 一致性hash:(参考百度吧....)
    参考链接:cnblogs.com/KelvinDaniels/p/11572775.html

Mycat ER 模型

  ER模型是实体关系模型,基本元素是实体、关系和属性。Mycat针对ER关系表的切分规则,使得有相互依赖的表能够按照某一个规则切分到相同的节点中,避免跨库Join关系查询


Mycat 使用场景
  • 单纯的读写分离,配置简单,支持主从切换
  • 分表分库
  • 多租户应用,每个应用一个库,但应用程序只连接Mycat,从而不改动程序本身,实现多租户化

Mycat 不适用场景
  • 非分片字段查询(如果查询条件没有分片字段,则会在所有节点都执行一次sql,DB节点多时,极大消耗性能)
  • 分页排序(如果分页sql没有排序条件则无法保证结果的正确性、分页查询偏移量很大时会极其消耗内存和CPU资源)
  • 任意表的join(当表在不同库时,join查询会出现问题)
  • 分布式事务(Mycat是弱XA事务,无法保证事务的一致性)

你可能感兴趣的:(Mycat笔记)