企业级 ##redis的主从缓存,作 mysql 的缓存服务器##

【server1】
1.在server1配置主节点:

[root@server1 ~]# tar zxf redis-4.0.8.tar.gz 
[root@server1 ~]# cd redis-4.0.8
[root@server1 redis-4.0.8]# ls
00-RELEASENOTES  COPYING  Makefile   redis.conf       runtest-sentinel  tests
BUGS             deps     MANIFESTO  runtest          sentinel.conf     utils
CONTRIBUTING     INSTALL  README.md  runtest-cluster  src

[root@server1 redis-4.0.8]# yum install -y gcc

2.进行安装包原码编译:

[root@server1 redis-4.0.8]# make && make install  编译与安装
[root@server1 redis-4.0.8]# which redis-cli  查看默认目录
/usr/local/bin/redis-cli
[root@server1 redis-4.0.8]# ls
00-RELEASENOTES  COPYING  Makefile   redis.conf       runtest-sentinel  tests
BUGS             deps     MANIFESTO  runtest          sentinel.conf     utils
CONTRIBUTING     INSTALL  README.md  runtest-cluster  src
[root@server1 redis-4.0.8]# cd utils/
[root@server1 utils]# ./install_server.sh  调用脚本直接回车即可完成配置
Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379] 
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] 
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] 
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] 
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server] 
Selected config:
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!

3.配置服务接口:

[root@server1 utils]# vim /etc/redis/6379.conf 
  70 bind 0.0.0.0
[root@server1 utils]# /etc/init.d/redis_6379 stop
[root@server1 utils]# /etc/init.d/redis_6379 start

【server2】

[root@server2 utils]# vim /etc/redis/6379.conf
        70 bind 0.0.0.0
  加入  282 slaveof 172.25.39.1 6379
[root@server2 utils]# /etc/init.d/redis_6379 restart

【server1】查看

[root@server1 ~]# redis-cli 
127.0.0.1:6379> set name westos
OK

【server3】

[root@server3 utils]# vim /etc/redis/6379.conf
        70 bind 0.0.0.0
  加入  282 slaveof 172.25.39.1 6379
[root@server3 utils]# /etc/init.d/redis_6379 restart
[root@server3 utils]# cd
[root@server3 ~]# redis-cli
127.0.0.1:6379> get name
"westos"

可以看到在server3上也可以看到server1同步的信息。

[root@server1 ~]# cd redis-4.0.8
[root@server1 redis-4.0.8]# cp sentinel.conf /etc/redis/
[root@server1 redis-4.0.8]# cd /etc/redis/
[root@server1 redis]# vim sentinel.conf 
 15  bind 0.0.0.0
 16  protected-mode no
 68 sentinel monitor mymaster 172.25.39.1 6379 2
 97 sentinel down-after-milliseconds mymaster 10000
[root@server1 redis]# scp sentinel.conf server2:/etc/redis
[root@server1 redis]# scp sentinel.conf server3:/etc/redis
[root@server1 redis]# redis-server /etc/redis/sentinel.conf --sentinel  #监控

再次连接一个server1,将server1关闭

[root@server1 redis]# redis-cli
127.0.0.1:6379> shutdown
not connected> quit

监控server1

[root@server1 redis]# redis-server /etc/redis/sentinel.conf --sentinel  #监控

【server3】上查看master是否有跳转

[root@server3 ~]# redis-cli
127.0.0.1:6379> info

redis集群

【server1】【server2】关闭服务,【server2】转换为master端
1.【server1】配置环境

[root@server1 ~]# mkdir cluster
[root@server1 ~]# cd cluster/
[root@server1 cluster]# mkdir 7001
[root@server1 cluster]# mkdir 7002
[root@server1 cluster]# mkdir 7003
[root@server1 cluster]# mkdir 7004
[root@server1 cluster]# mkdir 7005
[root@server1 cluster]# mkdir 7006
[root@server1 cluster]# cd 7001/
[root@server1 7001]# vim redis.conf
port  7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
[root@server1 ~]# cd redis-4.0.8
[root@server1 redis-4.0.8]# ls
00-RELEASENOTES  COPYING  Makefile   redis.conf       runtest-sentinel  tests
BUGS             deps     MANIFESTO  runtest          sentinel.conf     utils
CONTRIBUTING     INSTALL  README.md  runtest-cluster  src
[root@server1 redis-4.0.8]# cd src/
[root@server1 src]# cp redis-trib.rb /usr/local/bin

