Mycat连接读写分离数据库docker-compose版(一)

1. 说明

本文是基于mysql的主从复制模下继续开发💯,请点击😄我来查看
Mycat官网
Mycat的github

在搭建完成了读写分离的MySQL后,你可能会有疑问,既然我们的数据库现在变成了三个。一主两从模式,那么难不成我们需要读取三个数据库吗。这个显然是不科学的。那么我们解决的办法是使用了Mycat来充当数据库分库分表的中间件。小声逼逼,后面我会使用Apache ShardingSphere来进行取代。

2. 架构图

在这里插入图片描述

3. 拉取需要创建docker版的mycat资源

# 创建mycat01文件夹
mkdir /usr/local/docker/mysql/mycat01 -p
# 进入文件夹
cd /usr/local/docker/mysql/mycat01
# 下载对应的资源
git clone https://github.com/ruanjiayu/docker.mycat
# 进入docker.mycat
cd /usr/local/docker/mysql/mycat01/docker.mycat
# 构建镜像
docker-compose build

在这里插入图片描述

4. 修改配置

4.1 server.xml修改mycat的登录用户名,密码以及逻辑数据库

vim config/mycat/server.xml

       <!-- 设置用户名以及虚拟逻辑数据库 -->
	<user name="mycat" defaultAccount="true">
		<property name="password">123456</property>
		<property name="schemas">db_order</property>
	</user>

4.2 schema.xml配置你需要进行分片的数据库

vim config/mycat/schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <!-- 配置数据表 -->
        <schema name="db_order" checkSQLschema="false" sqlMaxLimit="100">
                <table name="tb_order" dataNode="dn1" rule="mod-long"/>
        </schema>
     <!-- 配置分片 -->
        <dataNode name="dn1" dataHost="cluster1" database="db_order" />
    <!-- 配置连接信息 -->
        <dataHost name="cluster1" maxCon="1000" minCon="10" balance="3"
                          writeType="1" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="w1" url="master01:3306" user="root" password="123456">
            		<readHost host="w1r1" url="slave01:3306" user="root" password="123456" />
            		<readHost host="w1r2" url="slave02:3306" user="root" password="123456" />
                </writeHost>

        </dataHost>
</mycat:schema>

balance属性说明:
负载均衡类型,目前的取值为三种

  1. balance="0,不开启读写分离操作,所有读操作全部发往writeHost上。
  2. balance="1" ,全部的readHoststand by readHost参与select语句的负载均衡。简单来说,当使用双主模式下(M1->S1,M2->S2)下,正常情况下,M2,S1,S2都参与了select语句的负载均衡。
  3. balance="2",所有读操作在writeHostreadHost上分发。
  4. balance="3",所有读操作请求随机发送到writerHost对应的readHost上执行,writeHost不负担读取压力。

4.3 rule.xml配置master的数据节点

vim config/mycat/rule.xml

<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
                <!-- how many data nodes 需要分片的节点有几个就填写几个 -->
           <property name="count">1</property>
 </function>

4.4 配置docker-compose.yml

vim /usr/local/docker/mysql/mycat01/docker.mycat/docker-compose.yml

version: '3'
services:
  mycat:
    build: .
    container_name: mycat
    volumes:
      - ./config/mycat/:/mycat/conf/:ro
      - ./log/mycat-logs/:/mycat/logs/:rw
      #- /etc/localtime:/etc/localtime:ro
      - ./config/hosts:/etc/hosts:ro
    ports:
      - "8066:8066"
      - "9066:9066"
    ulimits:
      nproc: 65535
    hostname: mycat
#    mem_limit: 1024m
    restart: always

networks:
  default:
    external:
      name: mysql_network

5. 启动mycat分库分表中间件

docker-compose up -d

注意: 事先一定要在master节点创建对应的数据库db_order,不然连接mycat会出现异常。

在这里插入图片描述

6. 通过Mycat对db_order.tb_order表进行操作

需要注意,因为分片的原因。在插入数据的时候,我们主键一定需要填写。
在这里插入图片描述

7.注意

7.1 在Mycat分库分表中间件中,我们不能创建新的表

在这里插入图片描述

7.2 在Mycat分库分表中间件中,我们不能创建新的库

在这里插入图片描述

8. 改善读写分离数据库

聪明的你可能会意识到,虽然我完成了上述的操作,但是我的写入数据库还是只有一个,还是会遇到数据库性能问题以及数据量太大不能导入等情况,那么下一章,让我们来改进一下吧😄

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值