redis cluster && Redis 作 mysql 的缓存服务器
来源:互联网 发布:linux中sed命令详解 编辑:程序博客网 时间:2024/06/15 00:42
一、redis cluster
本文示例的redis源码目录为/redis-4.0.1
所有的redis实例(总共8个)均在一台主机上开启,所以务必加大内存
因为安装cluster需要用到ruby,所以请确保系统中有ruby
1. 安装ruby redis 扩展包
[root@rhel65-lockey1 ~]# yum install rubygems-1.3.7-1.el6.noarch.rpm -y
[root@rhel65-lockey1 ~]# gem install –local redis-3.3.1.gem
[root@rhel65-lockey1 redis-4.0.1]# gem list
*** LOCAL GEMS ***redis (3.3.1)
2. 了解redis-trib.rb脚本
该脚本在redis源码包位置:/redis-4.0.1/src/redis-trib.rb
为了方便使用执行以下命令:
cp /redis-4.0.1/src/redis-trib.rb /usr/local/sbin
用法查看:
[root@rhel65-lockey1 ~]# redis-trib.rb
Usage: redis-trib <command> <options> <arguments ...> fix host:port --timeout <arg> call host:port command arg arg .. arg reshard host:port --slots <arg> --yes --from <arg> --pipeline <arg> --timeout <arg> --to <arg> del-node host:port node_id check host:port rebalance host:port --threshold <arg> --simulate --pipeline <arg> --use-empty-masters --auto-weights --weight <arg> --timeout <arg> info host:port help (show this help) set-timeout host:port milliseconds add-node new_host:new_port existing_host:existing_port --master-id <arg> --slave create host1:port1 ... hostN:portN --replicas <arg> import host:port --copy --from <arg> --replace
3. 创建实例目录并编写配置文件:
[root@rhel65-lockey1 redis_cluster]# mkdir -p /usr/local/redis_cluster/3000{1..8}
[root@rhel65-lockey1 redis_cluster]# vim 3000{1..8}/redis.conf
daemonize yespidfile /usr/local/redis_cluster/3000{1..8}/redis.pidlogfile /usr/local/redis_cluster/3000{1..8}/redis.logport 3000{1..8}dir /usr/local/redis_cluster/3000{1..8}cluster-enabled yescluster-config-file cluster.confcluster-node-timeout 10000appendonly yes
[root@rhel65-lockey1 redis_cluster]# redis-server 3000{1..6}/redis.conf
创建集群
[root@rhel65-lockey1 redis_cluster]# redis-trib.rb create –replicas 1 127.0.0.1:30001 127.0.0.1:30002 127.0.0.1:30003 127.0.0.1:30004 127.0.0.1:30005 127.0.0.1:30006
查看集群信息
[root@rhel65-lockey1 redis_cluster]# redis-trib.rb info 127.0.0.1:30001
16383槽位必须完整,要不然集群就会down掉(知道什么意思马)
连接到实例进行操作
redis-cli -c -p 30001
redis-trib.rb check 127.0.0.1:30001
添加实例
[root@rhel65-lockey1 redis_cluster]# redis-trib.rb add-node 127.0.0.1:30007 127.0.0.1:30006
#均衡槽位 需注意use-empty-masters参数
#刚加入的节点槽位为0,需要重新分配槽位
[root@rhel65-lockey1 redis_cluster]# redis-trib.rb rebalance --threshold 1 --use-empty-masters 127.0.0.1:30001
添加实例并且设置master
[root@rhel65-lockey1 redis_cluster]# redis-trib.rb add-node --slave --master-id 55395a73776b1a3f3fab441d4139e271611d95a1 127.0.0.1:30008 127.0.0.1:30001
16383槽位必须完整,要不然集群就会down掉,可以试着干掉集群中的一些master,只要所有master的slot值加起来不够16383则连接到集群进行操作后会提示服务DOWN掉了,无法进行操作
二、redis作为mysql的缓存
主机环境(rhel65 x86_64bit):
172.25.5.91 LNMP172.25.5.92 安装好redis之后基本不用进行其他操作,配置参数设置bind:0.0.0.0 CONFIG GET *172.25.5.93 mysql
本实验各软件版本:
nginx-1.12.1.tar.gzphp-5.3.3-38.el6.x86_64redis-4.0.1mysql-server-5.1.71-1.el6.x86_64
1.mysql(172.25.5.93)端加好测试数据并做好授权
mysql> grant all on test.* to redis@”%” identified by “lockey23”;
use test;CREATE TABLE `test` (`id` int(7) NOT NULL AUTO_INCREMENT, `name` char(8) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `test` VALUES (1,'test1'),(2,'test2'),(3,'test3'),(4,'test4'),(5,'test5'),(6,'test6'),(7,'test7'),(8,'test8'),(9,'test9');
2.php的redis扩展模块添加
172.25.5.91,首先确保lnmp架构已经OK了
https://github.com/owlient/phpredis
[root@rhel65-lockey1 ~]# unzip phpredis-master.zip
[root@rhel65-lockey1 ~]# cd phpredis-master
[root@rhel65-lockey1 phpredis-master]# phpize
[root@rhel65-lockey1 phpredis-master]# ./configure
[root@rhel65-lockey1 phpredis-master]# make && make install
[root@rhel65-lockey1 phpredis-master]# cp /etc/php.d/mysql.ini redis.ini
[root@rhel65-lockey1 phpredis-master]# cd /usr/lib64/php/modules/
[root@rhel65-lockey1 php.d]# cat redis.ini
; Enable mysql extension module
extension=redis.so
或者:
# vim /etc/php.ini#添加以下行extension=redis.so
重新启动php-fpm加载新加模块
[root@rhel65-lockey1 php.d]# /etc/init.d/php-fpm restart
vim /usr/local/nginx/html/test.php#数据测试页
<?php $redis = new Redis(); $redis->connect('172.25.5.92',6379) or die ("could net connect redis server"); # $query = "select * from test limit 9"; $query = "select * from test"; for ($key = 1; $key < 10; $key++) { if (!$redis->get($key)) { $connect = mysql_connect('172.25.5.93','redis','lockey23'); mysql_select_db(test); $result = mysql_query($query); //如果没有找到$key,就将该查询sql的结果缓存到redis while ($row = mysql_fetch_assoc($result)) { $redis->set($row['id'],$row['name']); } $myserver = 'mysql'; break; }else { $myserver = "redis"; $data[$key] = $redis->get($key); } } echo $myserver; echo "<br>"; for ($key = 1; $key < 10; $key++) { echo "number is <b><font color=#FF0000>$key</font></b>"; echo "<br>"; echo "name is <b><font color=#FF0000>$data[$key]</font></b>"; echo "<br>"; }?>
访问页面可以看到测试数据:
以上操作只是通过redis做了一个缓存,而且数据不会自动更新,很显然这样是有问题的,那么下来
数据库触发器同步redis和mysql数据
172.25.5.91
安安装 gearman 软件包:
[root@rhel65-lockey1 ] yum install gearman* libevent* libgearman-* -y
装 php 的 gearman 扩展
[root@rhel65-lockey1 ] tar zxf gearman-1.1.2.tgz [root@rhel65-lockey1 ] cd gearman-1.1.2[root@rhel65-lockey1 ] phpize [root@rhel65-lockey1 ] ./configure [root@rhel65-lockey1 ] make && make install[root@rhel65-lockey1 redis-lamp]# cat /etc/php.ini | grep gearman#添加扩展extension=gearman.so[root@rhel65-lockey1 redis-lamp]# /etc/init.d/php-fpm restart[root@rhel65-lockey1 redis-lamp]# vim worker.php
[root@rhel65-lockey1 redis-lamp]# nohup php worker.php &
172.25.5.93
安装 lib_mysqludf_json
yum install -y mysql-devel
unzip lib_mysqludf_json-master.zip
mysql> show global variables like ‘plugin_dir’;
CREATE FUNCTION json_object RETURNS STRING SONAME ‘lib_mysqludf_json.so’;
# 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> CREATE FUNCTION json_object RETURNS STRING SONAME
‘lib_mysqludf_json.so’;
查看函数
mysql> select * from mysql.func;
安装 gearman-mysql-udf
先解决依赖:
yum install libgearman-devel-1.1.8-2.el6.x86_64.rpm libevent* libgearman-1.1.8-2.el6.x86_64.rpm -y
20 tar -zxvf gearman-mysql-udf-0.6.tar.gz
21 cd gearman-mysql-udf-0.6
24 ./configure –with-mysql –libdir=/usr/lib64/mysql/plugin/
[root@rhel65-lockey3 ~]#
cd gearman-mysql-udf-0.6
35 ./configure –with-mysql –libdir=/usr/lib64/mysql/plugin/
36 make && make install
注册 UDF 函数
CREATE FUNCTION gman_do_background RETURNS STRING SONAME ‘libgearman_mysql_udf.so’;
CREATE FUNCTION gman_servers_set RETURNS STRING SONAME ‘libgearman_mysql_udf.so’;
指定 gearman 的服务信息
mysql> select gman_servers_set(‘172.25.5.91:4730’);
+————————————–+
| gman_servers_set(‘172.25.5.91:4730’) |
+————————————–+
| 172.25.5.91:4730 |
+————————————–+
1 row in set (0.00 sec)
编写 mysql 触发器
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> SHOW TRIGGERS FROM test;
往数据库中插入数据然后刷新页面查看
- redis cluster && Redis 作 mysql 的缓存服务器
- Redis作为MySQL缓存服务器的使用
- springboot+redis作缓存
- Redis缓存服务器的配置
- mysql 与缓存服务器集成的介绍(memcache+redis)
- redis作为mysql的缓存服务器(读写分离)
- redis作为mysql的缓存服务器(读写分离)
- Windows下Redis作为Mysql的缓存服务器-读写分离
- redis作为mysql的缓存服务器(读写分离)
- Redis与mysql的不同:如何将Redis作为Mysql的缓存服务器
- redis-cluster的搭建
- Redis Cluster的安装
- Redis-Cluster的安装
- redis cluster的安装
- Redis 集群及将 Redis 作为 mysql 的缓存服务器实战
- Django + Redis Cluster 缓存集群应用的实现
- redis作为缓存服务器
- 分布式缓存--系列2 -- Redis Cluster
- JAVA中常见的四种排序--冒泡排序、选择排序、插入排序和快速排序 详解
- c语言 母串和子串的匹配问题
- 标签中文本某些字符替换(字符转换)
- SSM中Spring自带的任务定时器中Cron规则的配置
- Eclipse 新建Maven project select an Archetype这一步卡死
- redis cluster && Redis 作 mysql 的缓存服务器
- hdu 1270 小希的数表
- 10G数据量,只有2G内存,怎样找到中位数?
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- Android adb 命令无线调试andorid真机
- SharedPreference源码解析
- C++中的虚函数(表)实现机制以及用C语言对其进行的模拟实现
- 带你实现漂亮的滑动卷尺
- [ArcGIS] 空间分析(六) 追踪分析(台风路径)