redis集群 mysql_使用redis cluster和Redis作为mysql的缓存服务器

一、redis cluster

本文示例的redis源码目录为/redis-4.0.1

所有的redis实例(总共8个)均在一台主机上开启,所以务必加大内存

因为安装cluster需要用到ruby,所以请确保系统中有ruby

222157_0.png

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

fix host:port --timeout call host:port command arg arg .. arg reshard host:port --slots --yes --from --pipeline --timeout --to del-node host:port node_id check host:port rebalance host:port --threshold --simulate --pipeline --use-empty-masters --auto-weights --weight --timeout info host:port help (show this help) set-timeout host:port milliseconds add-node new_host:new_port existing_host:existing_port --master-id --slave create host1:port1 ... hostN:portN --replicas import host:port --copy --from --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 yes

pidfile /usr/local/redis_cluster/3000{1..8}/redis.pid

logfile /usr/local/redis_cluster/3000{1..8}/redis.log

port 3000{1..8}

dir /usr/local/redis_cluster/3000{1..8}

cluster-enabled yes

cluster-config-file cluster.conf

cluster-node-timeout 10000

appendonly 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

222157_1.png

222157_2.png

查看集群信息

[root@rhel65-lockey1 redis_cluster]# redis-trib.rb info 127.0.0.1:30001

222157_3.png

16383槽位必须完整,要不然集群就会down掉(知道什么意思马)

连接到实例进行操作

redis-cli -c -p 30001

222157_4.png

redis-trib.rb check 127.0.0.1:30001

222157_5.png

添加实例

[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

222157_6.png

添加实例并且设置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 LNMP

172.25.5.92 安装好redis之后基本不用进行其他操作,配置参数设置bind:0.0.0.0

CONFIG GET *

172.25.5.93 mysql

本实验各软件版本:

nginx-1.12.1.tar.gz

php-5.3.3-38.el6.x86_64

redis-4.0.1

mysql-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#数据测试页

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 "

";

for ($key = 1; $key < 10; $key++)

{

echo "number is $key";

echo "

";

echo "name is $data[$key]";

echo "

";

}

?>

访问页面可以看到测试数据:

222157_7.png

以上操作只是通过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

222157_8.png

222157_9.png

[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;

222157_10.png

往数据库中插入数据然后刷新页面查看

222157_11.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值