mysql 第十七篇文章~mycat的读写分离

一 简介 今天咱们来聊聊mycat的一个功能 读写分离
二 前沿: mycat的核心功能之一,读写分离的测试

   1读写分离的需求
     1 将业务的读需求定向到从库去查询,减轻主库压力
     2 将业务的特殊读需求定向到主库去查询
   2 读写分离要考虑的问题
    1 当从库出现问题时踢出有问题的从库(从库down机或者复制停止)
    2 当从库出现延迟时踢出有问题的从库(单个从库延迟),但是当从库正常时,从库节点从新提供读服务
    3 当所有提供读取的从节点的从库出现问题时,查询指向主库,当从库恢复正常时,从库节点从新提供读服务
四 测试与配置
   一 环境配置 与初步测试
   1 修改schemal.xml配置文件
      在<writeHost>标签内添加
      <readHost host="readM1" url="1.1.1.2:3306" user="mycat" password="mycat"> </readHost>
      <heartbeat>show slave status</heartbeat> 监控主从服务
   2 登录管理服务端口9066
      reload @@config 重新加载配置文件
   3 登录执行服务端口8086
     1 解析数据查询语句
      explain select * from people
      | DATA_NODE | SQL |
      | db1 | SELECT * FROM people LIMIT 100 |
      | db2 | SELECT * FROM people LIMIT 100 |
     在这里我们也可以发现 我们搜全表数据 自动加上了limit 100
    2 执行查询语句并查询日志
      1 select * from people
      2 过滤相关日志可发现以下内容
         threadId=28911, charset=utf8, txIsolation=3, autocommit=true, attachment=db1{SELECT *
         FROM people
         WHERE id > 151
         LIMIT 100}, respHandler=SingleNodeHandler [node=db1{SELECT *
         FROM people
         WHERE id > 151
         LIMIT 100}, packetId=17], host=1.1.1.2, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]
     3 select操作解析到从库,证明读写分离完成
二 模拟故障1
    1 从库stop slave
    2 观察mycat日志
       观察日志发现 found MySQL master/slave Replication err !!
    3 执行查询并过滤相关日志
       threadId=28911, charset=utf8, txIsolation=3, autocommit=true, attachment=db1{SELECT *
       FROM people
       WHERE id > 151
       LIMIT 100}, respHandler=SingleNodeHandler [node=db1{SELECT *
       FROM people
       WHERE id > 151
        LIMIT 100}, packetId=17], host=1.1.1.1, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]
       这里变成了主库IP,查询成功
    4 从库 start slave
    5 再次执行查询并过滤日志,发现slave继续提供读操作
三 模拟故障2
   1 从库stop slave
   2 从库设置延时库
   3 从库start slave
   4 观察mycat日志
    观察日志发现 found MySQL master/slave Replication delay !!
   5 执行查询并过滤相关日志
   threadId=28911, charset=utf8, txIsolation=3, autocommit=true, attachment=db1{SELECT *
   FROM people
   WHERE id > 151
   LIMIT 100}, respHandler=SingleNodeHandler [node=db1{SELECT *
   FROM people
   WHERE id > 151
   LIMIT 100}, packetId=17], host=1.1.1.1, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]
   这里变成了主库IP,查询成功
   6 将从库恢复正常
   7 再次执行查询并过滤日志,发现slave继续提供读操作
四 特殊需求
  需求说明:一些sql需要强制走主库
  样例说明: /*#mycat:db_type=master*/ select * from people 根据注解选择数据源
  具体说明:从mycat 1.6开始,对于一些特殊的sql语句,采用注解实现,这里的例子仅仅是一个简单的单表查询,复杂语句并未做测试
五 总结
通过测试我们可以发现,mycat完美的支持了读写需求的完全功能,通过注解可以实现特殊的sql查询需求,当然这只是测试,仅供参考哦

这就是今天的成果

时间: 2024-08-08 02:10:55

mysql 第十七篇文章~mycat的读写分离的相关文章

mysql 第二十篇文章~mycat 分片规则的初步讲解

一 简介:今天咱们来聊聊分片规则的初步理解 二 前沿:mycat的分片规则是十分丰富的,此外还可以根据java进行扩展 三 文件:rule.xml 四 具体分片规则: <tableRule name="rule1">  <tableRule name="rule2">  <tableRule name="sharding-by-intfile">  <tableRule name="auto-s