2.安装服务包,解决依赖性:

[root@server1 ~]# ls
anaconda-ks.cfg  install.log.syslog                redis-4.0.8
cluster          libyaml-0.1.3-4.el6_6.x86_64.rpm  redis-4.0.8.tar.gz
install.log      redis-4.0.1.gem                   ruby-2.2.3-1.el6.x86_64.rpm
[root@server1 ~]# yum install -y libyaml-0.1.3-4.el6_6.x86_64.rpm
[root@server1 ~]# yum install -y ruby-2.2.3-1.el6.x86_64.rpm
[root@server1 ~]# gem install --local redis-4.0.1.gem 
Successfully installed redis-4.0.1
Parsing documentation for redis-4.0.1
Installing ri documentation for redis-4.0.1
Done installing documentation for redis after 1 seconds
1 gem installed
[root@server1 ~]# gem list --local

*** LOCAL GEMS ***

bigdecimal (1.2.6)
io-console (0.4.3)
json (1.8.1)
minitest (5.4.3)
power_assert (0.2.2)
psych (2.0.8)
rake (10.4.2)
rdoc (4.2.0)
redis (4.0.1)
test-unit (3.0.8)

3.配置7001节点:

[root@server1 ~]# cd /usr/local/cluster/
[root@server1 cluster]# ls
7001  7002  7003  7004  7005  7006
[root@server1 cluster]# cd 7001/
[root@server1 7001]# ls
redis.conf
[root@server1 7001]# vim redis.conf
port  7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
pidfile /usr/local/cluster/7001/redis.pid
logfile /usr/local/cluster/7001/redis.log
[root@server1 7001]# redis-server redis.conf                 ##刷新服务   
[root@server1 7001]# cat /proc/sys/net/core/somaxconn 
128
[root@server1 7001]# echo 511 > /proc/sys/net/core/somaxconn 
[root@server1 7001]# sysctl -w vm.overcommit_memory=1
vm.overcommit_memory = 1           ##添加到下边文件的最后一行
[root@server1 7001]# vim /etc/sysctl.conf 
[root@server1 7001]# echo never > /sys/kernel/mm/transparent_hugepage/enabled              

4.配置其他节点:

[root@server1 7001]# cp redis.conf ../7002
[root@server1 7001]# cp redis.conf ../7003
[root@server1 7001]# cp redis.conf ../7004
[root@server1 7001]# cp redis.conf ../7005
[root@server1 7001]# cp redis.conf ../7006
[root@server1 7001]# cd ..
[root@server1 cluster]# ls
7001  7002  7003  7004  7005  7006

这里用7002做示范,其他的以此类推

[root@server1 cluster]# cd 7002/
[root@server1 7002]# vim redis.conf
[root@server1 7002]# redis-server redis.conf

(1)7001替换为7002:
这里写图片描述
最后完整文件:
这里写图片描述
(2)查看进程:

[root@server1 7006]# ps ax
 4508 ?        Ssl    0:01 redis-server *:7001 [cluster]
 4524 ?        Ssl    0:00 redis-server *:7002 [cluster]
 4531 ?        Ssl    0:00 redis-server *:7003 [cluster]
 4537 ?        Ssl    0:00 redis-server *:7004 [cluster]
 4543 ?        Ssl    0:00 redis-server *:7005 [cluster]
 4552 ?        Ssl    0:00 redis-server *:7006 [cluster]

5.创建redis集群:
【master】 7001 7003 7002
【slave】 7005 7004 7006
自动进行随机分配

[root@server1 7006]# redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:7001
127.0.0.1:7002
127.0.0.1:7003
Adding replica 127.0.0.1:7005 to 127.0.0.1:7001
Adding replica 127.0.0.1:7006 to 127.0.0.1:7002
Adding replica 127.0.0.1:7004 to 127.0.0.1:7003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 33c5df055c0193a1c7f04075b6d961ac104eed62 127.0.0.1:7001
   slots:0-5460 (5461 slots) master
M: ad48f359306289e271e409594f30cd9f40599f12 127.0.0.1:7002
   slots:5461-10922 (5462 slots) master
