1.拉取需要创建docker版的mycat资源
# 下载对应的资源
git clone https://github.com/ruanjiayu/docker.mycat
# 进入docker.mycat
cd /home/cluster/mycat/docker.mycat
# 构建镜像
docker-compose build
2.修改配置
vim config/mycat/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="dtu_prod" dataNode="dataNode1" checkSQLschema="true" sqlMaxLimit="100">
<!--subTables="boards_$0-127"-->
<table
name="device_record"
dataNode="dataNode1,dataNode2"
rule="mod-long"/>
</schema>
<dataNode name="dataNode1" dataHost="dataHost1" database="dtu_prod" />
<dataNode name="dataNode2" dataHost="dataHost2" database="dtu_prod" />
<dataHost name="dataHost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost
host="ip"
url="jdbc:mysql://ip:1003?useSSL=false&serverTimezone=UTC&characterEncoding=utf8"
user="xxxx" password="xxxx">
</writeHost>
</dataHost>
<dataHost name="dataHost2" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost
host="ip"
url="jdbc:mysql://ip:1004?useSSL=false&serverTimezone=UTC&characterEncoding=utf8"
user="xxxx" password="xxxx">
</writeHost>
</dataHost>
</mycat:schema>
balance
0, 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
1,全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
2,所有读操作都随机的在writeHost、readhost上分发。
3,所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力
writeType 表示写模式
0,所有的操作发送到配置的第一个writehost
1,随机发送到配置的所有writehost
2,不执行写操作
switchType 指的是切换的模式,目前的取值也有4种:
-1,表示不自动切换
1,默认值,表示自动切换
2,基于MySQL主从同步的状态决定是否切换,心跳语句为show slave status
3,基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为show status like ‘wsrep%‘。
3.rule.xml配置
<tableRule name="mod-long">
<rule>
<columns>record_id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
columns 表主键字段名
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<!-- how many data nodes -->
<property name="count">2</property>
</function>
要分片的数据库节点数量 我这边分成2个表
4.配置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
5.设置mycat的用户名,密码以及数据库名称
vim config/mycat/server.xml
<!-- Mycat 数据库用户名 -->
<user name="root">
<!-- Mycat 数据库密码 -->
<property name="password">xxxx</property>
<!-- Mycat 数据库名 -->
<property name="schemas">dtu_prod</property>
<!-- 是否使用加密的密码,0 表示不使用加密的密码 -->
<property name="usingDecrypt">0</property>
</user>
6.构建
docker-compose up -d