1. 原理
MySQL的主从复制和MySQL的读写分离两者有着紧密联系,首先部署主从复制,只有主从复制完了,才能在此基础上进行数据的读写分离。
简单来说,读写分离就是只在主服务器上写,只在从服务器上读,基本的原理是让主数据库处理事务性查询,而从数据库处理select查询,数据库复制被用来把事务性查询导致的改变更新同步到集群中的从数据库。
在高并发下,如图所示那样,mysql的读写分离能更好的提升程序的性能.
2.Mysql读写分离
2.1 Mycat的介绍
MyCAT是mysql中间件,前身是阿里大名鼎鼎的Cobar,Cobar在开源了一段时间后,不了了之。于是MyCAT扛起了这面大旗,在大数据时代,其重要性愈发彰显。而且现在相比于其他的mysql中间件来说,他的社区非常的活跃,而且很多生产环境中在使用.
2.2 Mycat的使用
-
安装和解压
//先下载,我这里是下载的1.6版本 wget https://raw.githubusercontent.com/MyCATApache/Mycat-download/master/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz //解压到/usr/local/目录下 tar zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
-
其次查看mycat的user信息
vim /usr/local/mycat/conf/server.xml
这边的name
和password
主要是为了后期连接mycat.(mycat会代理并连接,操作mysql,这也就是我们所说的中间件功能
),默认端口是:8066(数据连接端口
) 和9066(管理操作端口
) -
完后配置mycat的schema信息
vim /usr/local/mycat/conf/schema.xml
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> <!-- 这里不配置,代表所有的表分片到dn1节点--> </schema> <dataNode name="dn1" dataHost="localhost1" database="taiyuan" /> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM1" url="118.24.205.235:3306" user="taiyuan" password="YZi2hNCSC3LwCy"> <!-- can have multi read hosts --> <readHost host="hostS2" url="106.13.94.55:3306" user="taiyuan" password="DiNx7RT4dPciiD" /> </writeHost> </dataHost> </mycat:schema>
其中,balance指的读写分离类型,目前的取值有4种:
- balance=“0”,
不开启读写分离机制
,所有读操作都发送到当前可用的writeHost上。 - balance=“1”,
全部的readHost与stand by writeHost参与select语句的负载均衡
,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。 - balance=“2”,
所有读操作都随机的在writeHost、readhost上分发
。 - balance=“3”,
所有读请求随机的分发到wiriterHost对应的readhost执行
,writerHost不负担读压力
switchType指的是切换的模式,目前的取值也有4种:
- switchType=’-1’ 表示
不自动切换
- switchType=‘1’ 默认值,表示
自动切换
- switchType=‘2’ 基于MySQL主从同步的状态决定是否切换,心跳语句为
show slave status
- switchType='3’基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为
show status like 'wsrep%'
。
writeType 属性负载均衡类型,目前的取值有 3 种:
- writeType=”0”,
所有写操作发送到配置的第一个 writeHost
,第一个挂了切到还生存的第二个writeHost, 重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties - writeType=”1”,所有写操作都
随机的发送
到配置的 writeHost - writeType=“2”,
不执行写操作
- balance=“0”,
-
最后启动mycat,常用命令有
- /usr/local/mycat/bin/mycat start 启动
- /usr/local/mycat/bin/mycat stop 停止
- /usr/local/mycat/bin/mycat restart 重启
- /usr/local/mycat/bin/mycat pause 暂停
- /usr/local/mycat/bin/mycat status 查看启动状态
- 之后使用Navicat for MySQL连接我们的mycat(user/password是:root/123456 端口:8066)