docker 在主从复制的基础上 使用mycat 实现读写分离 分库分表

主从复制参考上一个博客:https://blog.csdn.net/qq_41929605/article/details/94767746

在docker hub上拉取 longhronshens/mycat-docker 镜像

docker pull longhronshens/mycat-docker
在这里插入图片描述
docker image ls 查看拉取的镜像
在这里插入图片描述
docker tag longhronshens/mycat-docker:latest mycat 修改longhronshens/mycat-docker:latest标签为mycat
在这里插入图片描述
创建mycat的三个配置文件
rule.xml server.xml schema.xml
在这里插入图片描述
文件内容如下:

rule.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">

    <tableRule name="role1">
        <rule>
            <columns>id</columns>
            <algorithm>mod-long</algorithm>
        </rule>
    </tableRule>

    <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
        <!-- how many data nodes -->
        <property name="count">2</property>
    </function>
</mycat:rule>


server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
    <system>
    <property name="useSqlStat">0</property>  
    <property name="useGlobleTableCheck">0</property>  

        <property name="sequnceHandlerType">2</property>
      
        <property name="processorBufferPoolType">0</property>
        
        <property name="handleDistributedTransactions">0</property>
        
        <property name="useOffHeapForMerge">1</property>

  
        <property name="memoryPageSize">1m</property>

     
        <property name="spillsFileBufferSize">1k</property>

        <property name="useStreamOutput">0</property>

     
        <property name="systemReserveMemorySize">384m</property>


        <!--是否采用zookeeper协调切换  -->
        <property name="useZKSwitch">true</property>


    </system>

    <!-- 这部分是我们通过客户端连接需要设置的帐号密码 -->
    <user name="root">
        <property name="password">root</property>
        <property name="schemas">TESTDB</property>
       
    </user>

    <user name="user">
        <property name="password">user</property>
        <property name="schemas">TESTDB</property>
        <property name="readOnly">true</property>
    </user>

</mycat:server>

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

    <!-- 设置表的存储方式.schema name="TESTDB" 与 server.xml中的 TESTDB 设置一致  -->  
    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">  
        <table name="users" primaryKey="id"  dataNode="node_db01" />  
        <table name="item" primaryKey="id" dataNode="node_db02,node_db03" rule="role1" />  

    </schema>  

    <!-- 设置dataNode 对应的数据库,及 mycat 连接的地址dataHost -->  
    <dataNode name="node_db01" dataHost="dataHost01" database="db1" />  
    <dataNode name="node_db02" dataHost="dataHost01" database="db2" />  
    <dataNode name="node_db03" dataHost="dataHost01" database="db3" />  

    <!-- mycat 逻辑主机dataHost对应的物理主机.其中也设置对应的mysql登陆信息 -->  
    <dataHost name="dataHost01" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">  
            <heartbeat>select user()</heartbeat>  
            <writeHost host="mysql_master" url="192.168.43.22:3306" user="root" password="root">
		<readHost host="mysql_slave" url="192.168.43.22:3307" user="root" password="root" />
		</writeHost>  
    </dataHost>  
</mycat:schema>

----------------------------------

创建mycat容器使用-v把上面的三个配置文件映射到mycat的配置文件里
docker run --name mycat -v /home/vagrant/schema.xml:/usr/local/mycat/conf/schema.xml -v /home/vagrant/rule.xml:/usr/local/mycat/conf/rule.xml -v /home/vagrant/server.xml:/usr/local/mycat/conf/server.xml --privileged=true -p 8066:8066 -p 9066:9066 -e MYSQL_ROOT_PASSWORD=‘root’ -d mycat

在这里插入图片描述
远程连接:

在这里插入图片描述
查看一下逻辑库:
进入主节点容器登入mycat
-u:用户名

-p:密码

-P:端口(mycat服务默认的数据端口是8066,而9066端口则是mycat管理端口,用于管理mycat的整个集群状态。监听的端口可以在server.xml配置文件中修改)

-h:ip地址例
在这里插入图片描述
之前在server.xml配置文件里创建的一个名叫TESTDB的逻辑库
在这里插入图片描述
在schema.xml里配置两张表 users(用来测试读写分离),item(用来分库分表测试)

在这里插入图片描述

在主里面创建三个数据库(要和配置文件里面的库名和表名一致)
db1(测试读写分离)
在这里插入图片描述
db2(分库分表)
在这里插入图片描述
db3(分库分表)
在这里插入图片描述
看一下从服务已经同步

在这里插入图片描述
首先我们来测试读写分离:(主写,从读)

Test1:
在主里面插入数据,然后在从里面查看

进入主节点里的mysql 使用db1数据库,在users表里面插入一条数据
在这里插入图片描述
在主里面插入成功
在这里插入图片描述
进入从节点查看
在这里插入图片描述
okk!没什么问题!
在这里插入图片描述
Test2:在从节点里面插入一条数据在主里面会不会看到(因为从可以插入但只有读的权限所以在主里面不会看到的)

从里插入:
在这里插入图片描述
在主里查看:
在这里插入图片描述
让我们所料在主里面还是只有七条数据!!!(读写分离测试 OKK!)

分库分表测试:
要保持db2,db3表里面的item和逻辑表的item表结构一致
在这里插入图片描述
我们在rule.xml配置文件里我们是根据逻辑库的item的·id列的 基偶数进行分库操作
基数存在db2数据库里
偶数存在db3数据库里
在这里插入图片描述
测试完成!!!
okk!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值