/etc/init.d/nginx start
网页访问http://172.25.85.2 nginx上运行php:
yum install -y unzip
unzip phpredis-master.zip
cd phpredis-master
phpize
./configure
make
make install
cd /usr/lib64/php/modules/
ls
cd /etc/php.d
cp mysql.ini redis.ini
vim redis.ini
将内容修改为以下:
extension=redis.so
/etc/init.d/php-fpm> php -m | grep redis
mysql
mysql> show databases; ##查看有无test数据库,没有则创建一个。
mysql> quit
cd /root/redis
mysql < test.sql
cat test.sql
use test;
CREATE TABLE `test` (`id` int(7) NOT NULL AUTO_INCREMENT, `name` char(8)
redis-cli
127.0.0.1:6379> get 1
"test1"
127.0.0.1:6379> get 2
"test2"
127.0.0.1:6379> quit
mysql
mysql> use test;
mysql> update test set name='westos' where> mysql> quit
网页访问http://172.25.85.2 ##更新了mysql中的数据,但是redis中的数据不会自动更新
redis-cli
127.0.0.1:6379> get 1
"test1"
redis-cli
127.0.0.1:6379> del 1
网页访问http://172.25.85.2
redis-cli
127.0.0.1:6379> set 1 westos
网页访问http://172.25.85。2
Gearman是一个支持分布式的任务分发框架:
Gearman Job Server:Gearman核心程序,需要编译安装并以守护进程形式运行在后台。
Gearman Client:可以理解为任务的请求者。
Gearman Worker:任务的真正执行者,一般需要自己编写具体逻辑并通过守护进程方式运行,Gearman Worker接收到Gearman Client传递的任务内容后,会按顺序处理
大致流程:
下面要编写的mysql触发器,就相当于Gearman的客户端。修改表,插入表就相当于直接下发任务。然后通过lib_mysqludf_json UDF库函数将关系数据映射为JSON格式,然后在通过gearman-mysql-udf插件将任务加入到Gearman的任务队列中,最后通过redis_worker.php,也就是Gearman的worker端来完成redis数据库的更新。 2.配置gearman自动更新redis中的数据:
cd /root/redis
yum install -y gearmand-1.1.8-2.el6.x86_64.rpm libgearman-1.1.8-2.el6.x86_64.rpm
/etc/init.d/gearmand start
netstat -antlpe
tar zxf gearman-1.1.2.tgz
cd gearman-1.1.2
phpize
./configure
cd ..
yum install -y libgearman-devel-1.1.8-2.el6.x86_64.rpm
libevent-devel-1.4.13-4.el6.x86_64.rpm
libevent-doc-1.4.13-4.el6.noarch.rpm
libevent-headers-1.4.13-4.el6.noarch.rpm
cd gearman-1.1.2
./configure
make
make install
cd /etc/php.d
cp redis.ini gearman.ini
vim gearman.ini
将内容修改为以下:
extension=gearman.so
/etc/init.d/php-fpm> php -m |grep gearman
yum install -y mysql-devel
cd /root/redis lib_mysqludf_json UDF库函数将关系数据映射为JSON格式。通常,数据库中的数据映射为JSON格式,是通过程序来转换的。
unzip lib_mysqludf_json-master.zip
cd lib_mysqludf_json-master
gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c
ls
mysql
mysql> show global variables like 'plugin_dir';
mysql> quit
cd /root/lib_mysqludf_json-master
cp lib_mysqludf_json.so /usr/lib64/mysql/plugin #注册UDF函数
mysql
mysql> create function json_object returns string soname 'lib_mysqludf_json.so';
mysql> select * from mysql.func;
mysql> quit #安装gearman-mysql-udf 这个插件是用来管理调用 Gearman 的分布式的队列。
cd /root/redis
tar zxf gearman-mysql-udf-0.6.tar.gz
cd gearman-mysql-udf-0.6
yum install -y gcc-c++
./configure --libdir=/usr/lib64/mysql/plugin/
make
make install
cd /usr/lib64/mysql/plugin/
mysql -p #注册UDF函数
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'; #查看函数
mysql> select * from mysql.func;
mysql> quit
netstat -antlpe #指定gearman的服务信息
mysql
mysql> select gman_servers_set('127.0.0.1:4730');
mysql> quit #编写mysql触发器(根据实际情况编写)
cd /root/redis
vim test.sql
将触发器的注释取消,在建表和插入数据语句前加上注释
DELIMITER $$
CREATE TRIGGER datatoredis AFTER UPDATE ON test FOR EACH ROW BEGIN
SET @RECV=gman_do_background('syncToRedis', json_object(NEW.id as `id`, NEW.name as `name`));
END$$
DELIMITER ;
mysql < test.sql
mysql
mysql> show triggers from test;
mysql> quit
cp worker.php /usr/local/bin/
cd /usr/local/bin/
vim worker.php
nohup php worker.php &
ps ax
mysql
mysql> use test;
mysql> update test set name='redhat' where> mysql> quit
网页访问http://172.25.19.1(刷新) ##更新 (待验证)
redis-cli
127.0.0.1:6379> get 1
"redhat" 3.redis的主从复制
如果设置了一个slave,不管是在第一次链接还是重新链接master的时候,slave会发送一个同步命令 然后master开始后台保存,收集所有对修改数据的命令。当后台保存完成,master会将这个数据文件传送到slave,然后保存在磁盘,加载到内存中;master接着发送收集到的所有的修改数据的命令,这好比一个流命令,是redis协议本身来实现的。 在server3和server4上:
vim /etc/redis/6379.conf
slaveof 172.25.85.2 6379
/etc/init.d/redis_6379 restart server2:
vim /root/redis-3.0.2/sentinel.conf ##配置sentinel
sentinel monitor mymaster 172.25.85.2 6379 2 ##Sentinel 去监视一个名为 mymaster 的主服务器, 这个主服务器的 IP 地址为 127.0.0.1 , 端口号为 6379 , 而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)。
sentinel down-after-milliseconds mymaster 10000 ##Sentinel 认为服务器已经断线所需的毫秒数。
sentinel failover-timeout mymaster 60000 grep -v ^# sentinel.conf >/etc/sentinel.conf
redis-sentinel /etc/sentinel.conf
tu
scp /etc/sentinel.conf root@172.25.45.4:/etc/
scp /etc/sentinel.conf root@172.25.45.3:/etc/
redis-cli -h 172.25.45.7 -p 26379 info
tu
server4:
vim /etc/sentinel.conf
port 26379
dir "/tmp"
.
sentinel monitor mymaster 172.25. 6379 2
sentinel down-after-milliseconds mymaster 10000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1 ##选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长。
scp /etc/sentinel.conf root@172.25.85.4:/etc/
然后再server7查看:redis-cli -h 172.25.85.2 -p 26379 info
tu