实验环境
主机名 | 功能 |
---|---|
server1 | worker端 |
server3 | client端 |
一.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.数据同步成功!