MyCat 分库分表及高可用集群

一、Mycat概述

1、什么是MyCat?

  • MyCat是一款数据库中间件、用于链接Java应用程序和数据库、例Tomcat web中间件。

2、为什么用Mycat?

  • Java与数据库紧密耦合。
  • 高访问量高并发对于数据库的压力。
  • 读写请求不一致。

3、MyCat可以做什么

  • 读写分离
    在这里插入图片描述

  • 数据分片

    • 垂直拆分(分库)、水平拆分(分表)、垂直+水平拆分(分库分表)
      在这里插入图片描述

4、MyCat原理

  • MyCat的原理中最重要的一个动词是“拦截”、它拦截用户发过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将SQL发往真实的后端数据库,并将返回的结果做适当的处理,最终返回给用户。
    在这里插入图片描述

二、MyCat环境搭建

  • 上传资源并解压
#解压资源
tar -zxvf Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz -C /opt/module/
#切换目录
cd /opt/module/mycat/ && ll

在这里插入图片描述

  • 配置环境变量
#编辑系统配置
vim /etc/profile

#MYCAT_HOME
export MYCAT_HOME=/opt/module/mycat
export PATH=$PATH:$MYCAT_HOME/bin

#使配置生效
source /etc/profile

#相关启动命令
mycat console | start | stop | restart | status | dump

在这里插入图片描述

  • Mycat主要配置文件解释
    • schema.xml 定义逻辑库、表、分片节点等内容
    • rule.xml 定义分片规则
    • server.xml 定义系统相关变量、如端口等。

三、MyCat读写分离配置

#切换目录
cd /opt/module/mycat/conf
#编辑 约100行
vim server.xml

在这里插入图片描述

  • 配置MYSQL Schema信息

    • 编辑schema.xml配置
    <mycat:schema xmlns:mycat="http://io.mycat/">
    
            <!--模板配置 -->
            <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
    
        </schema>
    
            <!--数据节点 -->
        <dataNode name="dn1" dataHost="host_1" database="task_db" />
    
        <!--
            数据主机配置 -->
            <dataHost name="host_1" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
    
                    <!--心跳检测 -->
                    <heartbeat>select user()</heartbeat>
    
                <!-- 写主机配置 -->
                    <writeHost host="hostM1" url="192.168.44.191:3306" user="root" password="SYS_666_admin">
    
                        <!-- can have multi read hosts -->
                            <readHost host="hostS1" url="192.168.44.193:3306" user="root" password="SYS_666_admin" />
    
                </writeHost>
    
                 <!-- 写主机配置 -->
                <writeHost host="hostM2" url="192.168.44.191:3306" user="root" password="SYS_666_admin">
    
                        <!-- can have multi read hosts -->
                          <readHost host="hostS2" url="192.168.44.193:3306" user="root" password="SYS_666_admin" />
      
                </writeHost>
            </dataHost>
    </mycat:schema>
    

    在这里插入图片描述

    • balance 属性解释:

      • balance=“0”:不开启读写分离机制、所有读请求都发送到可用的writeHost上。
        • balance=“1”:全部的readHost与 stand by writeHost参与Select的负载均衡,简单来说,当双主双从模式(m1->s1,m2->s2,并且m1和m2互为主备),则m2、s1、s2都将参与select语句的负载均衡。
        • balance=“2”:都有的读操作都随机在writeHost、readHost上分发。
        • balance=“3”:所有的读请求随机分发到readHost执行,writeHost不负担压力。
    • writeType 属性解释:

      • writeType=“0”:所有的写操作发送到配置的第一个writeHost,第一个挂了切换到第二个。切换记录在文件dnindex.properties
      • writeType=“0”:所有的写操作都随机的发送到配置的writeHost,1.5以后版本废弃不推荐。
    • switchType 属性解释:

      • switchType=“1”:自动切换。
      • switchType=“1”:-1手动切换。
      • switchType=“2”:基于MYSQL 主从状态决定。
  • 启动MyCat

#链接 服务端 8066端口
mysql -h 192.168.44.191 -P 8066 -u mycat_m -p123456;

#链接 服务端 9066
mysql -h 192.168.44.191 -P 9066 -u mycat_m -p123456;
#查看所有Mycat服务命令
show @@help;

在这里插入图片描述

  • 测试
    在这里插入图片描述

三、MyCat 垂直拆分(分库配置)

  • Mycat分库概述及规则

    • 概述:一个数据库由很多表构成,每个表对应着不同的业务,垂直拆分是指按照业务将表进行分类,分布到不同的数据库上面,以此分担压力,如下图:

    在这里插入图片描述

    • 分库规则:将有紧密关联关系的表应该在同一个库里,相互没有关联关系的表分到不同库里,且两台主机上两个数据库中的表【不可关联查询】。
  • 编辑schema.xml分库配置

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <!--模板配置 -->
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
                <!-- 数据库表配置 -->
                <table name="tb_customer" dataNode="dn2"></table>
        </schema>

        <!--数据节点 -->
        <dataNode name="dn1" dataHost="host_1" database="task_order_db" />
        <dataNode 
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值