mysql 第二十七篇文章~相关分片功能的测试七

一 简介:今天咱们来进行测试 二分片规则 auto-sharding-rang-mod 1 table 相关配置   <tableRule name="auto-sharding-rang-mod">  <rule>  <columns>id</columns>  <algorithm>rang-mod</algorithm>  </rule>  </tableRule>- 2 functi

Mycat实现读写分离

场景介绍: 第一组:MySQL 普通主从配置(1主1从)情况下,读写分离模式的测试验证MySQL 普通主从配置(1主1从)情况下,自动切换的模式的验证 mycat实现读写分离. 节点宕机切换.

Mysql + keepalived 实现双主热备读写分离【转】

Mysql + keepalived 实现双主热备读写分离 2013年6月16日frankwong发表评论阅读评论 架构图 系统:CentOS6.4_X86_64软件版本:Mysql-5.6.12,Keepalived-1.2.7环境简介:1.Master-A 192.168.1.168 (Mysql+Keepalived)2.Master-B 192.168.1.169 (Mysql+Keepalived)3.写入VIP 192.168.100 (168主,169从)4.读取VIP 192.1

springboot2.0+mycat实验读写分离

声明:用户到达一定程度,架构就必须要考虑,因为在这个前提下,读写分离,尤为重要. 1.搭建mysql主从复制 https://www.cnblogs.com/ywjfx/p/10264383.html 2.安装并配置mycat实现读写分离 https://www.cnblogs.com/ywjfx/p/10320758.html 3.代码实现读写分离 https://github.com/812406210/springboot-mycat 这样就实现了! 有问题可以留言,整个过程本人都一个个尝

MyCat实现读写分离+分库分表+全局表

前言 mycat功能强大,配置简单,作为数据库中间件,是一个非常优秀的开源产品,关于MyCat的部署安装,可以参考博文:MyCat部署安装. 本博文将展示mycat的如下功能: 读写分离: 分库分表: 全局表: 环境如下: 系统 IP 主机名 服务 Centos 7.5 192.168.20.2 mysql01 MySQL 5.7.24 Centos 7.5 192.168.20.3 mysql02 MySQL 5.7.24 Centos 7.5 192.168.20.3 mysql03 MyS

Mycat实现读写分离(一)

Mycat介绍 Mycat是一个国产中间件产品,作用在应用层和数据库之间架桥,使应用通过MyCat来对后端数据库进行管理,是一款国人自主的开源的中间件产品.算是比较优秀的一款,前身是阿里公司在维护,很多公司也慢慢的在尝试接入这个产品,但不得不说官方文档似乎做的不太友好.至于为什么选择MyCat可能只有使用者知道了,下面我们用比较通俗的语言来介绍这款产品,也方便自己以后翻阅. Mycat的安装 1)由于需要JDK支持,首先安装JDK环境: [[email protected] local]# ta

mysql数据业务垂直+水平分割+主从复制读写分离

友情提示:本人第一次写技术博客,会继续完善,尽量做到图文并茂,通俗易懂,如果有什么写的不好的地方,还请大家多多提意见,您的意见将是我宝贵的资源.如果有兴趣的话,还可以一起讨论相关技术哦,亲!一定要注意软件版本哦! 联系方式 QQ:794884160 指导老师:双星  冯德勇老师  曾勇老师 一.拓扑图: 垂直+水平分割+主从复制+读写分离完整原理图: 仅说明原理,详细拓扑及参数参考本次实验拓扑图 本次试验拓扑图:(上图左侧部分) 二.实验描述: 根据业务原型先进行数据库垂直切割,然后用户数据根据

mysql数据库的主从同步,实现读写分离 g

https://blog.csdn.net/qq_15092079/article/details/81672920 前言 1 分别在两台centos 7系统上安装mysql 5.7 2 master主服务器的配置 2.1 配置文件my.cnf的修改 2.2 创建从服务器的用户和权限 2.3 重启mysql服务 2.4 查看主服务器状态 3 slave从服务器的配置 3.1 配置文件my.cnf的修改 3.2 重启mysql服务 3.3 连接master主服务器 3.4 启动slave数据同步