微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LAMP架构之redis3:redis+mysql

目录

一、redis结合mysql

(1)流程图

(2)实验环境

(3)mysql+redis部署

(4)效果测试

二、配置 gearman 实现数据同步

(1)gearman原理

(2)gaerman服务部署

(3)gearman同步效果测试


一、redis结合MysqL

(1)流程图

        用户端访问时,请求直接发送给redis,假如redis有数据就可以直接返给用户,假如redis没有,他就会调取数据库上的数据,用户写入的时候是直接写到了数据库

(2)实验环境

     本次实验一共需要三个节点,在这里选取server2,server3和server4,其中server2作为redis节点,必须是master;

      server3是作为lamp架构,在这里一定要注意选取一个干净的server节点去重新安装lamp架构,因为之前安装server1的lamp架构修改过好多参数,直接会影响实验结果;

          Server四作为MysqL节点,直接安装系统自带数据库,不需要自行编译。

 server2: vim /etc/redis/6379.conf

                 注销replicaof 172.25.73.1 6379  

加入server2本来就是master,这部忽略

redis-cli          

info查看server2是否为master

 server4:

 yum install -y mariadb-server.x86_64

 systemctl start mariadb.service

 

宿主机:scp -r  /home/westos/Desktop/aaaalinux\ file/docs/redis/rhel7/ root@server3:~

scp -r  /home/westos/Desktop/aaaalinux\ file/docs/lamp/Nginx-1.20.2.tar.gz root@server3:~     

 server3:    /etc/init.d/redis_6379 stop   如果redis是运行状态,要停掉redis

                    chkconfig redis_6379 off   取消redis的开机自启动

              cd rhel7/            #######server3要求没有安装过PHPNginx

 

 server3安装Nginx

 yum install gcc  pcre-devel openssl-devel  -y      安装依赖性软件

[root@server3 Nginx-1.20.2]#  ./configure  --with-http_ssl_module

[root@server3 Nginx-1.20.2]# make && make install

安装好之后,创建软连接

ln -s /usr/local/Nginx/sbin/Nginx  /usr/local/bin/

vim /usr/local/Nginx/conf/Nginx.conf   如下图

Nginx

 Nginx -s reload  重新加载Nginx

 sever3安装PHP  在 /root/rhel7下安装

yum install -y  PHP-fpm-5.4.16-46.el7.x86_64.rpm   

yum install -y PHP

 yum install -y PHP-MysqL

yum install -y   PHP-pecl-redis-2.2.8-1.el7.x86_64.rpm  PHP-pecl-igbinary-1.2.1-1.el7.x86_64.rpm

所有的软件安装结束后

PHP -m |grep MysqL

PHP -m |grep redis  查看安装是否成功

systemctl start PHP-fpm 开启PHP

 

 netstat -antlp  查看服务开启情况

(3)MysqL+redis部署

server3上先安排一个认发布目录

 cp test.PHP /usr/local/Nginx/html/
vim /usr/local/Nginx/html/test.PHP

 3    $redis->connect('172.25.73.2',6379) or die ("Could net connect redis     server");
 10     $connect = MysqL_connect('172.25.73.4','redis','west    os');

 把数据库的备份文件发给server4,节省时间,不需要自己新建

[root@server3 rhel7]# scp test.sql root@server4:~

 server4:

登陆数据库。先在数据库新建用户,授予远程登录权力并修改密码

grant all on test.* to redis@'%' identified by 'westos';

导入数据库的备份文件

 MysqL < test.sql

 server4登陆数据库查看导入效果

 MysqL

use test

 show tables

 select * from test;

(4)效果测试

浏览器输入http://172.25.73.3/test.php

刚开始出现access denied

修改server3上的test.PHP的权限  chmod +r test.PHP

出现下图

此时由于是第一次读取,所以读取的是数据库内容,刷新一次,redis中就有了缓存,此时由MysqL变成了redis

      但是这一结构的缺陷是redis中由于已经有了所需要的缓存,所以哪怕数据库端做了更新,redis段也不会实时更新过去,接下来我们要研究如何解决这个问题

二、配置 gearman 实现数据同步

(1)gearman原理

         大致流程:编写 MysqL 触发器trigger,就相当于 Gearman 的客户端。修改表,插入表就相当于直接下发任务。然后通过 lib_MysqLudf_json UDF 库函数将关系数据映射为 JSON 格式,然后在通过 gearman-MysqL-udf 插件将任务加入到 Gearman 的任务队列中,最后通过redis_worker.PHP,也就是 Gearman 的 worker 端来完成 redis 数据库的更新。

        在本实验中germand的服务器安装在server3上
 

