设为首页 加入收藏

TOP

Mycat实现读写分离(一)
2019-09-17 18:28:30 】 浏览:36
Tags:Mycat 实现 读写 分离

随着应用的访问量并发量的增加,应用读写分离是很有必要的。当然应用要实现读写分离,首先数据库层要先做到主从配置。

应用实现读写分离至少有两种方法:

  • 应用本身通过代码实现,例如基于动态数据源、AOP的原理来实现写操作时用主数据库,读操作时用从数据库。
  • 通过中间件的方式实现,例如通过Mycat,即中间件会分析对应的SQL,写操作时会连接主数据库,读操作时连接从数据库。

本篇文章是介绍通过Mycat中间件的方式实现读写分离。

1、Mycat

Mycat是一款开源的数据库中间件,其官网为http://www.mycat.io/,其中官方对它介绍为:

Mycat 是一个强大的数据库中间件,不仅仅可以用作读写分离、以及分表分库、容灾备份,而且可以用于多租户应用开发、云平台基础设施、让你的架构具备很强的适应性和灵活性,借助于即将发布的Mycat 智能优化模块,系统的数据访问瓶颈和热点一目了然,根据这些统计分析数据,你可以自动或手工调整后端存储,将不同的表映射到不同存储引擎上,而整个应用的代码一行也不用改变。

Mycat的实现原理为:

Mycat 的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的SQL 语句,首先对SQL 语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL 发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。

关于Mycat更多的介绍大家可以查看官网。

2、部署Mycat

应用是直接连接Mycat,然后Mycat管理了1个主数据库和1个从数据库,架构如下:

其中每个组件对应服务器地址为:

  • Mycat:192.168.197.131
  • 主库:192.168.197.135
  • 从库:192.168.197.136

部署Mycat步骤为:

(1)、安装JDK,由于Mycat是基于Java语言来编写的,所以需要安装JDK,版本为1.8即可。

JDK安装包可以到官网下载,下载后解压,然后配置环境变量,即:

在/etc/profile文件中加入

export JAVA_HOME=/opt/jdk1.8.0_112 export PATH=$JAVA_HOME/bin:$PATH

(2)、下载Mycat安装包,版本为1.6-RELEASE,下载地址为http://dl.mycat.io/1.6-RELEASE/,选择linux环境的版本即可。

(3)、将Mycat安装包上传服务器后解压,即:

tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

以上3步就相当于将Mycat部署好了,现在就需要配置Mycat了。

配置Mycat步骤为:

(1)、在主库和从库中分别创建用于Mycat连接的账号,即:

GRANT CREATE,DELETE,INSERT,SELECT,UPDATE ON jgyw.* TO 'jgywuser'@'192.168.197.131' IDENTIFIED BY 'jgyw@123';

以上语句的意思是创建一个jgywuser用户,该用户只有对jgyw模式下的表有增删改查的权限。

(2)、配置Mycat的schema.xml文件,该文件位于Mycat中conf文件夹下,配置如下:

<mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="jgywnode"> </schema> <dataNode name="jgywnode" dataHost="jgywhost" database="jgyw" /> <dataHost name="jgywhost" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native"> <heartbeat>select user()</heartbeat> <writeHost host="master" url="192.168.197.135:3306" user="jgywuser" password="jgyw@123"> <readHost host="slave" url="192.168.197.136:3306" user="jgywuser" password="jgyw@123"/> </writeHost> </dataHost> </mycat:schema>

其中:

  • schema 标签用于定义MyCat 实例中的逻辑库,MyCat 可以有多个逻辑库,每个逻辑库都有自己的相关配置。可以使用schema 标签来划分这些不同的逻辑库。

  • dataNode 标签定义了MyCat 中的数据节点,也就是我们通常说所的数据分片。一个dataNode 标签就是一个独立的数据分片。

  • dataHost标签直接定义了具体的数据库实例、读写分离配置和心跳语句。其中有几个重要的属性:

    balance属性
    负载均衡类型,目前的取值有3 种:
    balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost 上。 balance="1",全部的readHost 与stand by writeHost 参与select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1 与M2 互为主备),正常情况下,M2,S1,S2 都参与select 语句的负载均衡。 balance="2",所有读操作都随机的在writeHost、readhost 上分发。 balance="3",所有读请求随机的分发到wiriterHost 对应的readhost 执行,writerHost 不负担读压 力,注意balance=3 只在1.4 及其以后版本有,1.3 没有。 writeType 属性 负载均衡类型,目前的取值有3 种: writeType="0", 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个 writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties . writeType="1",所有写操作都随机的发送到配置的writeHost,1.5 以后废弃不推荐。

(3)

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇redis高级 下一篇MySQL在command line Client下的..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目