Mycat读写分离

Posted hao6

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mycat读写分离相关的知识,希望对你有一定的参考价值。

实验环境
以下配置都是建立在mariadb主从没有问题的情况下:

1.三台主机:
在三台机器/etc/hosts添加以下3条主机信息
mycat:192.168.254.24
hostM1:192.168.254.28
hostS1:192.168.254.29
2.需要安装java1.8版本或以上

3.下载mycat源码包
(1)wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
(2)tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
(3)mv mycat /usr/local/
 
mycat配置
 
vim /usr/local/mycat/conf/server.xml设置如下参数
<user name="testuser1">
<property name="password">testuser1</property>
<property name="schemas">testdb,testdb1</property>
</user>
<user name="testuser2">
<property name="password">testuser2</property>
<property name="schemas">testdb,testdb1</property>
<property name="readOnly">true</property>
</user>

#testuser1用来写的用户
#testuser2用来读的用户
#testdb是mycat是逻辑库
 
vim /usr/local/mycat/conf/schema.xml配置(请先备份cp schema.xml schema.xml.bak,然后把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="1000" dataNode="dn1">
</schema>
<schema name="testdb1" checkSQLschema="false" sqlMaxLimit="1000" dataNode="dn2">
</schema>

<dataNode name="dn1" dataHost="hostM1" database="test" />
<dataNode name="dn2" dataHost="hostM1" database="test1" />
<dataHost name="hostM1" maxCon="2000" minCon="1" balance="1" writeType="1" dbType="mysql" dbDriver="native" switchType=
"1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.254.28:3306" user="testuser1" password="testuser1">
<readHost host="hostS1" url="192.168.254.29:3306" user="testuser2" password="testuser2" />
</writeHost>
</dataHost>
</mycat:schema>
 
 
server.xml和schema.xml标绿色处要一致,都是逻辑库,我这里创建了2个逻辑库
dataHost为数据节点名称,database为真实数据库名称即后台数据库test和test1
 
balance:
0表示不开启读写分离,都在master上执行读写操作
1表示都参与select
2表示所有读请求随机在readhost和writehost分担
3表示所有读请求对应到readhost里去
 
writeType
0,所有写操作发送到配置的第一个writeHost
1,所有写操作都随机的发送到配置的writeHost
2,不执行写操作。
 
switchType
-1,不自动切换
1,默认值,自动切换
2,基于MySQL 主从同步的状态决定是否切换
3,基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为 show status like &lsquo;wsrep%&rsquo;
writeHost和readHost分别配置对应后台的mysql主从真实用户密码
 
创建用户并赋予权限(主创建同步到从)
 
grant all on *.* to testuser1@‘%‘ identified by ‘testuser1‘;
grant all on *.* to testuser2@‘%‘ identified by ‘testuser2‘;
 
启动mycat服务并查看端口
 
/usr/local/mycat/bin/mycat start
技术图片
8066是管理端口
9066是连接后端数据库的端口,默认是9066,登录该端口后直接用show @@datasource;语句即可查询主从库的读写状态
 
mysql -h 192.168.254.24 -P8066 -utestuser1 -ptestuser1    (可以执行增删改查)
mysql -h 192.168.254.24 -P9066 -utestuser1 -ptestuser1     (可以查看节点状态)
 
查看心跳状态
show @@heartbeatG
技术图片
 
#查看前端连接状态
show @@connectionG
技术图片
 
#查看后端状态
show @@backendG
技术图片
 
 #查看数据库资源状态
show @@datasource
技术图片
 

以上是关于Mycat读写分离的主要内容,如果未能解决你的问题,请参考以下文章

应用 | 同学,该学MyCat实际应用案例与MyCat读写分离了

MySQL+MyCat分库分表 读写分离配置MySQL+MyCat分库分表 读写分离配置

Mycat读写分离的简单实现

Mycat读写分离的简单实现

Mycat读写分离的简单实现

mycat 读写分离+分库分表+全局表