文章目录
- 1. Redis结合lnmp
- server1: php
- 安装 killall
- 安装 php
- server2 : Redis
- server3: mysql
- 2. 发现了问题???
- 3. 调度器:gearmand
1. Redis结合lnmp
数据访问流程:client -> app -> redis -> mysql -> redis -> client
客户端用 app 访问,先在 redis 里读数据,因为快,redis 没有才去 mysql 读,读完保存在redis 里,然后返回客户端,下次再读就快
server1: php
安装 killall
步骤一:安装killall 软件,关闭 redis
yum install -y psmisc-22.20-11.el7.x86_64
killall redis-server # 关闭之前操作的redis-server进程
步骤二:安装nginx,并编译
tar zxf nginx-1.17.8.tar.gz
cd nginx-1.17.8
yum install pcre-devel -y
yum install zlib-devel -y
./configure --prefix=/usr/local/nginx
make && make install
步骤三:做软连接,并编写 nginx 配置文件
cd /usr/local/nginx/
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin
cd conf/
vim nginx.conf
步骤四:启动nginx ,并查看端口
useradd -u 900 nginx
nginx
netstat -antlpe # 80端口开启,nginx成功
安装 php
安装php,启动并查看端口是否开启
cd rhel7/
yum install -y *
systemctl start php-fpm
netstat -antlpe
server2 : Redis
此时server2已经安装了 redis
步骤一:先关闭,并编写 redis 配置文件,在开启
/etc/init.d/redis_6379 stop
vim /etc/redis/6379.conf
bind 0.0.0.0
/etc/init.d/redis_6379 start
步骤二:给server1一个测试页面
cd /usr/local/nginx/html/
ls
50x.html index.html test.php
mv test.php index.php #将拷贝过来的php测试页面文件改为默认发布页面名称 index.php
server3: mysql
步骤一:清理 mysql 环境
rpm -qa|grep mysql
rpm -e `rpm -qa|grep mysql` --nodeps # 卸载安装的mysql
步骤二:安装 mysql ,并进行安全初始化
yum install mariadb-server -y
systemctl start mariadb
mysql_secure_installation
步骤三:登陆数据库,建库并授权
mysql -uroot -proot
MariaDB [(none)]> create database test;
MariaDB [(none)]> grant all on test.* to redis@'%' identified by 'root';
MariaDB [(none)]> flush privileges;
步骤四:server1上修改index.php文件
vim index.php
3 $redis->connect('172.25.42.2',6379) or die ("could net connect redis server");
10 $connect = mysql_connect('172.25.42.3','redis','root');
步骤五:在server3上导入数据
mysql -pWestos+001 < test.sql #导入数据
测试:
第一次从mysql中取数据
第二次直接从redis中取数据
2. 发现了问题???
server3:
[root@server3 ~]# mysql -uroot -proot
MariaDB [(none)]> use test;
MariaDB [test]> update test set name='nn' where id=1;
MariaDB [test]> select * from test;
[root@server2 ~]# redis-cli # redis却没有数据更新
127.0.0.1:6379> get 1
这个时候有个问题,如果此时mysql数据发生变更,redis会同步吗?
要解决这种问题就要安装一个gearmand
gearmand简介: Gearmand 是一个用来把工作委派给其它机器、分布式的调用更适合做某项工作的机器、并
发的做某项工作在多个调用间做负载均衡、或用来调用其它语言的函数的系统。 简单来讲,就是客户端程序把请求提交给gearmand,gearmand 会把请求转发给合适的 worker 来处理这个请求,最后还通过 gearmand 返回结果。
运行流程:
Client–> Job --> Worker
1、Client 请求发起者,客户端程序可以是任何一种语言,C 、PHP 、Perl 、Python 等。
2、Job 请求调度者,负载协调把 Client 发出的请求转发给合适的 Worker。
3、Worker请求处理者,处理 Job 分发来的请求,可以是任何一种语言
3. 调度器:gearmand
步骤一:server1启动 gearmand
[root@server4 html]# systemctl start gearmand
[root@server4 html]# systemctl status gearmand
步骤二:server3上解压/安装/下载
unzip lib_mysqludf_json-master.zip
yum install mariadb-devel -y
yum install gcc -y
cd lib_mysqludf_json-master
gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c
cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/
步骤三:注册 udf 函数
mysql -uroot -proot
MariaDB [(none)]> show global variables like 'plugin_dir';
MariaDB [(none)]> create function json_object returns string soname 'lib_mysqludf_json.so';
步骤四:安装gearman插件
tar zxf gearman-mysql-udf-0.6.tar.gz
cd gearman-mysql-udf-0.6
yum install libevent-devel-2.0.21-4.el7.x86_64.rpm libgearman-* -y
./configure --libdir=/usr/lib64/mysql/plugin/ --with-mysql
make && make install
步骤五:
mysql -uroot -proot
MariaDB [(none)]> CREATE FUNCTION gman_do_background RETURNS STRING SONAME 'libgearman_mysql_udf.so';
MariaDB [(none)]> CREATE FUNCTION gman_servers_set RETURNS STRING
-> SONAME 'libgearman_mysql_udf.so';
##查看函数
MariaDB [(none)]> select * from mysql.func;
##指定 gman 服务信息
MariaDB [(none)]> SELECT gman_servers_set('172.25.42.4:4730');
步骤五:编写 mysql 触发器server3
vim test.sql
导入
mysql -p < test.sql
步骤六:编写 gman 的 worker 端 server 1
cp worker.php /usr/local/
cd /usr/local/
vim worker.php
$redis->connect('172.25.42.2', 6379);
nohup php /usr/local/worker.php &> /dev/null & #后台运行 worker
测试:
mysql -uroot -proot
MariaDB [(none)]> use test;
MariaDB [test]> update test set name='westos' where id=2;
网页刷新后,自动更新数据库更新内容