温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MyCat读写分离配置

发布时间:2020-07-24 07:42:11 来源:网络 阅读:151 作者:艾弗森哇 栏目:数据库

    读写分离在我们配置数据库集群时是必然会考虑的一个点,因为这可以有效的降低主库的负载,并且在读多余写的情况下,绝大部分的读请求都可以分发到各个不同的从库上。即使从库负载不够,也可以通过增加从库的方式来提升整体的查询效率。本文主要讲解MyCat如何进行读写分离的配置。

1. 环境搭建

        为了搭建读写分离数据库架构,这里我们需要准备两个数据库,一个作为主库,一个作为从库。本文所使用的方式是通过docker搭建的主从架构,因而可以在本机上直接运行。具体配置如下:

角色主机名主机ip主机端口
主库mysql-master127.0.0.13306
从库mysql-slave127.0.0.13307

        关于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

    • -1表示当master挂了的时候,主从不进行自动切换;

    • 1表示当master挂了的时候,主从进行自动切换;

    • 2表示当master挂了的时候,基于MySQL的主从复制状态来决定是否进行自动切换;郑州不孕不育医院性价比哪家好:http://yyk.39.net/zz3/zonghe/1d427.html

    • 3表示当master挂了的时候,基于MySQL galary cluster的模式进行自动切换。

    • 0表示不开启读写分离机制,所有的读写操作都发送到writeHost上;

    • 1表示开始读写分离机制,所有的读操作都会发送到slave和standby-master上,所谓的standby-master指的是当前master的备用master节点;

    • 2表示所有的读操作随机的在master和slave上分发;

    • 3表示所有的读操作都分发到slave上,而master和standby-master都不负担读操作;

    • 这里balance可以指定四个值,其各个值的含义如下:

    • 这里switchType也可以指定四个值,各个值的含义如下:https://www.jianshu.com/p/3b9c64fdcec9

  • 在进行读写分离的时候,如果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主从模式搭建的两种方式,并且详细讲解了其配置方式中需要注意的点。


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI