Mycat 读写分离详解
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 读写分离详解的更多相关文章
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
转载:http://freeloda.blog.51cto.com/2033581/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负 ...
- Nginx反向代理、负载均衡、页面缓存、URL重写及读写分离详解
大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...
- [转载]Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...
- (转)Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
原文:http://blog.51cto.com/freeloda/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Ng ...
- MySql的主从复制以及读写分离详解
MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中, ...
- mysql高可用架构之MHA,haproxy实现读写分离详解
MySQL高可用架构之MHA 一.运维人员需要掌握的MySQL技术: 1.基本SQL语句 2.基本的管理[库表数据的管理 权限的管理] 3.容灾 保证数据不丢失. 二.工作中MySQ ...
- LVS+MYCAT读写分离+MYSQL同步部署手册(第三版)
1 配置MYSQL主备同步 1.1 测试环境 mysql版本:5.6.24: 操作系统内核版本:Linux-3.13-0-32 主数据库IP:192.168.10.3: 主数据库名:d ...
- mysql主从同步+mycat读写分离+.NET程序连接mycat代理
背景 最近新项目需要用到mysql数据库,并且由于数据量大的原因,故打算采用1主1从(主数据库负责增.删.改操作:从数据库负责查操作)的数据库架构,在实现主从之后还要实现读写分离的代理,在网上搜寻了很 ...
- mycat数据库集群系列之mycat读写分离安装配置
最近在梳理数据库集群的相关操作,现在花点时间整理一下关于mysql数据库集群的操作总结,恰好你又在看这一块,供一份参考.本次系列终结大概包括以下内容:多数据库安装.mycat部署安装.数据库之读写分离 ...
随机推荐
- Hadoop序列化与Java序列化
序列化就是把内存中的对象的状态信息转换成字节序列,以便于存储(持久化)和网络传输 反序列化就是就将收到的字节序列或者是硬盘的持久化数据,转换成内存中的对象. 1.JDK的序列化 只要实现了serial ...
- rpm检验是否被改动过
参考原文http://vbird.dic.ksu.edu.tw/linux_basic/0520rpm_and_srpm.php#rpmmanager_verify rpm -qVa (当然可 ...
- 集成电路883和883b有什么区别
根据用途,元器件的质量等级可分为:用于元器件生产控制.选择和采购的质量等级和用于电子设备可靠性预计的质量等级两类,两者有所区别,又相互联系. 用于元器件生产控制.选择和采购的质量等级 元器件的质量等级 ...
- win8.1中安装rabbitmq
项目测试的时候,用的是项目组linux测试机上的rabbitmq,为了方便自己随时使用,便在自己的电脑win8.1上也安装了一套,安装过程如下: 一.准备erlang和rabbitmq的安装程序: ...
- Excel 2010去掉网格线
怎么去掉Excel中的网格线? 具体错误步骤如下: 1.新建excel文件,双击打开文件 2.打开视图 3.取消勾选"网格线"
- AM335X的USB otg网卡(RNDIS /Ethernet Gadget)调试
重新编译内核(2.6.29) 2.6.29内核 Device Drivers ---> USB support ---> USB Gadget Support ...
- code is 9998;desc is 插入失败exception is org.hibernate.exception.JDBCConnectionException: Could not op
1.错误描述 [ERROR:]2015-05-05 09:27:12,090 [插入失败] org.hibernate.exception.JDBCConnectionException: Could ...
- weblogic部署web项目出现错误
1.错误描述 <2015-3-15 下午02时13分01秒 CST> <Info> <Security> <BEA-090905> <Disabl ...
- Java中集合List,Map和Set的区别
Java中集合List,Map和Set的区别 1.List和Set的父接口是Collection,而Map不是 2.List中的元素是有序的,可以重复的 3.Map是Key-Value映射关系,且Ke ...
- Django学习-16-Session
1.保存在服务器的键值对 2.Session做验证时,还要依赖Cookie(重要).当用户登录成功时,生成随机字符串,一份放到Session,一份放到Cookie.当用户再次登录, ...