linux Redis集群及PHP代码链接实例

48 篇文章 2 订阅
12 篇文章 0 订阅

概念解释
redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。其redis-cluster架构图如下:

这里写图片描述

1 本人是源码安装redis:

[fish_study@fish-studydeMacBook-Pro redis-6.0.9]# tar xzf redis-6.0.9.tar.gz
[fish_study@fish-studydeMacBook-Pro redis-6.0.9]# cd redis-6.0.9
[fish_study@fish-studydeMacBook-Pro redis-6.0.9 % ]# make
[fish_study@fish-studydeMacBook-Pro redis-6.0.9 %]# make install PREFIX=/usr/andy/redis-cluster

在redis-cluster下 修改bin文件夹为redis01,复制redis.conf配置文件
创建目录redis-cluster并在此目录下再创建7001 7002 7003 7004 7005 7006共6个目录,在7000中创建配置文件redis.conf,内容如下:

        daemonize yes #后台启动
        port 7001 #修改端口号,从7001到7006
        cluster-enabled yes #开启cluster,去掉注释
        cluster-config-file nodes.conf #自动生成
        cluster-node-timeout 15000 #节点通信时间
        appendonly yes #持久化方式

使用sed 's/7001/7006/' redis_cluster.conf >redis_cluster7006.conf  分别创建其他文件

 

2、安装redis-trib所需的 ruby脚本


注意:centos7默认的ruby版本太低(2.0),要卸载重装(最低2.2)

yum remove ruby
yum install ruby
yum install rubygems

复制redis解压文件src下的redis-trib.rb文件到redis-cluster目录并安装gem

gem install redis-3.x.x.gem

3、启动所有的redis节点


可以写一个命令脚本start-all.sh

cd 7000
redis-server redis.conf
cd ..
cd 7001
redis-server redis.conf
cd ..
cd 7002
redis-server redis.conf
cd ..
cd 7003
redis-server redis.conf
cd ..
cd 7004
redis-server redis.conf
cd ..
cd 7005
redis-server redis.conf
cd ..

设置权限启动:

[root@localhost redis-cluster]# chmod 777 start-all.sh 
[root@localhost redis-cluster]# ./start-all.sh 

查看redis进程启动状态

fish_study@fish-studydeMacBook-Pro redis-6.0.9 % ps aux|grep redis
fish_study        7069   0.3  0.0  4349068   2324   ??  Ss    8:29下午   0:03.93 ./src/redis-server *:7006 [cluster] 
fish_study        7067   0.3  0.0  4349068   2388   ??  Ss    8:29下午   0:03.91 ./src/redis-server *:7005 [cluster] 
fish_study        6990   0.3  0.0  4349068   2352   ??  Ss    7:35下午   0:12.45 ./src/redis-server *:7004 [cluster] 
fish_study        6985   0.3  0.0  4351120   2372   ??  Ss    7:35下午   0:12.45 ./src/redis-server *:7002 [cluster] 
fish_study        6987   0.3  0.0  4349068   2348   ??  Ss    7:35下午   0:12.54 ./src/redis-server *:7003 [cluster] 
fish_study        6803   0.2  0.0  4349112   2348   ??  Ss    5:27下午   0:33.72 ./src/redis-server *:7001 [cluster] 
fish_study        7111   0.0  0.0  4268300    700 s000  S+    8:50下午   0:00.00 grep redis

可以看到redis的6个节点已经启动成功
注意:这里并没有创建集群

4、使用redis-trib.rb创建集群


注意:redis-trib.rb在redis/src目录下。

   redis-cli --cluster create 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 --cluster-replicas 1

使用create命令 --replicas 1 参数表示为每个主节点创建一个从节点,其他参数是实例的地址集合。

5、redis集群的测试


测试存取值,客户端连接集群redis-cli需要带上 -c ,redis-cli -c -p 端口号

[root@localhost redis]# ./redis-cli -c -p 7001
127.0.0.1:7001> set name andy
-> Redirected to slot [5798] located at 127.0.0.1:7002
OK
127.0.0.1:7002> get name
"andy"
127.0.0.1:7002> 

