Mycat 的读写分离是依赖数据库级别的数据主从同步的基础上来实现的(Mysql 的主从配置链接),Mycat 的读写分离是在 schema.xml 配置的 dataHost 节点的 balance 属性来完成,该属性的取值有4种,详细说明如下:

  • balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost上,示例如下:

    该配置虽然配置了 readHost 节点,但是由于 balance = 0 则表示所有的操作语句都发送给当前可用的 writeHost 配置的数据库

    我们执行查询语句如下:

    mysql> select * from tb_sharding_murmur where id= 22;

    通过查询日志如下,发现 select read source hostM1 for dataHost:vmDB1,表示操作的数据库 host 名称为 hostM1

    2018-02-11 21:49:14.957 DEBUG [$_NIOREACTOR-0-RW] (io.mycat.server.NonBlockingSession.execute(NonBlockingSession.java:110)) - ServerConnection [id=1, schema=TEMPDB, host=192.168.2.109, user=mycat,txIsolation=3, autocommit=true, schema=TEMPDB]select * from tb_sharding_murmur where id=22, route={

    1 -> vmDB1-tempdb{select * from tb_sharding_murmur where id=22}

    } rrs

    2018-02-11 21:49:14.958 DEBUG [$_NIOREACTOR-0-RW] (io.mycat.backend.datasource.PhysicalDBPool.getRWBanlanceCon(PhysicalDBPool.java:456)) - select read source hostM1 for dataHost:vmDB1

  • balance="1",全部的readHost与 stand by writeHost 参与 select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1与 M2互为主备),正常情况下,M2,S1,S2都参与 select语句的负载均衡,配置示例如下:

    我们多次执行查询语句如下:

    mysql> select * from tb_sharding_murmur where id= 32;

    通过查询日志如下,发现 select read source hostR1 for dataHost:vmDB1,表示操作的数据库 host 名称为 hostR1,由于我们只有一个M1 主,所以所有的查询操作由读取主机来负责处理

    2018-02-12 02:44:35.480 DEBUG [$_NIOREACTOR-0-RW] (io.mycat.backend.datasource.PhysicalDBPool.getRWBanlanceCon(PhysicalDBPool.java:456)) - select read source hostR1 for dataHost:vmDB2

    2018-02-12 02:44:35.509 DEBUG [$_NIOREACTOR-0-RW] (io.mycat.server.NonBlockingSession.execute(NonBlockingSession.java:110)) - ServerConnection [id=1, schema=TEMPDB, host=192.168.2.109, user=mycat,txIsolation=3, autocommit=true, schema=TEMPDB]SELECT * FROM tb_sharding_murmur where id=32, route={

    1 -> vmDB2-tempdb{SELECT * FROM tb_sharding_murmur where id=32}

    } rrs

  • balance="2",所有读操作都随机的在writeHost、readhost上分发,配置示例如下:

    我们多次执行查询语句如下:

    mysql> select * from tb_sharding_murmur where id= 76;

    通过查询日志可以发现,发现 select read source hostM1 for dataHost:vmDB1,表示从主库处理的操作

    2018-02-12 02:49:59.279 DEBUG [$_NIOREACTOR-0-RW] (io.mycat.backend.datasource.PhysicalDBPool.getRWBanlanceCon(PhysicalDBPool.java:456)) - select read source hostM1 for dataHost:vmDB1

    2018-02-12 02:49:59.411 DEBUG [$_NIOREACTOR-0-RW] (io.mycat.server.NonBlockingSession.execute(NonBlockingSession.java:110)) - ServerConnection [id=1, schema=TEMPDB, host=192.168.2.109, user=mycat,txIsolation=3, autocommit=true, schema=TEMPDB]SELECT * FROM tb_sharding_murmur where id=76, route={

    1 -> vmDB2-tempdb{SELECT * FROM tb_sharding_murmur where id=76}

    也有日志如下,发现 select read source hostR1 for dataHost:vmDB1,表示从主库处理的操作

    2018-02-12 02:49:59.411 DEBUG [$_NIOREACTOR-0-RW] (io.mycat.backend.datasource.PhysicalDBPool.getRWBanlanceCon(PhysicalDBPool.java:456)) - select read source hostR1 for dataHost:vmDB2

    2018-02-12 02:50:01.459 DEBUG [$_NIOREACTOR-0-RW] (io.mycat.server.NonBlockingSession.execute(NonBlockingSession.java:110)) - ServerConnection [id=1, schema=TEMPDB, host=192.168.2.109, user=mycat,txIsolation=3, autocommit=true, schema=TEMPDB]SELECT * FROM tb_sharding_murmur where id=76, route={

    1 -> vmDB2-tempdb{SELECT * FROM tb_sharding_murmur where id=76}

    } rrs

  • balance="3",所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost 不负担读压力,配置示例如下:

    我们执行查询语句如下:

    mysql> select * from tb_sharding_murmur where id= 17;

    通过查询日志如下,发现 select read source hostR1 for dataHost:vmDB1 ,表示操作的数据库 host 名称为 hostR1

    2018-02-12 02:41:25.934 DEBUG [$_NIOREACTOR-0-RW] (io.mycat.backend.datasource.PhysicalDBPool.getRWBanlanceCon(PhysicalDBPool.java:456)) - select read source hostR1 for dataHost:vmDB1

    2018-02-12 02:41:26.072 DEBUG [$_NIOREACTOR-0-RW] (io.mycat.server.NonBlockingSession.execute(NonBlockingSession.java:110)) - ServerConnection [id=1, schema=TEMPDB, host=192.168.2.109, user=mycat,txIsolation=3, autocommit=true, schema=TEMPDB]SELECT * FROM tb_sharding_murmur where id=17, route={

    1 -> vmDB1-tempdb{SELECT * FROM tb_sharding_murmur where id=17}

Mycat 读写分离详解的更多相关文章

  1. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    转载:http://freeloda.blog.51cto.com/2033581/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负 ...

  2. Nginx反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...

  3. [转载]Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...

  4. (转)Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    原文:http://blog.51cto.com/freeloda/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Ng ...

  5. MySql的主从复制以及读写分离详解

    MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中, ...

  6. mysql高可用架构之MHA,haproxy实现读写分离详解

    MySQL高可用架构之MHA 一.运维人员需要掌握的MySQL技术: 1.基本SQL语句 2.基本的管理[库表数据的管理    权限的管理] 3.容灾       保证数据不丢失. 二.工作中MySQ ...

  7. LVS+MYCAT读写分离+MYSQL同步部署手册(第三版)

    1      配置MYSQL主备同步 1.1    测试环境 mysql版本:5.6.24: 操作系统内核版本:Linux-3.13-0-32 主数据库IP:192.168.10.3: 主数据库名:d ...

  8. mysql主从同步+mycat读写分离+.NET程序连接mycat代理

    背景 最近新项目需要用到mysql数据库,并且由于数据量大的原因,故打算采用1主1从(主数据库负责增.删.改操作:从数据库负责查操作)的数据库架构,在实现主从之后还要实现读写分离的代理,在网上搜寻了很 ...

  9. mycat数据库集群系列之mycat读写分离安装配置

    最近在梳理数据库集群的相关操作,现在花点时间整理一下关于mysql数据库集群的操作总结,恰好你又在看这一块,供一份参考.本次系列终结大概包括以下内容:多数据库安装.mycat部署安装.数据库之读写分离 ...

随机推荐

  1. 高性能网络 SR-IOV机制--VF与PF的通信

    PF 驱动是一个专门管理SR-IOV设备全局功能驱动,而且还要配置相关共享资源.PF 驱动 随着Hypervisor 的不同而不同,一般需要具有比普通虚拟机更高的权限才能对其进行操作.PF驱动包含了所 ...

  2. NLP+语篇分析(五)︱中文语篇分析研究现状(CIPS2016)

    摘录自:CIPS2016 中文信息处理报告<第三章 语篇分析研究进展.现状及趋势>P21 CIPS2016 中文信息处理报告下载链接:http://cips-upload.bj.bcebo ...

  3. mongodb3.0分片及java代码连接操作测试(开启用户验证)

    最近抽时间搭建了一下mongodb简单的分片,整个过程还算是蛮顺利,只不过在用户验证这一块遇到了一些问题,好在最后终于搞定. 一.服务器搭建过程: 1.安装四个mongodb:一个作为config.一 ...

  4. Scheme change not implemented

    1.错误描述 2.错误原因 由于在改变Java代码中的方法或运行代码出现,导致Tomcat编译的代码不能替换工作空间的代码,即不能及时同步,出现错误 3.解决办法 (1)关闭Tomcat,clean一 ...

  5. Error:dijit.tree.TreeStoreModel:root query returned 0 items

    1.错误描述 error loading root:                                            Tree.js(第341行) Error:dijit.tre ...

  6. Django学习-24-Ajax

    jQuery.Ajax是原生Ajax的封装,它能自动识别浏览器的Ajax对象HttpResponse(status='404',reason='Page Not Found') 原生Ajax使用Xml ...

  7. 初识SSO与JWT

    以前在学校做项目的时候,登录注销,权限验证这些事情,都是交给框架来做的,每次都是把这个架子拿到项目中去,也没有真正思考过它的过程,总觉的这些都是十分简单的逻辑. 然而来公司工作之后,慢慢觉得登录和权限 ...

  8. 关于vue学习中的一些

    1.Jinkey大神的新手入门攻略 2.小凡vuejs2的视频地址 3.网友翻译的vuejs2官方中文文档 部分报错处理: 1.错误一 vue.js?b6db:2611[Vue warn]: Unkn ...

  9. 【BZOJ2882】工艺(后缀数组)

    [BZOJ2882]工艺(后缀数组) 题面 BZOJ权限题,我爱良心洛谷 题解 最容易的想法: 把字符串在后面接一份 然后求后缀数组就行了... #include<iostream> #i ...

  10. 【HNOI 2002 】营业额统计(splay)

    题面 Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营 ...