数据库
首页 > 数据库> > LAMP架构之redis(3):redis+mysql

LAMP架构之redis(3):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要求没有安装过php和nginx

 

 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的信息都不会变化

 

 

 

标签:server4,redis,server3,gearman,LAMP,mysql,php
来源: https://blog.csdn.net/weixin_43803940/article/details/122805210