mysql5.7集成mycat

mycat架构图

mycat镜像

docker版的mycat资源:https://github.com/ruanjiayu/docker.mycat

jdk8的mycat1.6的镜像的Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
FROM docker.io/centos
COPY mycat/jdk-8u171-linux-x64.tar.gz /usr/local/
RUN tar -zxvf /usr/local/jdk-8u171-linux-x64.tar.gz -C /usr/local/
ENV JAVA_HOME=/usr/local/jdk1.8.0_171
ENV PATH=$PATH:$JAVA_HOME/bin
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
COPY mycat/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz /usr/local/
RUN tar -zxvf /usr/local/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
ENV MYCAT_HOME=/usr/local/mycat

RUN source /etc/profile
RUN source ~/.bash_profile
CMD ["/usr/local/mycat/bin/mycat", "console"]

mycat需要修改的配置

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

1
2
3
4
5
6
vim config/mycat/server.xml
#设置用户名以及虚拟逻辑数据库
<user name="mycat" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">db_order</property>
</user>

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

1
vim config/mycat/schema.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?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,dn2" rule="mod-long"/>
</schema>
<dataNode name="dn1" dataHost="cluster1" database="db_order" />
<dataNode name="dn2" dataHost="cluster2" 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>
<dataHost name="cluster2" maxCon="1000" minCon="10" balance="3"
writeType="1" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="w2" url="master02:3306" user="root" password="123456">
<readHost host="w2r1" url="m2Slave01:3306" user="root" password="123456" />
<readHost host="w2r2" url="m2Slave02:3306" user="root" password="123456" />
</writeHost>
</dataHost>
</mycat:schema>

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

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

配置master的数据节点

vim rule.xml

1
vim config/mycat/rule.xml
1
2
3
4
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<!-- how many data nodes -->
<property name="count">2</property>
</function>

docker-compose.yml

vim docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
version: '3'
services:
mycat:
image: centos-jdk8-mycat1.6
container_name: mycat
volumes:
- /etc/localtime:/etc/localtime:ro
- /home/data/mycat/logs:/usr/local/mycat/logs
- /home/mycat/schema.xml:/usr/local/mycat/conf/schema.xml
ports:
- "8066:8066"
- "9066:9066"
depends_on:
- mysql-master
- mysql-slave1
- mysql-slave2
ulimits:
nproc: 65535
hostname: mycat
#mem_limit: 1024m
restart: always
networks:
default:
external:
name: mysql_network
-------------本文结束-------------
0%