Mycat

docker 安装mysql主从和mycat

mysql主从:https://blog.csdn.net/Amor_Leo/article/details/85177001
mycat安装:https://blog.csdn.net/Amor_Leo/article/details/85218405

Mycat是什么

数据库中间件,类似nginx,拦截请求,路由分发, 不同的是nginx拦截的是请求,而Mycat拦截的是sql

为什么要用Mycat

mycat数据模型

简单来说就是将以前的分库分表,读写分离等相关业务和配置从系统项目里面剥离出来,教给mycat统一管理,系统只需要链接mycat即可

主从复制

mysql主从复制原理

基本的读写分离是基于mysql的主从复制,主从复制内部的binlog同步来实现的,和redis主从不同的是,redis是通过RDB文件从太开始同步,而binlog只复制修改的部分

作用:

垂直分库:由不同的表名调用不同的数据库
垂直分表:通过不同的策略写入和查找
读写分离,可以设置读和写的主从策略
权限控制;读写权限
防火墙功能:ip白名单和黑名单

分片策略:rule.xml

具体策略:

枚举策略:

#(1)修改schema.xml配置文件
<table name="${tableName}" dataNode="${dataNode1},${dataNode2}" rule="sharding_by_intfile" ></table> #(2)修改rule.xml配置文件
 ...
<tableRule name="sharding_by_intfile"> <rule>
<columns>areacode</columns>
<algorithm>hash-int</algorithm> </rule>
</tableRule>
<function name="hash-int" class="io.mycat.route.function.PartitionByFileMap"> 
    <property name="mapFile">partition-hash-int.txt</property> 
    <property name="type">1</property>
    <property name="defaultNode">0</property>
 </function>
# columns:分片字段,algorithm:分片函数
# mapFile:标识配置文件名称,type:0为int型、非0为String,
#defaultNode:默认节点:小于 0 表示不设置默认节点,大于等于 0 表示设置默认节点,
# 设置默认节点如果碰到不识别的枚举值,就让它路由到默认节点,如不设置不识别就报错
#(3)修改partition-hash-int.txt配置文件 
110=0
120=1
#(4)重启 Mycat
#(5)访问Mycat创建表

作用:当areacode=110的时候访问或者写入dataNode1  areacode=120读取写入dataNode2中

hash策略:

<table name="${tableName}" dataNode="${dataNode1},${dataNode2}" rule="sharding-by-substring" >

mycat:rule xmlns:mycat="http://io.mycat/">
        <tableRule name="sharding-by-substring">  
            <rule>  
                <columns>user_id</columns>  
                <algorithm>sharding-by-substring</algorithm>  
            </rule>  
        </tableRule>  
        <function name="sharding-by-substring"
                class="io.mycat.route.function.PartitionDirectBySubString">
                <property name="startIndex">0</property>
                <property name="size">2</property>
                <property name="partitionCount">2</property>
                <property name="defaultPartition">0</property>
        </function>
</mycat:rule>

 columns标识将要分片的表字段。 
 algorithm为分片函数。 
 startIndex为字符串开始截取位,从0开始。 
 size为截取的位数。 
 partitionCount为分片个数 
 defaultPartition为默认节点

范围策略:

#(1)修改schema.xml配置文件
<table name="${tableName}" dataNode="${dataNode1},${dataNode2}" rule="auto_sharding_long" ></table> #(2)修改rule.xml配置文件
 ...
<tableRule name="auto_sharding_long"> <rule>
<columns>order_id</columns>
<algorithm>rang-long</algorithm> </rule>
</tableRule>
<function name="rang-long" class="io.mycat.route.function.AutoPartitionByLong">
    <property name="mapFile">autopartition-long.txt</property>
     <property name="defaultNode">0</property>
</function>
# columns:分片字段,algorithm:分片函数
# mapFile:标识配置文件名称
#defaultNode:默认节点:小于 0 表示不设置默认节点,大于等于 0 表示设置默认节点,
# 设置默认节点如果碰到不识别的枚举值,就让它路由到默认节点,如不设置不识别就 报错
#(3)修改autopartition-long.txt配置文件 
0-102=0
103-200=1
#(4)重启 Mycat 
#(5)访问Mycat创建表

作用:当0<=order_id<=102的时候访问或者写入dataNode1  103<=order_id<=200读取写入dataNode2中

时间策略:

  #(1)修改schema.xml配置文件
<table name="login_info" dataNode="dn1,dn2" rule="sharding_by_date" ></table> #(2)修改rule.xml配置文件
...
<tableRule name="sharding_by_date"> <rule>
<columns>login_date</columns>
<algorithm>shardingByDate</algorithm> </rule>
</tableRule>
<function name="shardingByDate" class="io.mycat.route.function.PartitionByDate"> 
    <property name="dateFormat">yyyy-MM-dd</property>
    <property name="sBeginDate">2019-01-01</property>
    <property name="sEndDate">2019-01-04</property>
     <property name="sPartionDay">2</property> 
</function>
# columns:分片字段,algorithm:分片函数
#dateFormat :日期格式
#sBeginDate :开始日期 #sEndDate:结束日期,则代表数据达到了这个日期的分片后循环从开始分片插入 #sPartionDay :分区天数,即默认从开始日期算起,分隔 2 天一个分区

还有很多规则具体参考:cnblogs.com/bjxq-cs88/p/9470405.html

全局序列

1 mycat文件 不推荐,mycat宕机风险,不推荐
2.数据库存储方式,一次从mysql 拿100个自增id ,用完再取,宕机会再次获取,只会造成id不连续,并不会有重合风险
3.雪花算法

Mycat高可用

Mycat高可用

用HAProxy和keepalived来保证Mycat的高可用性

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