M: f099bfe1ee0fdf7512eb79a9bac335271eb911ad 127.0.0.1:7003
   slots:10923-16383 (5461 slots) master
S: 6353aca67a1a8a042128e53cc9d7ee70ae5a33ef 127.0.0.1:7004
   replicates f099bfe1ee0fdf7512eb79a9bac335271eb911ad
S: 0849efaeb530658d9a886153705c2da5b4c6884a 127.0.0.1:7005
   replicates 33c5df055c0193a1c7f04075b6d961ac104eed62
S: de59901e02dcba0b3d883733de556d83f09957e9 127.0.0.1:7006
   replicates ad48f359306289e271e409594f30cd9f40599f12
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join...
>>> Performing Cluster Check (using node 127.0.0.1:7001)
M: 33c5df055c0193a1c7f04075b6d961ac104eed62 127.0.0.1:7001
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: 0849efaeb530658d9a886153705c2da5b4c6884a 127.0.0.1:7005
   slots: (0 slots) slave
   replicates 33c5df055c0193a1c7f04075b6d961ac104eed62
M: f099bfe1ee0fdf7512eb79a9bac335271eb911ad 127.0.0.1:7003
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: 6353aca67a1a8a042128e53cc9d7ee70ae5a33ef 127.0.0.1:7004
   slots: (0 slots) slave
   replicates f099bfe1ee0fdf7512eb79a9bac335271eb911ad
M: ad48f359306289e271e409594f30cd9f40599f12 127.0.0.1:7002
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: de59901e02dcba0b3d883733de556d83f09957e9 127.0.0.1:7006
   slots: (0 slots) slave
   replicates ad48f359306289e271e409594f30cd9f40599f12
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

6.登陆节点,查看对应信息:

[root@server1 7006]# redis-cli -c -p 7001
127.0.0.1:7001> info
下图可以看出,7001为master,对应的slave是7005

这里写图片描述


【3】
1.在【server1】配置LNMP架构:
(1)安装php,nginx服务:

[root@server1 ~]# cd redis/
[root@server1 redis]# ls
codis-release3.2.zip                       php-cli-5.3.3-38.el6.x86_64.rpm
gearman-1.1.2.tgz                          php-common-5.3.3-38.el6.x86_64.rpm
gearmand-1.1.8-2.el6.x86_64.rpm            php-devel-5.3.3-38.el6.x86_64.rpm
gearman-mysql-udf-0.6.tar.gz               php-fpm-5.3.3-38.el6.x86_64.rpm
go1.8.linux-amd64.tar.gz                   php-gd-5.3.3-38.el6.x86_64.rpm
jemalloc-3.6.0-1.el6.x86_64.rpm            php-mbstring-5.3.3-38.el6.x86_64.rpm
jemalloc-devel-3.6.0-1.el6.x86_64.rpm      php-mysql-5.3.3-38.el6.x86_64.rpm
libevent-1.4.13-4.el6.x86_64.rpm           php-pdo-5.3.3-38.el6.x86_64.rpm
libevent-devel-1.4.13-4.el6.x86_64.rpm     phpredis-master.zip
libevent-doc-1.4.13-4.el6.noarch.rpm       redis-3.0.2.tar.gz
libevent-headers-1.4.13-4.el6.noarch.rpm   redis-4.0.1.gem
libgearman-1.1.8-2.el6.x86_64.rpm          redis-4.0.1.tar.gz
libgearman-devel-1.1.8-2.el6.x86_64.rpm    redis-4.0.8.tar.gz
lib_mysqludf_json-master.zip               rhel6 Redis.pdf
libyaml-0.1.3-4.el6_6.x86_64.rpm           ruby-2.2.3-1.el6.x86_64.rpm
nginx-1.10.2-1.el6.x86_64.rpm              rubygems-1.3.7-5.el6.noarch.rpm
nginx-1.8.0-1.el6.ngx.x86_64.rpm           test.php
nginx-all-modules-1.10.2-1.el6.noarch.rpm  test.sql
nginx-filesystem-1.10.2-1.el6.noarch.rpm   tokyocabinet-1.4.33-6.el6.x86_64.rpm
php-5.3.3-38.el6.x86_64.rpm                worker.php

