简介
Mycat 是一个强大的数据库中间件,不仅仅可以用作读写分离、以及分表分库、容灾备份,而且可以用于多租户应用开发、云平台基础设施、让你的架构具备很强的适应性和灵活性,借助于即将发布的 Mycat 智能优化模块,系统的数据访问瓶颈和热点一目了然,根据这些统计分析数据,你可以自动或手工调整后端存储,将不同的表映射到不同存储引擎上,而整个应用的代码一行也不用改变。
目前版本(1.6
)推荐架构如下:
具体特性可以参考官网介绍
需求
基于上篇实现的Mysql主从复制,本文需要使用Mycat实现读写分离用于解决遗留问题,元结构如下:
如果是多个Mycat
,可以以此扩展.
实现
Mycat
是用java
实现的,按说直接java -jar
即可,但是由于是server
端,并且有明确的配置目录($MYCAT_HOME/conf
),考虑到扩展问题,首先将其封装成docker
镜像,再根据不同的配置文件映射来启动容器.
制作docker镜像
#!/bin/bash
docker volume create mycat
export MYCAT_CONF_HOME="/var/lib/docker/volumes/mycat/conf"
# 创建映射的配置文件目录,使用01作为ID来区分是哪个mycat实例
mkdir -p $MYCAT_CONF_HOME/01
docker run -d --name mycat01 -v mycat_01_conf:/opt/mycat/conf
配置
server.xml
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
<property name="defaultSchema">TESTDB</property>
<!--No MyCAT Database selected 错误前会尝试使用该schema作为schema,不设置则为null,报错 -->
<!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
<property name="defaultSchema">TESTDB</property>
</user>
schema.xml
docker run -d --name percona-master01 -v /etc/localtime:/etc/localtime -v mysql_master_01:/var/lib/mysql -v mysql_cnf_master_01:/etc/my.cnf.d -p 6306:3306 -e MYSQL_ROOT_PASSWORD=master01 percona:5.7.23