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"--><tablename="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><writeHosthost="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><writeHosthost="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: mycatvolumes:- ./config/mycat/:/mycat/conf/:ro- ./log/mycat-logs/:/mycat/logs/:rw#- /etc/localtime:/etc/localtime:ro- ./config/hosts:/etc/hosts:roports:- "8066:8066"- "9066:9066"ulimits:nproc: 65535hostname: mycat
# mem_limit: 1024mrestart: 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