目录
一、redis结合MysqL
(1)流程图
用户端访问时,请求直接发送给redis,假如redis有数据就可以直接返给用户,假如redis没有,他就会调取数据库上的数据,用户写入的时候是直接写到了数据库上
(2)实验环境
本次实验一共需要三个节点,在这里选取server2,server3和server4,其中server2作为redis节点,必须是master;
server3是作为lamp架构,在这里一定要注意选取一个干净的server节点去重新安装lamp架构,因为之前安装server1的lamp架构修改过好多参数,直接会影响实验结果;
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
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
安装好之后,创建软连接
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-pecl-redis-2.2.8-1.el7.x86_64.rpm PHP-pecl-igbinary-1.2.1-1.el7.x86_64.rpm
所有的软件安装结束后
netstat -antlp 查看服务开启情况
(3)MysqL+redis部署
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';
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中由于已经有了所需要的缓存,所以哪怕数据库端做了更新,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'; 查看一下数据目录,后边的命令需要
cp lib_MysqLudf_json.so /usr/lib64/MysqL/plugin/
ls /usr/lib64/MysqL/plugin/ 查看一下复制是否成功
CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_MysqLudf_json.so';
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/
出现以下插件表示安装成功
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';
接下来选择一个节点作为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> SHOW TRIGGERS FROM test; 查看触发器
server3:把worker文件配置好
此时在server3上查询 PHP -m |grep gearman
yum install -y PHP-pecl-gearman-1.1.2-1.el7.x86_64.rpm
server3再次查询就发现有了
PHP -m |grep gearman
(3)gearman同步效果测试
server4上修改信息
MariaDB [test]> update test set name='hello' where id=1;
redis 节点端:
浏览器端:
原来的信息如图一
刷新后如图二
假如没有gearman服务,无论怎么刷新,id=1的信息都不会变化
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。