Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离

1.读写分离的背景

实际的生产环境当中,客户端对数据库的读操作都是直接找redis拿数据的
如果redis缓存里面没有数据,那么就会去找mysql拿数据,并且给redis中缓存一份
redis中的数据有两种情况不能使用:数据过期了或者mysql中的数据更新了
用户读的时候访问redis,用户写的时候访问mysql
实际上读的需求量是很大的,redis刚好是把数据缓存在内存当中,响应速度也快
也可以降低我们后台mysql数据库的压力

一般对于高并发的系统来说,搭建一个健壮的缓存系统是不可避免的。
单机的reids的QPS可能只能上万,如果有再高并发的场景,单机是不能搞定的,就会有它的系统瓶颈。
一般来说缓存是用来支撑高并发读,这时候我们可能就会想到读写分离;
读写分离是用来处理读的并发量大,而写的并发量小的场景。

2.搭建基本的实验环境

注意:此次实验是在上一篇redis的基础上做的,因此搭建实验环境非常简单

主机信息 主机功能
172.25.2.1(server1) 前端服务器
172.25.2.2(server2) redis数据缓存
172.25.2.3(server3) mysql数据库

(1)用真机连接三台虚拟机
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第1张图片
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第2张图片
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第3张图片
(2)停止server1和server3上面的redis服务
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第4张图片
在这里插入图片描述
(3)开启server3上面的redis服务,并且查看redis节点是否为master节点,并且没有slave节点
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第5张图片
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第6张图片
(4)在真机上面搭建网络共享yum源,开启apache服务,关闭防火墙
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第7张图片
到此为止,基本的实验环境已经搭建完毕

3.基本读写分离的具体过程如下

(1)在server1上安装前端服务器需要的服务
在这里插入图片描述
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第8张图片
(2)在server3上安装数据库
在这里插入图片描述
(3)在真机上给前端服务器server1传送php脚本
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第9张图片
(4)编辑查看这个脚本
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第10张图片
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第11张图片
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第12张图片
(5)在server3上面开启数据库并且查看
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第13张图片
发现test数据库里面没有任何表格
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第14张图片
(6)在真机上给数据库端server3传送sql脚本
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第15张图片
(7)将数据导入数据库
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第16张图片
(8)再次查看数据库,发现test数据库里面表格和数据了
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第17张图片
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第18张图片
(9)发现前端php里面有mysql模块,但是没有redis模块
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第19张图片
(10)将server1上的测试脚本移动到默认发布目录下面
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第20张图片
(11)修改前端的php脚本
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第21张图片
使得用户访问数据的时候先去找redis模块拿数据,如果redis模块没有数据或者数据已经过期
则用户就会去找mysql拿数据
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第22张图片
(12)在数据库上进行授权
使得前端服务器可以调用后台的数据库
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第23张图片
(13)在浏览器里面测试:访问前端服务器
此时没有数据的原因是php里面没有redis模块
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第24张图片
(14)现在加入redis模块
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第25张图片
在这里插入图片描述
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第26张图片
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第27张图片
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第28张图片
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第29张图片
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第30张图片
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第31张图片
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第32张图片
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第33张图片
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第34张图片
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第35张图片
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第36张图片
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第37张图片
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第38张图片
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第39张图片
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第40张图片
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第41张图片
在这里插入图片描述
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第42张图片
在这里插入图片描述
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第43张图片
此时已经加入redis模块
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第44张图片
(15)在浏览器里面再次访问

发现此时客户端访问到了mysql数据库的信息
因为此时redis数据库里面还没有数据,因此第一次会去找mysql数据库拿数据
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第45张图片
拿完数据之后也会给redis缓存一份
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第46张图片
(16)在server3上修改数据库里面表格的名称
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第47张图片
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第48张图片
(17)发现redis里面的缓存并没有同步mysql的更新
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第49张图片
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第50张图片
(18)手动删除redis上原来的缓存
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第51张图片
(19)再次访问就会去mysql里面拿数据
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第52张图片
(20)在redis里面也会缓存新的数据
Redis分布式集群实战(6)——(httpd+redis+mysql)实现读写分离_第53张图片
接下来实现mysql更新自动触发redis进行修改,这样才能实现真正的读写分离

你可能感兴趣的:(linux运维——企业实战)