本文共 5695 字,大约阅读时间需要 18 分钟。
概念解释
redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。其redis-cluster架构图如下:[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 分别创建其他文件
yum remove rubyyum install rubyyum install rubygems
复制redis解压文件src下的redis-trib.rb文件到redis-cluster目录并安装gem
gem install redis-3.x.x.gem
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个节点已经启动成功
注意:这里并没有创建集群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 参数表示为每个主节点创建一个从节点,其他参数是实例的地址集合。
[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>
[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的从节点
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/