分布式核心问题系列目录

分布式核心问题 - SSO单点登录

分布式核心问题 - 分布式锁

分布式核心问题 - 分布式接口幂等性设计

分布式核心问题 - MyCat实现读写分离

--------------------------------------------------------------------------------------------------------------------------

1.什么是读写分离

为了确保数据库产品的稳定性,很多数据库拥有双机热备功能。让主数据库(master)处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库(slave)处理SELECT查询操作。

2.为什么要使用读写分离

项目之初的架构都很简单,满足业务正常运行即可,通常是下图这样:

但是随着访问量的升高,人们对系统的可靠性有了更高的要求,所以为了避免单点故障,对系统应用层进行了横向的扩展,如图:

这样保证了系统应用层的高可用,在发生宕机时,系统对外还是可用的。而且在访问量升高的时候,系统应用层的压力也会得到分摊,使得每一个单体的系统应用的压力在一个合理的区间范围内。但是随着访问量的升高,所有的压力都将集中到数据库这一层。那么数据库这一层能不能像系统应用层那样进行扩展呢?我们想象一下,如果数据库层也像系统应用层那样,进行横向扩展,如图:

那么如果系统应用层产生了一条数据,这条数据应该插入到DB1还是DB2呢?假设插入了DB1,那么这条数据被读取时,应用层怎么知道从哪个数据库读取这条数据呢?随着互联网技术的发展,以及一代代互联网人对互联网的深入研究,人们发现在互联网的系统应用是一个读多写少的应用(即:二八定律,80%的请求用于读、20%的请求用于写)。数据库承载压力大,主要是由这些读的请求造成的,那么我们是不是可以把读操作和写操作分开,让所有读的请求落到专门负责读的数据库上,所有写的操作落到专门负责写的数据库上,写库的数据同步到读库上,这样保证所有的数据修改都可以在读取时,从读库获得,系统的架构如图所示:

如果系统的读请求比较多的话,读库可以多部署几台,这样读请求就可以均摊到多台读库上,降低每一个读库上的压力。但是在写数据的时候,数据要落在一个确定,且唯一的写库中。将大量的读操作从数据库中剥离,让读操作从专用的读数据库中读取数据,大大缓解了数据库的访问压力,也使得读取数据的响应速度得到了大大的提升。但是要注意,如果是一些对数据实时性要求不高的业务场景,可以考虑使用读写分离,反之如果对数据实时性要求比较高的场景就需要慎重考虑一下要不要使用读写分离,权衡一下主从数据同步的时间会不会影响到业务需求。另外一点就是,如果是mysql的话,使用读写分离还可以让不同的存储引擎发挥自己的长处,写库用innodb提供事务支持,读库用myisam提供快速查询。总结下读写分离的作用是:

(1)读写分离可以提高系统并发吞吐能力和负载能力,继而提升数据访问性能

    (2)读写分离可以让不同的存储引擎发挥自己的长处

3.什么是MyCat

从定义和分类来看,它是一个开源的分布式数据库系统,前端的用户可以把它看成一个数据库代理,用MySql客户端和命令行工具都可以访问,而其后端则是用MySql原生的协议与多个MySql服务之间进行通信。MyCat的核心功能是分库分表,即将一个大表水平切分成N个小表,然后存放在后端的MySql数据当中。MyCat发展到目前的版本,已经不是一个单纯的MySql代理了,它的后端支持MySql,Oracle,SqlServer,DB2等主流的数据库,也支持MongoDB这种NoSql数据库。对于开发人员,可以这样理解MyCat:MyCat就是一个近似等于MySql的数据库库服务,你可以使用连接MySql的方式连接MyCat。绝大多数情况,你也可以使用常用的ORM框架连接MyCat,但是对于分片的表,还是建议使用标准SQL语句,这样能够达到最佳的性能。MyCat应用架构图:

4.MyCat实现MySQL的读写分离

       准备工作:两台虚拟机安装好MySQL,笔者192.168.1.50为主机,192.168.1.51为从机

       官网下载MyCat:http://www.mycat.org.cn/

       MyCat安装非常简单,上传服务器解压即用。

tar -zxvf Mycat-server-1.6.7.3-release-20190828135747-linux.tar.gz

       解压完进入conf目录,修改server.xml

       修改同路径下schema.xml文件

       具体这些标签的含意可以到官网下载pdf指南(虽然官网长得像个邪教一样,但文档还是十分详细的)

       回到bin路径下执行命令:./mycat start

       用Navicat连接MyCat(注意端口是8066),密码在server.xml配置,默认为123456

       在主库和从库创建user数据库,字符集utf8mb4,排序规则默认就好,并新建user表。

       之后就可以进行测试了,因为笔者配置了主备,所以插入数据时是先将数据插入到主机然后同步到从机的。验证读写分离的话,我们只需要改变从机的数据,看MyCat断是否读取的从机数据就好。

       主机数据:

       从机数据:

       MyCat数据:

       配置读写分离成功。

