Mycat实现Mysql主从读写分离

一、概述

关于Mycat的原理网上有很多,这里不再详述,对于我来说Mycat的功能主要有如下几种:

1.Mysql主从的读写分离

2.Mysql大表分片

3.其他数据库例如Oracle,MSSQL,DB2等的读写分离和分片。

之所以第3点单独列出来只是因为它不常用,而且使用的JDBC,连接Mysql则是直接使用Mysql协议。

对于Mycat的分片功能,由于遇到了几个很严重的BUG,同时分片带来的一系列并发问题比较繁杂,因此测试之后放弃了,这里只讨论读写分离。

二、安装配置

1.安装JDK(要求至少JDK1.7以上)

tar -zxvf jdk-7u80-linux-x64.tar.gz
mv jdk1.7.0_80 /usr/local
vi /etc/profile
添加:
export JAVA_HOME=/usr/local/jdk1.7.0_80
export PATH=$JAVA_HOME/bin:$PATH
之后source /etc/profile生效,并用java -version检查新的jdk版本。

2.安装Mycat

#useradd mycat
#passwd mycat --设置密码 #tar xvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
#mv mycat/ /usr/local/ #chown -R mycat.mycat /usr/local/mycat/ #vi /usr/local/mycat/conf/wrapper.conf
wrapper.java.command=%JAVA_HOME%/bin/java

3.文件说明

如上我们将mycat安装到了/usr/local/mycat目录下,我们需要关注的只有2个文件夹conf和logs文件夹:

1)logs文件下只需要关注wrapper.log,这是mycat的日志

2)conf文件下只需要关注server.xml和schema.xml,其他的大多是分片相关的,本文不讨论。

三、读写分离配置

1)当前环境说明:

Mysql 主:mysql01 192.168.20.68

从:mysql02 192.168.20.69

Mycat安装在192.168.20.68上,我们的目的是实现一个名叫leo的库(也叫schema)的读写分离。

2)server.xml配置

关于Mycat性能调优的大多数参数都在此文件中,我们暂不关心,配置读写分离此文件只需要改动如下部分:

Mycat实现Mysql主从读写分离

我们设置了mycat的用户名和密码是root和123456,此账号密码就是外部程序连接用的可以随意设置,下边的user/user只读用户是默认的可以删掉,不删的话修改下schema即可。

3)schema.xml

此文件就是用于具体配置读写分离的配置文件,废话不多说直接贴出具体的配置文件截图,其他地方无需修改。

Mycat实现Mysql主从读写分离

图中设置了1个逻辑节点node1,这个node1对应逻辑主机host1,host1配置了writehost=mysql01,readhost=mysql02,真实的数据库连接账号密码leo/leo也是在这里才出现的。

在如上的xml文件中我们只需要关注4个标签,schema/table/dataNode/dataHost, writehost是dataHost的子标签,readhost是writehost的子标签。

其中schema定义了要读写分离的库,最好是真实库名。table定义了表信息,只有分片才用到因此这里直接全部注释。

dataNode定义了逻辑主机dataHost和库名,这里库名必须是真实的。dataHost定义了逻辑主机对应的物理主机,可以有多个写主机,每个写host可以对应多个读host。

writehost和readhost则包含具体的数据库连接信息。

dbDriver表示使用mysql协议,其他数据库选择JDBC。至于其他参数这里不做详细解释,网上很多。

需要注意的这里只有url部分和账号密码部分包含真正的DB连接信息,其他的诸如dbnode,dbhost,database,host等属性全部是虚拟的,只是为了便于识别才写成真实的主机名和库。

4)读写分离测试

启动mycat:/usr/local/mycat/bin/mycat start

连接mycat:mysql -uroot -p123456 -P8066 -h127.0.0.1

Mycat实现Mysql主从读写分离

Mycat自动连到的是从库,但是有DML操作就会转发到主库,此账户的权限等同于你在writehost和readhost中配置的账户权限。

Mycat实现Mysql主从读写分离

上一篇:java web 开发实战经典(一)


下一篇:POJ 1159 Palindrome(LCS)