文档章节

MyCat读写分离配置

爱宝贝丶
 爱宝贝丶
发布于 09/10 10:07
字数 1151
阅读 973
收藏 13

        读写分离在我们配置数据库集群时是必然会考虑的一个点,因为这可以有效的降低主库的负载,并且在读多余写的情况下,绝大部分的读请求都可以分发到各个不同的从库上。即使从库负载不够,也可以通过增加从库的方式来提升整体的查询效率。本文主要讲解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的配置顺序schemadataNodedataHost的顺序不能发生变化;
  • dataHost中通过writeHost将主库和从库都配置进去,MyCat可以通过show master status来检测具体哪一个是主库,哪一个是从库;
  • dataHost上有两个参数:balanceswitchType
    • 这里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主从模式搭建的两种方式,并且详细讲解了其配置方式中需要注意的点。

© 著作权归作者所有

爱宝贝丶

爱宝贝丶

粉丝 336
博文 136
码字总数 456053
作品 0
武汉
程序员
私信 提问
使用mycat实现mysql读写分离

使用mycat实现mysql读写分离 mycat在数据层的作用和nginx在应用层很像,都是代理后面实际的服务。mycat实现了mysql协议,对外看起来就是一个mysql数据库,可以和使用普通mysql一样进行操作 ...

肥肥小浣熊
2018/05/06
0
0
Mycat - 实现数据库的读写分离与高可用

mysql主从实现 Mycat不负责任何的数据同步问题,mysql的主从复制还得从mysql层面来实现;如果没有实现mysql的主从复制,后文就都成 如果想学习Java工程化、高性能及分布式、深入浅出。微服务...

编程SHA
02/20
198
0
高性能Mysql中间组件Mycat安装配置

高性能Mysql中间组件Mycat安装配置 由于公司项目需要使用到读写分离,但是官方版本的Mysql-proxy读写分离组件太不稳定且有很多BUG,最终决定使用Mycat作为中间组件,其实读写分离只是Mycat中...

幸运券发放
2018/05/02
0
0
Mycat - 高可用与负载均衡实现,满满的干货!

前情回顾 Mycat - 实现数据库的读写分离与高可用中我们实现了mysql的读写分离与高可用,有几个点我们回顾下 如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Net...

编程SHA
02/20
151
0
使用MyCAT实现MySQL的分库分表、读写分离、主从切换

MyCAT及MySQL实例部署情况: MyCAT: IP:10.20.8.57,Port:3310/3311 MySQL : db1-M1,IP:10.20.8.126,Port:3306 db1-M2,IP:10.20.8.126,Port:3307 db2-M1,IP:10.25.80.7,Port:......

橡皮高
2018/05/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

浅谈prototype原型模式

一、原型模式简介 原型(Prototype)模式是一种对象创建型模式,他采取复制原型对象的方法来创建对象的实例。使用原型模式创建的实例,具有与原型一样的数据。 原型模式的特点: 1、由原型对...

青衣霓裳
22分钟前
6
0
shell mysql 备份

#!/bin/bash time2=$(date "+%Y-%m-%d-%H:%M:%S") /usr/local/mysql/bin/mysqldump -uroot -p ad > /usr/local/mysql/backup/"$time2".sql 变量引用原来是这么用的。......

奋斗的小牛
30分钟前
4
0
Jmeter监控Linux服务器操作

系统:Win7 64位 工具:Jmeter 4.0 要准备好的插件:JMeterPlugins-Standard-1.4.0,ServerAgent-2.2.1 解压JMeterPlugins-Standard-1.4.0.zip,将其中\lib\ext\JMeterPlugins-Standard.jar......

魔鬼妹子
30分钟前
5
0
系列文章:云原生Kubernetes日志落地方案

在Logging这块做了几年,最近1年来越来越多的同学来咨询如何为Kubernetes构建一个日志系统或者是来求助在这过程中遇到一系列问题如何解决,授人以鱼不如授人以渔,于是想把我们这些年积累的经...

Mr_zebra
30分钟前
5
0
入门必备!快速学会用Aspose.Words在表格中插入和删除列!

Aspose.Words For .Net(点击下载)是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft W...

mnrssj
35分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部