Gearman实现redis和MySQL同步

实验环境

主机名功能
server1worker端
server3client端

一.Gearman运行过程

一个Gearman请求的处理过程涉及三个角色:Client -> Job -> Worker。

  • Client:请求的发起者,可以是 C,PHP,Perl,MySQL UDF 等等。
  • Job:请求的调度者,用来负责协调把 Client 发出的请求转发给合适的 Worker。
  • Worker:请求的处理者,可以是 C,PHP,Perl 等等。

因为 Client,Worker 并不限制用一样的语言,所以有利于多语言多系统之间的集成。
甚至我们通过增加更多的 Worker,可以很方便的实现应用程序的分布式负载均衡架构。

二.Gearman实现redis和MySQL同步

lnmp网站服务器架构实现redis做MySQL的缓存
详细步骤参见博客:https://blog.csdn.net/chaos_oper/article/details/90183482
但是当更新MySQL数据库中数据时,redis缓存内容并未同步更新!
如何解决这个问题?
mysql 端更改数据后通过触发器 (插件) 提交, 最后提交给geramand(server端) 提交给worker端口(php-gearman/php-redis) 最后提交给redsi 同步成功。

client 端:

1.下载解压工具

yum install unzip -y

2.下载udf-json函数并解压

unzip lib_mysqludf_json-master.zip

3.安装mariadb-devel

rpm -qa | grep mariadb-devel 	
yum install mariadb-devel -y

在这里插入图片描述
4.安装编译软件gcc

yum install gcc -y 

5.进入解压后的 lib_mysqludf_json-master目录进行编译

gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c

在这里插入图片描述
6.将lib_mysqludf_json.so复制到/usr/lib64/mysql/plugin/下

cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/

在这里插入图片描述
7.进入数据库查看

show global variables like 'plugin_dir'

在这里插入图片描述
8.下载并安装相关软件

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

在这里插入图片描述
9.下载并解压gearman-mysql-udf-0.6.tar.gz

tar zxf gearman-mysql-udf-0.6.tar.gz

10.进入到解压后的目录 gearman-mysql-udf-0.6后,编译

./configure --libdir=/usr/lib64/mysql/plugin/ --with-mysql

在这里插入图片描述
11.make && make install
12.进入数据库注册udf函数

CREATE FUNCTION gman_do_background RETURNS STRING SONAME 'libgearman_mysql_udf.so';

在这里插入图片描述
在这里插入图片描述
13.创建函数

CREATE FUNCTION gman_servers_set RETURNS STRING SONAME 'libgearman_mysql_udf.so'

14.查看是否创建成功

select * from mysql.func;

在这里插入图片描述
15.指定gearmand的服务信息

SELECT gman_servers_set('172.25.13.1:4730');

在这里插入图片描述
16.修改test.sql并导入到数据库中

mysql -p < test.sql

在这里插入图片描述
17.进入数据库后查看触发器

show triggers from test;

在这里插入图片描述
work端:
1.安装gearman并开启

systemctl start gearmand

2.查看gearman端口

netstat -tnlp

在这里插入图片描述
3.在/usr/local/目录下编辑测试页面:

vim worker.php 

在这里插入图片描述
4.后台运行

nohup php /usr/local/worker.php &> /dev/null &

测试:
1.在client端更新mysql数据库的数据:

update test set name='redhat' where id=3;

在这里插入图片描述
2.浏览器访问172.25.13.1.数据同步成功!
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值