MyCat配置读写分离

分布式核心问题系列目录

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

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

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

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

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

1.什么是读写分离

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

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

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

MyCat配置读写分离_第1张图片

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

MyCat配置读写分离_第2张图片

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

MyCat配置读写分离_第3张图片

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

MyCat配置读写分离_第4张图片

       如果系统的读请求比较多的话,读库可以多部署几台,这样读请求就可以均摊到多台读库上,降低每一个读库上的压力。但是在写数据的时候,数据要落在一个确定,且唯一的写库中。将大量的读操作从数据库中剥离,让读操作从专用的读数据库中读取数据,大大缓解了数据库的访问压力,也使得读取数据的响应速度得到了大大的提升。但是要注意,如果是一些对数据实时性要求不高的业务场景,可以考虑使用读写分离,反之如果对数据实时性要求比较高的场景就需要慎重考虑一下要不要使用读写分离,权衡一下主从数据同步的时间会不会影响到业务需求。另外一点就是,如果是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应用架构图:

MyCat配置读写分离_第5张图片

4.MyCat实现MySQL的读写分离

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

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

MyCat配置读写分离_第6张图片MyCat配置读写分离_第7张图片

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

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

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

MyCat配置读写分离_第8张图片

       修改同路径下schema.xml文件

MyCat配置读写分离_第9张图片

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

MyCat配置读写分离_第10张图片

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

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

MyCat配置读写分离_第11张图片

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

MyCat配置读写分离_第12张图片

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

       主机数据:

       从机数据:

       MyCat数据:

       配置读写分离成功。

你可能感兴趣的:(分布式核心问题)