(2)gaerman服务部署

     首先要在server4上安装utf函数

宿主机:

scp /home/westos/Desktop/aaaalinux\ file/docs/redis/lib_MysqLudf_json-master.zip  root@server4:~

server4:解压

yum install -y unzip

unzip lib_MysqLudf_json-master.zip

 server4:安装gcc用于编译,安装maria插件

yum install -y gcc
yum install -y mariadb-devel

 server4:

gcc $(MysqL_config --cflags) -shared -fPIC -o lib_MysqLudf_json.so lib_MysqLudf_json.c

编译,并将数据映射到lib_MysqLudf_json.c

登陆MysqL,  

 show global variables like 'plugin_dir';          查看一下数据目录,后边的命令需要

退出MysqL

 cp lib_MysqLudf_json.so /usr/lib64/MysqL/plugin/

直接把影射文件扔到数据目录下,这样数据库能读到

 ls /usr/lib64/MysqL/plugin/  查看一下复制是否成功

 server4上,登陆数据库注册udf函数

CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_MysqLudf_json.so';

 select * from MysqL.func;  查看函数

server4:安装gearman服务

宿主机:scp /home/westos/Desktop/aaaalinux\ file/docs/redis/gearman-MysqL-udf-0.6.tar.gz   root@server4:~

scp /home/westos/Desktop/aaaalinux\ file/docs/redis/rhel7/libgearman-1.1.12-18.el7.x86_64.rpm    root@server4:~

scp /home/westos/Desktop/aaaalinux\ file/docs/redis/rhel7/libgearman-devel-1.1.12-18.el7.x86_64.rpm     root@server4:~

scp /home/westos/Desktop/aaaalinux\ file/docs/redis/rhel7/libevent-devel-2.0.21-4.el7.x86_64.rpm    root@server4:~

serve4:

先安装依赖性软件再configure

yum install -y libgearman-devel-1.1.12-18.el7.x86_64.rpm libgearman-1.1.12-18.el7.x86_64.rpm libevent-devel-2.0.21-4.el7.x86_64.rpm

 tar zxf gearman-MysqL-udf-0.6.tar.gz
cd gearman-MysqL-udf-0.6/

 ./configure --libdir=/usr/lib64/MysqL/plugin/

make && make install

 

  cd /usr/lib64/MysqL/plugin/

出现以下插件表示安装成功

在server4上登陆数据库注册 UDF 函数

MysqL> CREATE FUNCTION gman_do_background RETURNS STRING SONAME
'libgearman_MysqL_udf.so';
MysqL> CREATE FUNCTION gman_servers_set RETURNS STRING SONAME
'libgearman_MysqL_udf.so';

select * from MysqL.func; 查看函数

 接下来选择一个节点作为gearman的服务器,在这里选择server3

server3: 安装包均在rhel7目录下

yum install -y gearmand-1.1.12-18.el7.x86_64.rpm libgearman-1.1.12-18.el7.x86_64.rpm

systemctl start gearmand.service  安装成功后开启服务

 netstat -antlp  查看端口,一会编辑配置文件要用到

 在server4上指定 gearman 的服务信息

SELECT gman_servers_set('172.25.73.3:4730');

server4:

创建触发器,在这里已经有了一个写好的test.sql,可以直接使用

vim test.sql   只留下原来加了注释那部分

server4:

 MysqL < test.sql   导入触发器命令

MysqL> SHOW TRIGGERS FROM test;  查看触发器

server3:把worker文件配置好

cp worker.PHP /usr/local/
 vim  /usr/local/worker.PHP

修改对应行的redis节点信息,redis安装在那个节点就写那个

此时在server3上查询   PHP -m |grep gearman

发现依然没有,需要再安装一个插件

yum install -y  PHP-pecl-gearman-1.1.2-1.el7.x86_64.rpm

server3再次查询就发现有了

 PHP -m |grep gearman

systemctl reload PHP-fpm.service  重新加在服务

 ll /etc/PHP.ini  确保文件的权限可读

nohup PHP /usr/local/worker.PHP &     后边按一下回车。打入后台
 ps ax 查看

 

(3)gearman同步效果测试

server4上修改信息

MariaDB [test]> update test set name='hello' where id=1;

redis 节点端:

 redis-cli
127.0.0.1:6379> get 1   可以看到获取到了hello

 浏览器端:

原来的信息如图一

刷新后如图二

假如没有gearman服务,无论怎么刷新,id=1的信息都不会变化

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