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事务,无法保证事务的一致性)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容