mycat 测试主从读写分离
下载解压及创建用户组和目录属性
下载地址:1、https://github.com/MyCATApache/Mycat-download。2、http://dl.mycat.io/
wget http://dl.mycat.io/1.6.6.1/Mycat-server-1.6.6.1-release-20180908155252-linux.tar.gz
tar -zxf Mycat-server-1.6.6.1-release-20180908155252-linux.tar.gz -C /usr/local/
groupadd mycat
useradd mycat -g mycat
chown -R mycat:mycat mycat
mycat主要配置3个参数文件需要配置
--server.xml:是Mycat服务器参数调整和用户授权的配置文件。
--schema.xml:是逻辑库定义和表以及分片定义的配置文件。
--rule.xml: 是分片规则的配置文件,分片规则的具体一些参数信息单独存放为文件,也在这个目录下,配置文件修改需要重启MyCAT。
配置server.xml
server.xml,用户权限及表的精细权限
<user name="ht">
<property name="password">ocm123</property>
<property name="schemas">sakila</property>
</user>
配置schema.xml
[mycat@redis04 conf]$ cat schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="sakila" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> </schema>
<dataNode name="dn1" dataHost="localhost1" database="sakila" />
<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="192.168.20.201:3306" user="ht" password="ocm123">
<!-- can have multi read hosts -->
<readHost host="hostS2" url="192.168.20.203:3306" user="ht" password="ocm123" />
</writeHost>
<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
</dataHost>
</mycat:schema> schema.xml schema的值与server.xml中schema的值是多对1的关系,server.xml中schema的值可以是多个、schema.xml schema的值是唯一,可以有多个schema。schema 相对于mysql中的database
dataNode 数据分片。一个dataNode标签就是一个独立的数据分片。
dataHost 物理主机
balance属性
负载均衡类型,目前的取值有3种:
1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
2. balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
3. balance="2",所有读操作都随机的在writeHost、readhost上分发。
4. balance="3",所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力,注意balance=3只在1.4及其以后版本有,1.3没有。
writeType属性
负载均衡类型,目前的取值有3种:
1. writeType="0", 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
2. writeType="1",所有写操作都随机的发送到配置的writeHost,1.5以后废弃不推荐。
switchType属性
- -1 表示不自动切换
- 1 默认值,自动切换
- 2 基于MySQL主从同步的状态决定是否切换
- 3 基于MySQL galary cluster的切换机制(适合集群)(1.4.1)心跳语句为 show status like ‘wsrep%’.
启动mycat
mycat start 启动
mycat stop 停止
mycat console 前台运行
mycat restart 重启服务
mycat pause 暂停
mycat status 查看启动状态
连接和管理mycat
mysql -h 192.168.20.204 -P 8066 -u ht -p --应该用连接
mysql -h 192.168.20.204 -P 9066 -u ht -p --管理 ,查看mycat的详细信息
打开mycat日志debug,为下面查看具体路由和调试做准备
vi log4j2.xml
<!--<AsyncLogger name="io.mycat" level="debug" includeLocation="true" additivity="false">-->
<!--<AppenderRef ref="Console"/>-->
<!--<AppenderRef ref="RollingFile"/>-->
<!--</AsyncLogger>-->
执行select语句看后台日志
SELECT * from sakila.actor a where a.actor_id=1; 2018-09-12 14:13:42.433 DEBUG [$_NIOREACTOR-2-RW] (io.mycat.server.ServerQueryHandler.query(ServerQueryHandler.java:57)) - ServerConnection [id=1, schema=null, host=192.168.20.204, user=ht,txIsolation=3, autocommit=true, schema=null]SELECT * from sakila.actor a where a.actor_id=1
2018-09-12 14:13:42.434 DEBUG [$_NIOREACTOR-2-RW] (io.mycat.cache.impl.EnchachePool.get(EnchachePool.java:77)) - SQLRouteCache miss cache ,key:sakilaSELECT * from sakila.actor a where a.actor_id=1
2018-09-12 14:13:42.434 DEBUG [$_NIOREACTOR-2-RW] (io.mycat.server.NonBlockingSession.execute(NonBlockingSession.java:126)) - ServerConnection [id=1, schema=null, host=192.168.20.204, user=ht,txIsolation=3, autocommit=true, schema=null]SELECT * from sakila.actor a where a.actor_id=1, route={
1 -> dn1{SELECT * from sakila.actor a where a.actor_id=1}
} rrs
2018-09-12 14:13:42.434 DEBUG [$_NIOREACTOR-2-RW] (io.mycat.backend.mysql.nio.handler.SingleNodeHandler.execute(SingleNodeHandler.java:167)) - rrs.getRunOnSlave() default
2018-09-12 14:13:42.434 DEBUG [$_NIOREACTOR-2-RW] (io.mycat.backend.mysql.nio.handler.SingleNodeHandler.execute(SingleNodeHandler.java:169)) - node.getRunOnSlave() default
2018-09-12 14:13:42.434 DEBUG [$_NIOREACTOR-2-RW] (io.mycat.backend.mysql.nio.handler.SingleNodeHandler.execute(SingleNodeHandler.java:178)) - node.getRunOnSlave() default
2018-09-12 14:13:42.434 DEBUG [$_NIOREACTOR-2-RW] (io.mycat.backend.mysql.nio.handler.SingleNodeHandler.execute(SingleNodeHandler.java:180)) - node.getRunOnSlave() default
2018-09-12 14:13:42.434 DEBUG [$_NIOREACTOR-2-RW] (io.mycat.backend.datasource.PhysicalDBNode.getConnection(PhysicalDBNode.java:96)) - rrs.getRunOnSlave() default
2018-09-12 14:13:42.434 DEBUG [$_NIOREACTOR-2-RW] (io.mycat.backend.datasource.PhysicalDBNode.getConnection(PhysicalDBNode.java:127)) - rrs.getRunOnSlave() default
2018-09-12 14:13:42.434 DEBUG [$_NIOREACTOR-2-RW] (io.mycat.backend.datasource.PhysicalDBPool.getRWBanlanceCon(PhysicalDBPool.java:530)) - select read source hostS2 for dataHost:localhost1
2018-09-12 14:13:42.434 DEBUG [$_NIOREACTOR-2-RW] (io.mycat.backend.mysql.nio.MySQLConnection.synAndDoExecute(MySQLConnection.java:462)) - con need syn ,total syn cmd 1 commands SET names utf8;schema change:false con:MySQLConnection [id=13, lastTime=1536732822434, user=ht, schema=sakila, old shema=sakila, borrowed=true, fromSlaveDB=true, threadId=357, charset=utf8, txIsolation=3, autocommit=true, attachment=dn1{SELECT * from sakila.actor a where a.actor_id=1}, respHandler=SingleNodeHandler [node=dn1{SELECT * from sakila.actor a where a.actor_id=1}, packetId=0], host=192.168.20.203, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]
执行update语句查看后台日志
update sakila.actor a set a.last_name='sahnghai' where a.actor_id=1;
2018-09-12 14:13:41.830 DEBUG [$_NIOREACTOR-2-RW] (io.mycat.server.NonBlockingSession.execute(NonBlockingSession.java:126)) - ServerConnection [id=1, schema=null, host=192.168.20.204, user=ht,txIsolation=3, autocommit=true, schema=null]update sakila.actor a set a.last_name='sahnghai' where a.actor_id=1, route={
1 -> dn1{update sakila.actor a set a.last_name='sahnghai' where a.actor_id=1}
} rrs
2018-09-12 14:13:41.830 DEBUG [$_NIOREACTOR-2-RW] (io.mycat.backend.mysql.nio.handler.SingleNodeHandler.execute(SingleNodeHandler.java:167)) - rrs.getRunOnSlave() default
2018-09-12 14:13:41.830 DEBUG [$_NIOREACTOR-2-RW] (io.mycat.backend.mysql.nio.handler.SingleNodeHandler.execute(SingleNodeHandler.java:169)) - node.getRunOnSlave() default
2018-09-12 14:13:41.830 DEBUG [$_NIOREACTOR-2-RW] (io.mycat.backend.mysql.nio.handler.SingleNodeHandler.execute(SingleNodeHandler.java:178)) - node.getRunOnSlave() default
2018-09-12 14:13:41.830 DEBUG [$_NIOREACTOR-2-RW] (io.mycat.backend.mysql.nio.handler.SingleNodeHandler.execute(SingleNodeHandler.java:180)) - node.getRunOnSlave() default
2018-09-12 14:13:41.830 DEBUG [$_NIOREACTOR-2-RW] (io.mycat.backend.datasource.PhysicalDBNode.getConnection(PhysicalDBNode.java:96)) - rrs.getRunOnSlave() default
2018-09-12 14:13:41.830 DEBUG [$_NIOREACTOR-2-RW] (io.mycat.backend.datasource.PhysicalDBNode.getConnection(PhysicalDBNode.java:127)) - rrs.getRunOnSlave() default
2018-09-12 14:13:41.830 DEBUG [$_NIOREACTOR-2-RW] (io.mycat.backend.mysql.nio.MySQLConnection.synAndDoExecute(MySQLConnection.java:462)) - con need syn ,total syn cmd 1 commands SET names utf8;schema change:false con:MySQLConnection [id=10, lastTime=1536732821830, user=ht, schema=sakila, old shema=sakila, borrowed=true, fromSlaveDB=false, threadId=410, charset=utf8, txIsolation=3, autocommit=true, attachment=dn1{update sakila.actor a set a.last_name='sahnghai' where a.actor_id=1}, respHandler=SingleNodeHandler [node=dn1{update sakila.actor a set a.last_name='sahnghai' where a.actor_id=1}, packetId=0], host=192.168.20.201, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=true]
2018-09-12 14:13:41.940 DEBUG [$_NIOREACTOR-1-RW] (io.mycat.server.NonBlockingSession.releaseConnection(NonBlockingSession.java:386)) - release connection MySQLConnection [id=10, lastTime=1536732821828, user=ht, schema=sakila, old shema=sakila, borrowed=true, fromSlaveDB=false, threadId=410, charset=utf8, txIsolation=3, autocommit=true, attachment=dn1{update sakila.actor a set a.last_name='sahnghai' where a.actor_id=1}, respHandler=SingleNodeHandler [node=dn1{update sakila.actor a set a.last_name='sahnghai' where a.actor_id=1}, packetId=1], host=192.168.20.201, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=true]
开启mycat日志看到读写分离测试成功
mycat 测试主从读写分离的更多相关文章
- MyCat中间件:读写分离(转)
利用MyCat中间件实现读写分离 需要两步: 1.搭建MySQL主从复制环境 2.配置MyCat读写分离策略 一.搭建MySQL主从环境 参考上一篇博文:MySQL系列之七:主从复制 二.配置MyCa ...
- Amoeba搞定mysql主从读写分离
前言:一直想找一个工具,能很好的实现mysql主从的读写分离架构,曾经试用过mysql-proxy发现lua用起来很不爽,尤其是不懂lua脚本,突然发现了Amoeba这个项目,试用了下,感觉还不错,写 ...
- Amoeba实现mysql主从读写分离
Amoeba实现mysql主从读写分离 这段在网上看了下关于amoeba的文章,总体感觉好像要比mysql-proxy好的多,也参考了不少的资料,此文章可能与其他文章作者会有雷同的地方,请谅解,但是此 ...
- windows下Redis 主从读写分离部署
原文:windows下Redis 主从读写分离部署 1.可直接下载window下的运行文件(下面这个链接) 也可以浏览github 查看相应的版本说明文档 https://github.com/Ser ...
- linux中MySQL主从配置(Django实现主从读写分离)
一 linux中MySQL主从配置原理(主从分离,主从同步) mysql主从配置的流程大体如图: 1)master会将变动记录到二进制日志里面: 2)master有一个I/O线程将二进制日志发送到sl ...
- CRL快速开发框架4.4版发布,支持主从读写分离
经过一些调整和优化,4.3已经运行在生产环境,对于不久将会遇到的查询性能,读写分离需求列上日程 读写分离需求 对于一个数据库作了主从发布/订阅,主库为DB1,从库为DB2 所有写入通过DB1,所有查询 ...
- 基于Amoba实现mysql主从读写分离
一.Amoeba简介 Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy.它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特 ...
- 基于 EntityFramework 的数据库主从读写分离服务插件
基于 EntityFramework 的数据库主从读写分离服务插件 1. 版本信息和源码 1.1 版本信息 v1.01 beta(2015-04-07),基于 EF 6.1 开发,支持 EF 6.1 ...
- 基于 EntityFramework 的数据库主从读写分离架构 - 目录
基于 EntityFramework 的数据库主从读写分离架构 回到目录,完整代码请查看(https://github.com/cjw0511/NDF.Infrastructure)中的目 ...
随机推荐
- Golang 入门系列(二)学习Go语言需要注意的坑
上一章节我们已经了解了 Go 环境的配置,不了解的,请查看前面的文章 https://www.cnblogs.com/zhangweizhong/p/9459945.html,本章节我们将学习 Go ...
- Dubbo-Zookeeper安装
安装zookeeper: 1.拖入tar.gz包,解压 2.建立/usr/zookeeper路径,该路径创建logs文件夹和data文件夹 3.进入conf目录,复制一份zoo_sample.cfg为 ...
- Google第三方网站登录(JavaScript SDK)
官网:https://developers.google.com/identity/sign-in/web/ 一.创建应用 a.去谷歌控制台创建应用 网址:https://accounts.g ...
- mybatis 使用注解简化xml映射文件
目录 关于mybatis注解 初次简单使用mybatis注解示例 利用注解实现指定映射 使用注解实现表间关联(1对1) 关于mybatis注解 注解在java中特别常见,mybatis中也支持注解. ...
- 查看CLOUD系统级IIS日志
1.进入IIS,点击查看日志文件 2.分不同文件夹存放
- SpringCloud学习笔记:服务注册与发现Eureka(2)
1. Eureka简介 Eureka是一个用于服务注册和发现的组件,分为Eureka Server和Eureka Client,Eureka Server为Eureka服务注册中心,Eureka Cl ...
- 根据 Power BI Desktop(预览版)中的报表页创建工具提示
根据 Power BI Desktop 中创建的报表页,可创建直观丰富的报表工具提示,这些提示在你将鼠标悬停在视觉对象上时显示. 通过创建用作工具提示的报表页,使自定义工具提示包含视觉对象.图像以及在 ...
- Mysql数据库使用量查询及授权
Mysql数据库使用量查询及授权 使用量查询 查看实例下每个库的大小 select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2 ...
- centos 下安装显卡驱动步骤
一. 先下载自己显卡对应的linux版本的驱动文件, 一般都是.run的一个文件. 二.如果是新安装的系统,先安装编译环境,gcc,kernel-devel,kernel-headers (联网) ...
- CAN总线为什么要有两个120Ω的终端电阻?
1 CAN总线为什么要有两个120Ω的终端电阻? 2 终端电阻的作用是使阻抗连续,消除反射,那为什么只在物理上最远的两个节点加这个匹配电阻,而不是在所有的节点都加上匹配电阻? 高频信号传输时,信号波 ...