目录
server4作为数据库端,安装mariadb-server
- 本文的主要目的即介绍上文说的这样一种方法,采用redis nosql数据库作为Mysql数据库的缓存,在查找的时候,首先查找redis缓存,如果找到则返回结果;如果在redis中没有找到,那么查找Mysql数据库,找到的话则返回结果并且更新redis;如果没有找到则返回空。对于写入的情况,直接写入mysql数据库,mysql数据库通过触发器及UDF机制自动把变更的内容更新到redis中。
一、redis做mysql的缓存服务器
server2为redis server
必须为master,要能写。
修改后查看server2状态为master
server4作为数据库端,安装mariadb-server
启动maridb服务并对test授权
server3安装lamp架构
server3之前没有安装过lamp架构,因此我们停掉redis,并设置开机不自启,利用他干净的环境安装lamp架构。
首先安装nginx
做软连接,并更改主配置文件
将文件的php打开。
之后重启,查看端口,此时并没有9000端口
安装php-fpm
此时php-mysql安装成功,但还没有redis
此时有依赖性需要解决
再次查看php-redis也安装成功。此时便可以启动了。
此时查看端口,9000已经启动
进行相关配置
将test.php放到默认发布目录里。
server4中,编写mysql触发器脚本test.sql,并导入test数据库
查看数据库数据,创建了1-9
浏览器访问172.25.0.3/test.php 第一次访问的为mysql
刷新就会变成redis,刚开始redis没有数据会先从数据库取,刷新后,便从redis中获取。
在server2master主机中
server4做为数据库更改id1后,查看已经变更
此时查看server2作为redis的id1并没发生变化,所以是不同步的
因为在test.php中写明先找redis拿数据,只要有就不会找数据库,此时变更便不会同步。
当redis中没有时才会找mysql中拿。现在测试删除redis的id1
此时再次访问,刷新,从mysql重新获得成为westos
到这里,我们已经实现了redis作为mysql的缓存服务器,但是如果更新了mysql,redis中仍然会有对应的KEY,数据就不会更新,此时就会出现mysql和redis数据不一致的情况。所以接下来就要通过mysql触发器将改变的数据同步到redis中.
二、配置gearman实现Redis和MySQL数据同步
gearman介绍
Gearman是一个支持分布式的任务分发框架:
Gearman Job Server:Gearman核心程序,需要编译安装并以守护进程形式运行在后台。
Gearman Client:可以理解为任务的请求者。
Gearman Worker:任务的真正执行者,一般需要自己编写具体逻辑并通过守护进程方式运行,Gearman Worker接收到Gearman Client传递的任务内容后,会按顺序处理。
一个Gearman请求的处理过程涉及三个角色:Client -> Job -> Worker。
Client:请求的发起者,可以是 C,PHP,Perl,MySQL UDF 等等。
Job:请求的调度者,用来负责协调把 Client 发出的请求转发给合适的 Worker。
Worker:请求的处理者,可以是 C,PHP,Perl 等等。
因为 Client,Worker 并不限制用一样的语言,所以有利于多语言多系统之间的集成。
甚至我们通过增加更多的 Worker,可以很方便的实现应用程序的分布式负载均衡架构。
大致流程:
下面要编写的mysql触发器,就相当于Gearman的客户端。修改表,插入表就相当于直接下发任务。然后通过lib_mysqludf_json UDF库函数将关系数据映射为JSON格式,然后在通过gearman-mysql-udf插件将任务加入到Gearman的任务队列中,最后通过redis_worker.php,也就是Gearman的worker端来完成redis数据库的更新。
mysql中更改id1 为redhat,查看数据库发生变更,但是页面访问并没有。
配置过程
在server4上,解压lib_mysqludf_json-master.zip,并安装gcc
安装开发包
将lib_mysqludf_json-master/lib_mysqludf_json.so
模块拷贝到/usr/lib64/mysql/plugin/
插件目录下,通过lib_mysqludf_json UDF 库函数将关系映射为JISON格式 注册udf函数,并查看。
安装libgearman安装包,并安装管理gearman的分布式队列插件,进行编译和安装
有依赖性,下载这几个rpm包,并安装
再次执行 ./configure --libdir=/usr/lib64/mysql/plugin/
之后编译安装
再次注册两个udf函数
查看server3端口
server3下载安装gearman(gman的worker端)
开启gearmand服务并查看其端口号4730是否开启
在server4指定gearman的服务信息
编写mysql触发器脚本test.sql,并导入test数据库 ,查看触发器设置成功。
编写worker.php
脚本,并放到/usr/local目录下
此时有redis还没有gearman,安装
在后台运行worker
测试
在数据库更改
整体过程
当数据库有变更时,会通过udf函数结合触发器 ,将数据发送给4730(gearmand),它再分发给worker。