美文网首页
Mycat笔记

Mycat笔记

作者: 偷吃虾的猫 | 来源:发表于2020-07-21 00:21 被阅读0次
    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笔记

          本文链接:https://www.haomeiwen.com/subject/firdkktx.html