根据redis-cluster的key值分配,name应该分配到节点7002[5461-10922]上,上面显示redis cluster自动从7001跳转到了7002节点。

测试一下7000从节点获取name值

[root@localhost redis]# ./redis-cli -c -p 7000
127.0.0.1:7000> get name
-> Redirected to slot [5798] located at 127.0.0.1:7002
"andy"
127.0.0.1:7002> 

6、集群节点选举


现在模拟将7002节点挂掉,按照redis-cluster原理会选举会将 7002的从节点7005选举为主节点。

[root@localhost redis-cluster]# ps -ef | grep redis
root       7966      1  0 12:50 ?        00:00:29 ./redis-server 127.0.0.1:7000 [cluster]
root       7950      1  0 12:50 ?        00:00:28 ./redis-server 127.0.0.1:7001 [cluster]
root       7952      1  0 12:50 ?        00:00:29 ./redis-server 127.0.0.1:7002 [cluster]
root       7956      1  0 12:50 ?        00:00:29 ./redis-server 127.0.0.1:7003 [cluster]
root       7960      1  0 12:50 ?        00:00:29 ./redis-server 127.0.0.1:7004 [cluster]
root       7964      1  0 12:50 ?        00:00:29 ./redis-server 127.0.0.1:7005 [cluster]
root      11346  10581  0 14:57 pts/2    00:00:00 grep --color=auto redis
[root@localhost redis-cluster]# kill 7952

在查看集群中的7002节点

[root@localhost src]# ./redis-trib.rb check 127.0.0.1:7002
>>> Performing Cluster Check (using node 127.0.0.1:7002)
S: 671a0524a616da8b2f50f3d11a74aaf563578e41 127.0.0.1:7002
   slots: (0 slots) slave
   replicates 62a00566233fbff4467c4031345b1db13cf12b46
M: 18948dab5b07e3726afd1b6a42d5bf6e2f411ba1 127.0.0.1:7003
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
M: 62a00566233fbff4467c4031345b1db13cf12b46 127.0.0.1:7005
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
M: f4ee0a501f9aaf11351787a46ffb4659d45b7bd7 127.0.0.1:7001
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: 34e322ca50a2842e9f3664442cb11c897defba06 127.0.0.1:7004
   slots: (0 slots) slave
   replicates f4ee0a501f9aaf11351787a46ffb4659d45b7bd7
S: 2cb649ad3584370c960e2036fb01db834a546114 127.0.0.1:7000
   slots: (0 slots) slave
   replicates 18948dab5b07e3726afd1b6a42d5bf6e2f411ba1
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

可以看到集群连接不了7002节点,而7005有原来的S转换为M节点,代替了原来的7002节点。我们可以获取name值:

[root@localhost redis]# ./redis-cli -c -p 7001
127.0.0.1:7001> get name
-> Redirected to slot [5798] located at 127.0.0.1:7005
"andy"
127.0.0.1:7005> 
127.0.0.1:7005> 

从7001节点连入,自动跳转到7005节点,并且获取name值。

现在我们将7002节点恢复,看是否会自动加入集群中以及充当的M还是S节点。

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

再check一下7002节点,可以看到7002节点变成了7005的从节点

7 PHP代码连接redis集群实例:

<?php
//连接单个的Redis 服务
#$redis = new Redis();
#$redis->connect('10.1.1.35',6379);
#echo $redis->get("data_80300_0_");

#连接Redis集群
$redis_list = ['10.1.1.35:6379','10.1.1.151:6379','10.1.1.153:6379'];
$redisCluster = new RedisCluster(NUll,$redis_list);
echo $redisCluster->get("data_80300_0_");
echo "\n";
echo $redisCluster->get("data_76402_0_");
echo "\n";
echo $redisCluster->get("data_78989_0_");

#  echo "Server is running: " . $redis->ping();

echo "\n";
?>

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fish_study_csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值