MyCat读写分离配置
读写分离在我们配置数据库集群时是必然会考虑的一个点,因为这可以有效的降低主库的负载,并且在读多余写的情况下,绝大部分的读请求都可以分发到各个不同的从库上。即使从库负载不够,也可以通过增加从库的方式来提升整体的查询效率。本文主要讲解MyCat
如何进行读写分离的配置。
1. 环境搭建
为了搭建读写分离数据库架构,这里我们需要准备两个数据库,一个作为主库,一个作为从库。本文所使用的方式是通过docker搭建的主从架构,因而可以在本机上直接运行。具体配置如下:
角色 | 主机名 | 主机ip | 主机端口 |
---|---|---|---|
主库 | mysql-master | 127.0.0.1 | 3306 |
从库 | mysql-slave | 127.0.0.1 | 3307 |
关于docker如何搭建MySQL主从数据库,读者朋友可以阅读本人的文章(Docker搭建MySQL主从集群)。读者朋友也可以通过虚拟机的方式搭建主从数据库,这里就不再赘述。
2. MyCat配置
关于MyCat的配置,其主要是需要在某一个数据库节点上同时指定主库和从库。下面是一个示例:
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="mydb" checkSQLschema="true" sqlMaxLimit="100"> <table name="t_user" primaryKey="id" autoIncrement="true" dataNode="dn1"/> </schema> <dataNode name="dn1" dataHost="dhost1" database="db1"/> <dataHost name="dhost1" maxCon="1000" minCon="10" balance="1" writeType="0" switchType="-1" dbType="mysql" dbDriver="native"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="localhost:3306" user="root" password="root"/> <writeHost host="hostS1" url="localhost:3307" user="root" password="root"/> </dataHost> </mycat:schema>
关于上述配置,主要有如下几点需要说明:
- xml的配置顺序
schema
、dataNode
和dataHost
的顺序不能发生变化; - 在
dataHost
中通过writeHost
将主库和从库都配置进去,MyCat
可以通过show master status
来检测具体哪一个是主库,哪一个是从库; - 在
dataHost
上有两个参数:balance
和switchType
。- 这里
balance
可以指定四个值,其各个值的含义如下:- 0表示不开启读写分离机制,所有的读写操作都发送到writeHost上;
- 1表示开始读写分离机制,所有的读操作都会发送到slave和standby-master上,所谓的standby-master指的是当前master的备用master节点;
- 2表示所有的读操作随机的在master和slave上分发;
- 3表示所有的读操作都分发到slave上,而master和standby-master都不负担读操作;
- 这里
switchType
也可以指定四个值,各个值的含义如下:- -1表示当master挂了的时候,主从不进行自动切换;
- 1表示当master挂了的时候,主从进行自动切换;
- 2表示当master挂了的时候,基于MySQL的主从复制状态来决定是否进行自动切换;
- 3表示当master挂了的时候,基于MySQL galary cluster的模式进行自动切换。
- 这里
- 在进行读写分离的时候,如果master节点宕机,那么此时,slave节点还是可以正常提供读操作的,而对于客户端发送的写操作,将会抛出异常。
上述配置是读写分离的第一种方式,还有一种配置方式,就是将slave节点写到master节点内部,从而表明从属关系。其配置方式如下:
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="mydb" checkSQLschema="true" sqlMaxLimit="100"> <table name="t_user" primaryKey="id" autoIncrement="true" dataNode="dn1"/> </schema> <dataNode name="dn1" dataHost="dhost1" database="db1"/> <dataHost name="dhost1" maxCon="1000" minCon="10" balance="1" writeType="0" switchType="-1" dbType="mysql" dbDriver="native"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="localhost:3306" user="root" password="root"> <readHost host="hostS1" url="localhost:3307" user="root" password="root" weight="1"/> </writeHost> </dataHost> </mycat:schema>
对于这种配置方式,有相关的文章说,如果master宕机,那么这种方式配置的slave机器就无法提供读服务,但是根据笔者的测试,其还是可以正常提供读服务的,因而上述两种方式没有特别大的区别。
3. 小结
本文主要讲解了MyCat
主从模式搭建的两种方式,并且详细讲解了其配置方式中需要注意的点。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
不要小看小小的 emoji 表情
前言 好久没更新了,最近事比较多,或许下个月就会恢复到正常的发文频次。 这篇文章得从一个 emoji 表情开始,我之前开源的一个 IM 项目中有朋友提到希望可以支持 emoji 表情传输。 https://github.com/crossoverJie/cim/issues/12 正好那段时间有空,加上这功能看着也比较简单准备把它实现了。 <!--more--> 但在真正实现时却发现没那么简单。 我首先尝试将一个 emoji 表情存入数据库看看: 果不其然的出错了,导致这个异常的原因是目前数据库所支持的编码中并不能存放 emoji,那 emoji 表情到底是个什么东西呢。 本质上来说计算机所存储的信息都是二进制 01,emoji 也不例外,只要存储和读取(编解码)的方式一致那就可以准确的展示这个信息。 更多编解码的内容后文再介绍,这里先想想如何快速解决问题。 存储 emoji 虽说想要在 MySQL 中存储 emoji 的方式也有好几种,比如可以升级存储字符集到可以存放 emoji ,但这种需要 MySQL 的版本支持。 所以更保险的方式还是在应用层解决,比如我们是否可以将...
- 下一篇
MyCat数据库的基础配置及使用
一、为什么需要分布式数据据库 随着计算机和信息技术的迅猛发展,行业应用系统的规模迅速扩大,行业应用所产生的数据量呈爆炸式增长,动辄达到数百TB甚至数百PB的规模,已远远超出传统计算技术和信息系统的处理能力,集中式数据库面对大规模数据处理逐渐表现出其局限性。因此,人们希望寻找一种能快速处理数据和及时响应用户访问的方法,也希望对数据进行集中分析、管理和维护。这已经成为迫切需求。 分布式数据库是在集中式数据库的基础上发展起来的,是计算机技术和网络技术结合的产物。分布式数据库是指数据在物理上分布而在逻辑上集中管理的数据库系统。物理上分布是指数据分布在物理位置不同并由网络连接的节点或站点上;逻辑上集中是指各数据库节点之间的逻辑上是一个整体,并由统一的数据库管理系统管理。不同的节点分布可以跨不同的机房、城市甚至国家。 二、分布式数据库的特点 分布式数据库具有透明性、数据冗余性、易于扩展性、自治性等特点,还具有经济、性能优越、响应速度更快、灵活的体系结构、易于集成现有系统等特点。 分布式数据库尽管有着天生的高贵血统,但它依赖调整网络,对事务的处理远没有传统数据库成熟,在很长一段时间内分布式数据存储将...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Hadoop3单机部署,实现最简伪集群
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题