博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux Redis集群及PHP代码链接实例
阅读量:762 次
发布时间:2019-03-24

本文共 5695 字,大约阅读时间需要 18 分钟。

概念解释

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 rubyyum install rubyyum install rubygems

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

gem install redis-3.x.x.gem

3、启动所有的redis节点

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

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

设置权限启动:

[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 redisfish_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 7001127.0.0.1:7001> set name andy-> Redirected to slot [5798] located at 127.0.0.1:7002OK127.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 7000127.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 redisroot       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 62a00566233fbff4467c4031345b1db13cf12b46M: 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 f4ee0a501f9aaf11351787a46ffb4659d45b7bd7S: 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 7001127.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集群实例:

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";?>

 

 

转载地址:http://sjukk.baihongyu.com/

你可能感兴趣的文章