[root@server1 redis]# yum install -y nginx-1.8.0-1.el6.ngx.x86_64.rpm  php-*

(2)配置PHP服务:

[root@server1 redis]# cd /etc/php.d/
[root@server1 php.d]# vim /etc/php.ini

这里写图片描述

##修改用户与组
[root@server1 php.d]# cd /etc/php-fpm.d/
[root@server1 php-fpm.d]# ls
www.conf
[root@server1 php-fpm.d]# vim www.conf
[root@server1 php-fpm.d]# /etc/init.d/php-fpm start
Starting php-fpm:                                          [  OK  ]

这里写图片描述
这里写图片描述

(3)配置nginx服务:

[root@server1 conf.d]# vim default.conf
[root@server1 conf.d]# /etc/init.d/nginx start
Starting nginx:                                            [  OK  ]

这里写图片描述
(4)添加PHP动态文件

[root@server1 conf.d]# cd /usr/share/nginx/html/
[root@server1 html]# ls
50x.html  index.html
[root@server1 html]# vim index.php

这里写图片描述
(5)进行测试php服务
这里写图片描述
(6)添加【server3】的信息在php

[root@server1 ~]# ls
redis
[root@server1 ~]# cd redis/
[root@server1 redis]# cp test.php /usr/share/nginx/html/index.php 
cp: overwrite `/usr/share/nginx/html/index.php'? y
[root@server1 redis]# cd /usr/share/nginx/html
[root@server1 html]# vim index.php

这里写图片描述
(7)编译phpredis原码包:

[root@server1 ~]# cd redis/
[root@server1 redis]# yum install -y unzip
[root@server1 redis]# unzip phpredis-master.zip
[root@server1 redis]# cd phpredis-master
[root@server1 phpredis-master]# phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
[root@server1 phpredis-master]# ./configure
[root@server1 phpredis-master]# make && make install 
[root@server1 phpredis-master]# cd /usr/lib64/php/modules/
[root@server1 modules]# ls
curl.so      json.so      mysql.so      pdo_sqlite.so  sqlite3.so
fileinfo.so  mbstring.so  pdo_mysql.so  phar.so        zip.so
gd.so        mysqli.so    pdo.so        redis.so

(8)建立redis与数据库的连接

[root@server1 ~]# cd /etc/php.d/
[root@server1 php.d]# ls
curl.ini      json.ini      mysql.ini      pdo_sqlite.ini  zip.ini
fileinfo.ini  mbstring.ini  pdo.ini        phar.ini
gd.ini        mysqli.ini    pdo_mysql.ini  sqlite3.ini
[root@server1 php.d]# cp mysql.ini redis.ini
[root@server1 php.d]# vim redis.ini 
[root@server1 php.d]# /etc/init.d/php-fpm reload
Reloading php-fpm: [12-Aug-2018 13:46:34] NOTICE: configuration file /etc/php-fpm.conf test is successful

                                                           [  OK  ]

这里写图片描述

【server3】配置数据库
1.下载数据库

[root@server3 mysql]# cd /var/lib/mysql
[root@server3 mysql]# ls
[root@server3 mysql]# rpm -e --nodeps `rpm -qa|grep mysql`
warning: /etc/my.cnf saved as /etc/my.cnf.rpmsave
[root@server3 mysql]# yum install -y  mysql-server

2.登陆数据库授权

[root@server3 mysql]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.71 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.00 sec)

mysql> grant all on test.* to redis@'%' identified by 'westos';
Query OK, 0 rows affected (0.00 sec)

3.【server1】发送数据包脚本到mysql端

[root@server1 ~]# cd redis/
[root@server1 redis]# scp test.sql [email protected]:/root
The authenticity of host '172.25.39.3 (172.25.39.3)' can't be established.
RSA key fingerprint is ce:b7:35:21:60:9f:f3:8d:f4:25:af:73:ad:ad:bc:ab.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.25.39.3' (RSA) to the list of known hosts.
root@172.25.39.3's password: 
test.sql                                      100%  493     0.5KB/s   00:00

4.【server3】导入数据到mysql

[root@server3 ~]# mysql < test.sql

5.在网页上进行测试:
这里写图片描述

再次刷新:数据缓存到了【server2】master端
这里写图片描述

6.【server3】中改变表中数据

mysql> use test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from test;
+----+--------+
| id | name   |
+----+--------+
|  1 | westos |
|  2 | test2  |
|  3 | test3  |
|  4 | test4  |
|  5 | test5  |
|  6 | test6  |
|  7 | test7  |
|  8 | test8  |
|  9 | test9  |
+----+--------+
9 rows in set (0.00 sec)

6.再次在网页测试的时候发现redis没有同步更新过去,所以进行下列配置:
(1)下载服务包:

[root@server1 redis]# yum install -y gearmand-1.1.8-2.el6.x86_64.rpm  libgearman-* libevent-*

(2)编译lib_mysqludf_json-master.zip服务包

[root@server3 ~]# ls
anaconda-ks.cfg  install.log.syslog            MHA    test.sql
install.log      lib_mysqludf_json-master.zip  mysql
[root@server3 ~]# unzip lib_mysqludf_json-master.zip 
Archive:  lib_mysqludf_json-master.zip
37f851c808c4161beb4d5e535771dc0c59c82de6
   creating: lib_mysqludf_json-master/
  inflating: lib_mysqludf_json-master/README.md  
  inflating: lib_mysqludf_json-master/lib_mysqludf_json.c  
  inflating: lib_mysqludf_json-master/lib_mysqludf_json.html  
  inflating: lib_mysqludf_json-master/lib_mysqludf_json.so  
  inflating: lib_mysqludf_json-master/lib_mysqludf_json.sql  
[root@server3 ~]# cd lib_mysqludf_json-master
[root@server3 lib_mysqludf_json-master]# yum install -y mysql-devel gcc
[root@server3 lib_mysqludf_json-master]# gcc  $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c
[root@server3 lib_mysqludf_json-master]# ll
total 100
-rw-r--r-- 1 root root 25921 Feb 22  2013 lib_mysqludf_json.c
-rw-r--r-- 1 root root 20576 Feb 22  2013 lib_mysqludf_json.html
-rwxr-xr-x 1 root root 22223 Aug 12 15:34 lib_mysqludf_json.so
-rw-r--r-- 1 root root  1431 Feb 22  2013 lib_mysqludf_json.sql
-rw-r--r-- 1 root root 16416 Feb 22  2013 README.md
root@server3 ~]# cd /root/lib_mysqludf_json-master  
[root@server3 lib_mysqludf_json-master]# cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/
mysql> show global variables like 'plugin_dir';
+---------------+-------------------------+
| Variable_name | Value                   |
+---------------+-------------------------+
| plugin_dir    | /usr/lib64/mysql/plugin |
+---------------+-------------------------+
1 row in set (0.00 sec)
mysql> CREATE FUNCTION json_object RETURNS STRING SONAME
    -> 'lib_mysqludf_json.so';
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye
[root@server3 ~]# tar zxf gearman-mysql-udf-0.6.tar.gz 
[root@server3 ~]# ls
gearman-mysql-udf-0.6         lib_mysqludf_json-master.zip          redis-4.0.8.tar.gz
gearman-mysql-udf-0.6.tar.gz  mha4mysql-node-0.56-0.el6.noarch.rpm  test.sql
lib_mysqludf_json-master      redis-4.0.8
[root@server3 ~]# cd gearman-mysql-udf-0.6
[root@server3 ~]# yum install libgearman-* libevent-* -y
[root@server3 ~]# cd gearman-mysql-udf-0.6
[root@server3 gearman-mysql-udf-0.6]# ls
aclocal.m4  ChangeLog  config.h.in  configure.ac  libgearman_mysql_udf  Makefile.am  NEWS
AUTHORS     config     configure    COPYING       m4                    Makefile.in  README
[root@server3 gearman-mysql-udf-0.6]# ./configure --libdir=/usr/lib64/mysql/plugin/
[root@server3 gearman-mysql-udf-0.6]# make && make install
mysql> 
mysql> CREATE FUNCTION gman_do_background RETURNS STRING SONAME 'libgearman_mysql_udf.so';
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE FUNCTION gman_servers_set RETURNS STRING SONAME
    -> 'libgearman_mysql_udf.so';
Query OK, 0 rows affected (0.00 sec)

mysql> select * from mysql.func;
+--------------------+-----+-------------------------+----------+
| name               | ret | dl                      | type     |
+--------------------+-----+-------------------------+----------+
| json_object        |   0 | lib_mysqludf_json.so    | function |
| gman_do_background |   0 | libgearman_mysql_udf.so | function |
| gman_servers_set   |   0 | libgearman_mysql_udf.so | function |
+--------------------+-----+-------------------------+----------+
3 rows in set (0.00 sec)

mysql> SELECT gman_servers_set('172.25.38.1:4730');
+--------------------------------------+
| gman_servers_set('172.25.38.1:4730') |
+--------------------------------------+
| 172.25.38.1:4730                     |
+--------------------------------------+
1 row in set (0.00 sec)

7.修改数据脚本

[root@server3 ~]# vim test.sql 
[root@server3 ~]# mysql < test.sql

这里写图片描述

8.【server1】编译

[root@server1 ~]# ll worker.php 
-rw-r--r-- 1 root root 452 Aug 12 11:58 worker.php
[root@server1 ~]# cp worker.php /usr/local/
[root@server1 ~]# ll gearman-1.1.2.tgz 
-rw-r--r-- 1 root root 30961 Aug 12 11:58 gearman-1.1.2.tgz
[root@server1 ~]# tar zxf gearman-1.1.2.tgz 
[root@server1 ~]# cd gearman-1.1.2
[root@server1 gearman-1.1.2]# ls
ChangeLog  CREDITS   LICENSE        php_gearman.h  test_client.php  test_worker.php
config.m4  examples  php_gearman.c  README         tests
[root@server1 gearman-1.1.2]# phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
[root@server1 gearman-1.1.2]# ./configure && make && make install
[root@server1 gearman-1.1.2]# cd /usr/lib64/php/modules/
[root@server1 modules]# ls
curl.so      gearman.so   mysqli.so     pdo.so         redis.so
fileinfo.so  json.so      mysql.so      pdo_sqlite.so  sqlite3.so
gd.so        mbstring.so  pdo_mysql.so  phar.so        zip.so
[root@server1 modules]# cd /etc/php.d/
[root@server1 php.d]# ls
curl.ini      gd.ini    mbstring.ini  mysql.ini  pdo_mysql.ini   phar.ini   sqlite3.ini
fileinfo.ini  json.ini  mysqli.ini    pdo.ini    pdo_sqlite.ini  redis.ini  zip.ini
[root@server1 php.d]# cp redis.ini gearman.ini
[root@server1 php.d]# vim gearman.ini 
[root@server1 php.d]# cat gearman.ini 
extension=gearman.so
[root@server1 php.d]# /etc/init.d/php-fpm reload
Reloading php-fpm: [12-Aug-2018 15:05:20] NOTICE: configuration file /etc/php-fpm.conf test is successful

                                                           [  OK  ]
[root@server1 php.d]# php -m | grep gearman
gearman
[root@server1 php.d]# cd /usr/local/
[root@server1 local]# ls
bin  cluster  etc  games  include  lib  lib64  libexec  sbin  share  src  worker.php
[root@server1 local]# vim worker.php 
[root@server1 local]# cat worker.php 
<?php
$worker = new GearmanWorker();
$worker->addServer();
$worker->addFunction('syncToRedis', 'syncToRedis');

$redis = new Redis();
$redis->connect('172.25.39.2', 6379);

while($worker->work());
function syncToRedis($job)
{
        global $redis;
        $workString = $job->workload();
        $work = json_decode($workString);
        if(!isset($work->id)){
                return false;
        }
        $redis->set($work->id, $work->name);
}
?>

9.打入后台

[root@server1 local]# nohup php worker.php &
[1] 9824
[root@server1 local]# nohup: ignoring input and appending output to `nohup.out'

[root@server1 local]# 

【server3】

[root@server3 ~]# ps ax
 1639 pts/0    S      0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql
 1741 pts/0    Sl    11:47 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib
 1842 ?        S      0:00 pickup -l -t fifo -u
 5350 pts/0    R+     0:00 ps ax
[root@server3 ~]# kill -9 1639
[root@server3 ~]# kill -9 1741

mysql> use test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> update test set name='redhat';
Query OK, 9 rows affected (0.05 sec)
Rows matched: 9  Changed: 9  Warnings: 0

在网页上测试:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/China_zgd/article/details/81603560
今日推荐