ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

LAMP架构之redis(3):redis+mysql

2022-02-07 23:01:21  阅读:305  来源: 互联网

标签:server4 redis server3 gearman LAMP mysql php


目录

一、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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有