码迷,mamicode.com
首页 > 其他好文 > 详细

Mycat实现读写分离

时间:2020-08-28 14:44:00      阅读:52      评论:0      收藏:0      [点我收藏+]

标签:驱动   是什么   pat   地址   sch   扩容   clu   问题   用户   

Mycat是什么?

Mycat 是数据库中间件。主要是做数据分布式存储,也有Atlas普通版的读写分离功能,其最重要还是分布式

Mycat是java语言开发的。是一个开源的分布式数据库系统,是一个实现了MySQL协议的的Server,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生(Native)协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里

  • 支持Mysql集群,可以作为Proxy使用

  • 支持JDBC连接多数据库

  • 支持各种数据库,包括Mysql、mongodb、oracle、sqlserver、hive 、db2 、 postgresql。

  • 支持galera for mysql集群,percona-cluster或者mariadb cluster,提供高可用性数据分片集群

  • 自动故障切换,高可用性

  • 支持读写分离,支持Mysql双主多从,以及一主多从的模式

  • 支持全局表,数据自动分片到多个节点,用于高效表关联查询

  • 支持独有的基于E-R 关系的分片策略,实现了高效的表关联查询

  • 支持一致性Hash分片,有效解决分片扩容难题

  • 多平台支持,部署和实施简单

  • 支持Mysql存储过程调用

  • 以插件方式支持SQL拦截和改写

  • 支持自增长主键、支持Oracle的Sequence机制

 

Mycat应用场景:

  • 单纯的读写分离,此时配置最为简单,支持读写分离主从切换

  • 分表分库,对于超过1000万的表进行分片,最大支持1000亿的单表分片

  • 多租户应用,每个应用一个库,但应用程序只连接Mycat,从而不改造程序本身,实现多 租户化

  • 报表系统,借助于Mycat的分表能力,处理大规模报表的统计

Mycat分片规则:

  • 分表分库虽然能解决大表对数据库系统的压力,但它并不是万能的,也有一些不利之处,因此首要问题是,分不分库,分哪些库,什么规则分,分多少分片。

  • 总体上来说,分片的选择是取决于最频繁的查询SQL的条件,因为不带任何Where语句的查询SQL,会便利所有的分片,性能相对最差,因此这种SQL越多,对系统的影响越大,所以我们要尽量避免这种SQL的产生。 

 

Mycat读写分离部署:

搭建一主一从,一个主机用于处理所有写请求,一台从机负责所有读请求,架构图如下:

技术图片

 

 

 

  • 安装Java环境
    yum -y install java-openjdk
  • 下Mycat软件包
    wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz  
  • 解压到指定路径
    tar -zxf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz  -C  /usr/local/
    
  • 配置环境变量
    echo ‘export PATH=/usr/local/mycat/bin:$PATH‘ >> /etc/profile
    source /etc/profile
    
  • /usr/local/mycat/conf 配置文件说明:

schema.xml 主配置文件(读写分离、高可用、分表、节点控制)
server.xml mycat软件本身相关的配置
rule.xml 分片规则配置文件(分片规则列表、使用方法)

  • /usr/local/mycar/log  日志文件说明:

mycat.log          Mycat工作日志
mycat.pid         pid文件
wrapper.log      Mycat启动相关日志

 

  • 编辑schema.xml主配置文件
    mv /usr/local/mycat/conf/schema.xml /usr/local/mycat/conf/schema.xml.bak
    
    
    vim /usr/local/mycat/conf/schema.xml
    <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="mycat_testdb" checkSQLschema="flase" sqlMaxLimit="100" dataNode="dn1"> </schema> <dataNode name="dn1" dataHost="host1" database= "school" /> <dataHost name="host1" maxCon="1000" minCon="10" balance="2" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="192.168.1.128:3306" user="root" password="abc123"> <readHost host="hostS1" url="192.168.1.130:3306" user="root" password="abc123" /> </writeHost> </dataHost> </mycat:schema> 
  • 修改server.xml配置文件  在server.xml配置文件最底部技术图片
  • schema.xml 配置文件说明
    #定义mycat工作库mycat_testdb是mycat的一个逻辑库,可以自定义,但是涉及另外一个server.xml配置文件。mycat_testdb逻辑库对应dn1这个数据节点
    <schema name="mycat_testdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
    </schema>
    
    # 定义名为dn1这个数据节点的逻辑主机地址。和真实的后端数据库中的school库名。
        <dataNode name="dn1" dataHost="host1" database="school" />

    # host1这个逻辑主机的最大并发连接数。最小连接(类似预热数据,提前连接好,节省临时连接的消耗)。balance默认为1,为负载均衡到所有从库读操作。 writeType默认为0,写操作只分配到第一个writeHost数据库实例组。指定后端数据库软件类型。 dbDriver是驱动。 switchType="1"是主库宕机,自动切换到其他预备主数据库实例组 dbDriver(使用native的话,因为这个值执行的是二进制的mysql协议,所以可以使用mysql和maridb,其他类型的则需要使用JDBC驱动来支持。) <dataHost name="ost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1">

    # mycat监控后端mysql是否可用,走的心跳信息 <heartbeat>select user()</heartbeat>

    # 定义localhost1逻辑主机中的真实主机,这是逻辑主机中的一个真实“可写”节点 <writeHost host="hostM1" url="192.168.1.128:3306" user="root" password="abc123">
    # 定义localhost1逻辑主机中的真实主机,这是逻辑主机中的一个真实“可读”节点 <readHost host="hostS1" url="192.168.1.130:3306" user="root" password="abc123" />
  • server.xml说明

  • 技术图片
  • 启动Mycat
    mycat start
    
  • 查看日志是否启动成功

技术图片

 

 

  




 



 

Mycat实现读写分离

标签:驱动   是什么   pat   地址   sch   扩容   clu   问题   用户   

原文地址:https://www.cnblogs.com/psc0218/p/13555350.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!