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
|