Mysql读写分离中间件 MyCat
Mycat简介
MyCat使用Mysql的通讯协议模拟成一个MySQl服务器,并建立了完整的Schema(数据库)、Table(数据表)、User(用户)的逻辑模型,并将这套逻辑模型映射到后端的存储节点DataNode上的真实的物理库中,这样一来所有能使用MySQL的客户端及编程语言都能将Mycat当成MYSQLServer使用,不必开发新的客户端。
Mycat的原理:当Mycat收到一个客户端发送的SQL请求,会先对SQL进行语法分析和检查,分析的结果用SQL路由,SQL路由策略支持传统的基于表格的分片字段进行分片,也支持独有的基于数据库E-R关系的分别片策略,对于路由到多个数据节点(DataNode)的SQL,则会对收到的数据集进行”归并“,然后输出到客户端。
DataNode是MyCat的逻辑数据节点,映射到后端的某一个物理数据库的一个Datebase,为了做到系统高可用,每个DataNode可以配置多个引用地址(DataSource),当主DataSource被检测为不可用时,系统会自动切换到下一个可用的DataSource上,这里的DataSoure即可认为是Mysql的主流服务器的地址。
搭建过程
在已经搭好mysql主从的环境
1.安装需求
需要 jdk 1.7
以及 mysql 5.1
以上版本
[root@yundun .ssh]# java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
[root@yundun .ssh]#
[root@yundun .ssh]# mysql --version
mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
[root@yundun .ssh]#
若未安装java,请自行到http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载安装
2.安装过程
到https://github.com/MyCATApache/Mycat-download下载源码包,解压到相应的目录
wget https://github.com/MyCATApache/Mycat-download
tar xzf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
cp -a mycat /opt/mycat
echo 'export PATH=$PATH:/opt/mycat/bin' > /etc/profile.d/mycat.sh
source /etc/profile
useradd mycat -s /sbin/nologin -M
chown mycat.mycat /opt/mycat -R
3.配置读写分离
在 /opt/mycat/conf
目录下有两个文件比较重要,一个是 schema.xml
,另一个是 server.xml
。 server.xml
是修改用于连接mycat的帐号和权限, schema.xml
则是设置后端数据库的具体选项。
server.xml
配置:
#若要设置多个账户,把下面<user>标签内的内容复制即可
<user name="user"> #这里设置用于连接mycat的用户名
<property name="password">abc123</property> #这里设置密码
<property name="schemas">firewall</property> #这里设置连接的数据库名字(s逻辑库),改名字要与schema.xml对应(可以与真实数据库名字不同)
<property name="readOnly">true</property> #这里设置是否只读,需要写权限只需把这行注释
</user>
schema.xml
设置:
#默认的配置文件标签比较多,以下是仅仅是配置读写分离
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="firewall" checkSQLschema="false" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="localhost1" database="firewall" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="-1">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="172.16.10.3:3306" user="dbuser" password="123456">
<readHost host="hostS2" url="172.16.10.4:3306" user="dbuser" password="123456" />
</writeHost>
</dataHost>
</mycat:schema>
说明:
schema标签用来定义mycat实例中的逻辑库,mycat可以有多个逻辑库。
name
是逻辑库名字, server.xml
文件中配置要和这里配置对应 checkSQLschema
,当该值为 true
时,可以去掉逻辑库名字。例如我们执行语句select * from TESTDB.company 。mycat会把语句修改为 select * from company
去掉 TESTDB
。 dataNode
该标签用于绑定逻辑库到某个具体的database上。
datanode 标签定义了mycat中的数据节点,也就是我们所说的数据分片。一个datanode标签就是一个独立的数据分片。
name
是逻辑库的名字,这个名字需要唯一。 dataHost
用于定义该分片属于哪个数据库实例,属性与datahost标签上定义的name对应。 database
用于定义该分片的服务器上的真实数据库名
dataHost标签直接定义了具体数据库实例,读写分离配置和心跳语句。
name
唯一标示dataHost标签,与上层标签 datanode
中的 dataHost
对应 maxCon
指定每个读写实例连接池的最大连接。 minCon
指定每个读写实例连接池的最小连接,初始化连接池的大小 balance
读负载均衡属性
0:不开启读写分离机制,所有读操作都发送到当前可用的writeHost上
1:全部的readHost与stand by writeHost参与select语句的负载均衡
2:所有读操作都随机的在writeHost、readHost上分发
3:所有读请求随机的分发到writeHst对应的readHost执行,writeHost不负担读写压力。 writeType
写负载均衡属性
0:所有的写操作发送到配置的第一个writeHost,第一个挂了切换到第二个。
1:所有的写操作都随机的发送到配置的writeHost,1.5以后版本废弃不推荐。 switchType
自动切换属性
-1不自动切换
1 默认值,自动切换
2 基于MySql主从同步的状态决定是否切换 dbType
指定后端链接的数据库类型目前支持二进制的mysql协议 dbDriver
指定连接后段数据库使用的driver heartbeat
心跳语句,配合主从切换使用
writeHost标签,定义写数据库(服务器)
host
定义该服务器名字 url
定义连接方式(IP+端口) user
连接数据库的帐号 password
连接数据的密码
readHost标签,定义读数据库(服务器)
host
定义该服务器名字 url
定义连接方式(IP+端口) user
连接数据库的帐号 password
连接数据的密码
4.启动mycat
配置好配置文件之后,执行 #mycat start
启动,执行 #netstat -tunlp | grep 8066
检查是否正常
使用 server.xml
里面设置的帐号和密码连接后端真实数据库 # mysql -uuser -p'abc123' -P8066 -h127.0.0.1
此时可以看到在 schema.xml
里面定义的逻辑库的名字
参考文档
[1] http://blog.csdn.net/linlinv3/article/details/51777324
[2] https://github.com/MyCATApache/Mycat-Server
最后更新于 2017-11-21 15:06:09 并被添加「」标签,已有 1245 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处