基于Mycat的读写分离

1 读写分离原理

让主数据库处理事务性增,改,删操作;而从数据库处理查询操作。数据库复制被用来把事务性操作倒置的变更同步到集群中的从数据库。
在这里插入图片描述

2 实现方式

多种实现方式,分为内部配置和使用中间件,例如:
配置多个数据源,根据业务需求访问不同的是数据,制定对应的策略:增加,删除,修改操作访问对应数据,查询访问对应数据,不同数据库做好数据一致性的处理
动态切换数据源,根据配置的文件,业务动态切换访问的数据库:此方案通过spring的AOP,Aspactj来实现动态织入,通过变成继承实现spring中的AbstractRoutingDataSource,来实现数据库访问的动态切换,不仅可以方便扩展。不影响现有程序。而且对此功能的增删也比较容易
通过mycat来实现读写分离:使用mycat提供的读写分离功能,mycat链接多个数据库,数据源只需要链接mycat,对于开发人员而言,他还是链接了一个数据库(实际是mysql的mycat中间件),而且也不需要根据不同业务来选择不同的库,这样就不会多余的代码产生

3. mycat介绍

官网:http://www.mycat.org.cn/

3.1 概述

mycat是一个开源的分布式数据库系统,是一个实现了mysql协议的服务器,前端用户可以把它看做一个数据库代理,用mysql客户端工具和命令行访问,后端可以用mysql原生协议与多个mysql服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信
在这里插入图片描述

3.2 功能

(1)分库分表
(2)主从
(3)热备
(4)读写分离
实现数据库的分布式架构
在这里插入图片描述

3.3 mycat原理

mycat拦截用户发送的sql语句,并对sql语句做出特定的分析,如:分片分析,路由分析,读写分离分析,缓存分析等。然后将此sql发往后端的真实服务器,并将返回结果做适当的处理,最终返回给客户。
在这里插入图片描述
应用程序不能直接访问数据库,而是访问mycat,由mycat与数据库交互,数据库数据再返回给mycat,mycat再返回数据给用户

3.4 mycat应用场景

(1)读写分离,配置最为简单,支持主从切换
(2)分表分库,对于超过1000万的表进行分片,最大支持1000亿的单表分片
(3)多租户应用,每个应用一个库,但应用程序只链接mycat,从而不改造程序本身,实现多租户化
(4)报表系统,借助于mycat的分表能力,处理大规模报表的统计替代Hbase,分析大数据

mycat长期路线图
(1)强化分布式数据库中间件的方面的功能,使之具备丰富的插件,强大的数据库智能优化功能,全面的系统监控功能,以及方便的数据运维工具,实现在线数据扩容,迁移等高级功能
(2)进一步挺进大数据计算领域,深度结合Spark Stream和storm等分布式实时流引擎,能够完成快速的据表关联、排序、分组聚合等OLAP方向的能力,并集成一系列的实时分析算法,能够更容易用mycat实现一些高级数据分析处理功能
(3)不断强化mycat开元社区的技术水平,吸引更多的IT技术专家,打造更好的mycat社区,并将mycat推到apache基金会,成为国内顶级开源项目。

4. mycat安装配置

4.1 安装JDK

[root@mycat ~]#  wget http://dl.mycat.org.cn/jdk-8u20-linux-x64.tar.gz
[root@mycat ~]# tar xf jdk-8u20-linux-x64.tar.gz -C /usr/local/src
[root@mycat local]# ln -s /usr/local/src/jdk1.8.0_20 ./java
[root@mycat local]# cd java/bin/
[root@mycat bin]# ./java -version
java version "1.8.0_20"
Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)

4.2 创建mycat用户

[root@mycat ~]# useradd mycat
[root@mycat ~]# passwd mycat

4.3 下载软件包解压并赋予权限

[root@mycat ~]# wget http://dl.mycat.org.cn/1.6.7.1/Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz
[root@mycat ~]# tar xzf Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz -C /usr/local/src/
[root@mycat local]# ln -s /usr/local/src/mycat/ ./mycat
[root@mycat ~]# chown -R mycat:mycat /usr/local/mycat

4.4 配置环境变量

[root@mycat ~]# vim /etc/profile.d/mycat.sh
## jdk env
JAVA_HOME=/usr/local/java
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
## mycat env
export MYCAT_HOME=/usr/local/mycat
export PATH=$PATH:$MYCAT_HOME/bin
# 加载环境变量
[root@mycat ~]# source /etc/profile.d/mycat.sh

4.5 配置文件详解(/usr/local/mycat/conf下)

server.xml      Mycat 的配置文件,设置账号,参数等
schema.xml    Mycat对应的物理数据库和数据库表的配置
rule.xml		  Mycat分片(分库分表)规则

(1)wrapper.conf

配置jdk
wrapper.java.command=/usr/local/java/bin/java    # 配置jdk工作目录

(2)server.xml

  • user标签
<user name="root">
<property name="password"></property>
<property name="schemas">TESTDB</property>
</user>
user 用户配置节点
--name 登录的用户名,也就是连接Mycat的用户名
--password 登录的密码,也就是连接Mycat的密码
--schemas 数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库db1,db2,则配置db1,dbs
  • privileges标签
对用户的schema以及表进行精细化的DML权限控制
<privileges check="false">
</privileges>
--check 表示是否开启DML权限检查。默认是关闭。server.dtd文件中 <!ELEMENT privileges(schema)*> 说明可以有多个schema的配置。
--dml 顺序说明:insert,update,select,delete
<schema name="db1" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值