MyCat配置读写分离相关推荐

  1. Mycat实现读写分离

    概述 通过Mycat和MySQL的主从复制配合搭建数据库的读写分离,实现MySQL的高可用性.我们将搭建:一主一从.双主双从两种读写分离模式. 一主一从模式 一主一从模式是指一个主机用于处理所有写请求 ...

  2. 【mycat】读写分离

    在此之前,我们需要安装双主双从的mysql数据库 https://blog.csdn.net/wangyunzhao007/article/details/107330124 还需要安装mycat 一 ...

  3. SpringBoot 整合 MyCat 实现读写分离

    作者:颜不喜 cnblogs.com/muycode/p/12603037.html MyCat一个彻底开源的,面向企业应用开发的大数据库集群.基于阿里开源的Cobar产品而研发.能满足数据库数据大量 ...

  4. 基于mycat的mysql_MySQL基于Mycat实现读写分离

    基于Mycat实现读写分离 环境:mariadb主:192.168.200.129 Mariadb从:192.168.200.114 Mycat    :192.168.200.112 (1) 安装j ...

  5. mycat 实现读写分离

    1. mycat简介 mycat是一个开源数据库中间件:它可以管理你的所有数据库,并对他们进行读写分离,分库分表等. 使用起来的话Mycat就是一个近似于MySQL的数据库服务器,你可以用连接MySQ ...

  6. MySQL 集群(三):MySQL + Mycat 实现读写分离,主备切换集群

    MySQL 集群(三):MySQL + Mycat 实现读写分离,主从切换集群 下载 Mycat Mycat 主要文件 端口 Mycat 命令 配置文件 server.xml schema.xml 配 ...

  7. MySQL 案例实战--MySQL 基于Mycat实现读写分离

    MySQL 基于Mycat实现读写分离 前言 一.什么是读写分离? 二.MySQL 读写分离解决方案 三.MySQL 基于Mycat实现读写分离 四.Mycat-web 管理部署 前言 本环境是基于 ...

  8. SpringBoot配置读写分离

    SpringBoot配置读写分离 1 概述 本文讲述了如何使用MyBatisPlus+ShardingSphereJDBC进行读写分离,以及利用MySQL进行一主一从的主从复制. 具体步骤包括: My ...

  9. thinkphp读写mysql的枷锁_thinkphp5 数据库配置读写分离

    mysql配置主从数据库同步成功后,接下来就要在程序中配置数据库来实现读写分离啦 我们这里用的thinkphp5框架 配置读写分离非常简单 return [ // 数据库类型 'type' => ...

最新文章

  1. 偏移shaderuv_Unity Shader UV平移、旋转、缩放效果
  2. 一分钟经理“游戏图”提要
  3. jQuery 之父:每天写代码
  4. pycharm怎么写yaml_K8S 如何面向 Yaml 编程
  5. VTK:图片之ImageVariance3D
  6. 现代的缓存设计方案:Window-TinyLFU
  7. AspectJ声明式事务配置
  8. 做系统ghost步骤图解_掌握这几个步骤电脑小白也会做系统
  9. 【Android】Binder机制
  10. 【伯猫Java教程】网页游戏开发过程——环境搭建
  11. c语言傅立叶变换,傅立叶变换与傅立叶反变换的C语言实现
  12. EXP6 信息搜集与漏洞扫描 20154328 常城
  13. 如何避免过敏,哮喘和湿疹断奶宝宝正确
  14. enovia PLM : add new value to SPEO
  15. OpenGL学习笔记——处理键盘输入
  16. 北京电信整顿“一机双号” 通信管理局要求清理原库
  17. 机械硬盘升级固态硬盘
  18. Android M 动态权限获取
  19. 电脑我的计算机硬盘刷新慢,事实:如果计算机硬盘的读取速度变得很慢该怎么办?...
  20. 百度地图开放平台轻量路径规划

热门文章

  1. Win11安全中心无法打开怎么解决?
  2. 处理 Seata分布式事务中 没有传递XID 导致事务失效的问题
  3. SIMD VS MIMD
  4. java-php-python-springboot中医保健网站计算机毕业设计
  5. 字节跳动取消大小周,薪酬普降,如何平衡工作和生活
  6. 计算机影视剪辑学什么课程,影视剪辑-授课计划.doc
  7. Leetcode-862. 和至少为 K 的最短子数组
  8. 关于定时器、波特率、TH和TL值的计算
  9. 商场智能触摸屏导视系统功能模块设计
  10. php支付接口签名,PHP的支付宝支付接口总结