环境介绍:
CentOS 7.5
Mysql 5.7.29
Mysql主服务器:192.168.2.128
Mysql从服务器:192.168.2.129
Mysql代理服务器:192.168.2.130
客户端服务器:192.168.2.132
读写分离概述:
![ef3020cd5dd9908d544d2d66e9ce8fc0.png](https://img-blog.csdnimg.cn/img_convert/ef3020cd5dd9908d544d2d66e9ce8fc0.png)
1、什么是读写分离?
读写分离的基本原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。一般来说都是通过 主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力这样的方案来进行部署与实施的。
2、为什么要读写分离?
因为数据库的“写”操作是比较耗时的,但是数据库的“读”操作耗时非常短,所以读写分离,解决的是数据库的写入影响了查询的效率(即读操作比写操作多的场景)。
3、什么时候读写分离?
数据库不一定要读写分离,如果程序使用数据库较多时,而更新少,查询多的情况下会考虑使用,利用数据库主从同步,可以减少数据库压力,提高性能。
4、主从复制与读写分离:
在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。
5.读写分离的好处:
1)分摊服务器压力, 减轻主服务器的工作压力,提高机器的系统处理效率。
2)增加冗余,提高服务可用性,当一台数据库服务器宕机后可以调整另外一台从库以最快速度恢复服务。
读写分离适用于读远比写多的场景,如果有一台服务器,当select很多时,update和delete会被这些select访问中的数据堵塞,等待select结束,并发性能并不高,而主从只负责各自的写和读,极大程度的缓解X锁和S锁争用。
共享锁[S锁] -->读锁排他锁[X锁] -->写锁读锁是共享的,或者说是相互不阻塞的。写锁是排他的,一个写锁会阻塞其他的写锁和读锁。
6.实现Mysql读写分离常见的2种方式:
1)基于程序代码内部实现
在代码中根据select 、insert进行路由分类,这类方法也是目前生产环境下应用最广泛的。优点是性能较好,因为程序在代码中实现,不需要增加额外的硬件开支,缺点是需要开发人员来实现,运维人员无从下手。
2) 基于中间件(代理层)实现
代理一般介于应用服务器和数据库服务器之间,代理数据库服务器接收到应用服务器的请求后根据判断后转发到后端数据库。如:Mycat、Mysql-proxy、Maxscale...
构建思路:
1.配置Mysql主从同步
这里就不讲述Mysql主从同步的配置了,上面一篇文章里面讲得很详细,大家可以去看一下。
2.部署Maxscale服务
Maxscale下载:https://downloads.mariadb.com/MaxScale/