mycat介绍

 MYCAT基于阿里开源的Cobar产品而研发的一个数据库中间件。使用NIO重构了网络模块,优化了Buffer内核,增强了聚合,Join等基本特性,同时兼容绝大多数数据库成为通用的数据库中间件。

mycat解决的问题

1.性能问题

应用发送sql语句会首先发送到Mycat上,再根据某中路由规则发送到不同数据库里面

MySQL 开源中间件 mycat数据库中间件_xml

2.数据库连接过多问题

在传统的数据库连接中需要应用于数据库直连,会造成过多的连接

MySQL 开源中间件 mycat数据库中间件_数据库_02

使用mycat后,应用只需要与mycat连接,相当于mycat提供了一个中间层

MySQL 开源中间件 mycat数据库中间件_xml_03

mycat的安装

mycat资源已经托管在github上,可直接下载,建议下载1.5及以上版本 https://github.com/MyCATApache/Mycat-download

由于mycat是由纯Java实现,因此在运行之前需要Java运行环境。需要jdk 1.7 及以上版本支持,Java运行环境安装请参阅其他资料。

下载完成后解压缩即可。

mycat文件结构:解压缩后可看到如下目录

MySQL 开源中间件 mycat数据库中间件_xml_04

bin目录存放mycat的启动脚本

conf目录存放配置文件信息,后续章节会详细介绍

lib目录存放mycat运行依赖包

logs目录存放mycat运行日志文件,后续章节会详细介绍

mycat读写分离

读写分离利用的是mysql的主从复制。事务性的查询无法分离出去(会导致数据不一致),这样会导致无法做到真正的读写分离,因为有些场景可能大部分都是事物性的读。可以使用 galera for mysql 强一致性解决方案(在mycat 1.5以上版本已支持)

在conf目录下找到schema.xml 配置逻辑库TESTDB如下。假设有5个表分别是customer、product、order、order_detail和payment表

在schema.xml中

配置数据库表

MySQL 开源中间件 mycat数据库中间件_数据库_05

配置数据节点dataNode

MySQL 开源中间件 mycat数据库中间件_xml_06

配置dataHost

MySQL 开源中间件 mycat数据库中间件_MySQL 开源中间件_07

在server.xml中

配置读写主机server

MySQL 开源中间件 mycat数据库中间件_MySQL 开源中间件_08

配置文件解释:

一、<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" >

这里TESTDB 就是我们对外声称的我们有数据库的名称,必须和server.xml中的用户指定的数据库名称一致

二、<dataNode name="dn1" dataHost="testdb_host" database="test" />

这里只需要改database的名字 test就是真实数据库服务上的数据库名 .

根据你自己的数据库名进行修改

三、<dataHost name="testdb_host" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">

这里需要配置的有三个地方balance、writeType与switchType

1.balance属于负载均衡类型,目前有四种

a) balance=’0’ 表示不开启读写分离机制,所有的读操作都发送到可用的writeHost上

b) balance=’1’ 表示全部的readHost与stand by writeHost参与select语句的负载均衡。即假如当双主双从模式(M1 ->S1 , M2->S2,并且 M1 与 M2 互为主备),正常情况下M2,S1,S2 都参与 select 语句的负载均衡。

c) balance=’2’ 表示所有的读操作都随机在readHost和writeHost上分发。

d) balance=’3’ 表示所有的读操作请求都分发到wirteHost对应的readHost上执行。writeHost不承担读压力。(此选项只支持1.4及以后的版本)

2.writeType属性

a) writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
b) writeType="1",所有写操作都随机的发送到配置的 writeHost。
c) writeType="2",目前版本还没实现。

3.switchType属性

-1:表示不启用主从切换;

 1:为默认值,自动切换;

2:基于主从同步的状态,决定是否切换; 
3:基于多住galary集群切换均可配置多个读写库

四、<writeHost host="hostM1" url="127.0.0.1:3306" user="root" password="root">

<readHost host="hostS1" url="127.0.0.1:3307" user="user" password="user" />

这里是配置的我们的两台读写服务器IP地址访问端口和访问用户的用户名和密码