http://www.redis.cn/topics/cluster-tutorial.html ##配置复制官网的 续上一篇博客 和上一篇博客的环境没有什么多大的影响,主要是配置好redis
【server1】
1:关闭之前操作的redis 2:#新建redis目录
[root@server1 ~]# mkdir /usr/local/rediscluster [root@server1 ~]# cd /usr/local/rediscluster/ [root@server1 rediscluster]# mkdir 700{1…6} [root@server1 ~]# cd /usr/local/rediscluster/7001 3:#编辑配置文件
[root@server1 7001]# vim redis.conf port 7001 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes pidfile “/usr/local/rediscluster/7001/redis.pid” logfile “/usr/local/rediscluster/7001/redis.log” daemonize yes dir “/usr/local/rediscluster/7001” #启动 [root@server1 7001]# redis-server redis.conf #查看 [root@server1 7001]# ps aux | grep redis 4:测试
[root@server1 7001]# redis-cli -p 7001 127.0.0.1:7001> info
5:同理配置7002~7006,并启动
将7001目录下的redis.conf文件拷贝到其他目录中,在其他目录中只需修改与其对应的目录数字 [root@server1 7001]# scp redis.conf …/7002 [root@server1 7001]# scp redis.conf …/7003 [root@server1 7001]# scp redis.conf …/7004 [root@server1 7001]# scp redis.conf …/7005 [root@server1 7001]# scp redis.conf …/7006 %s/7001/7002/g ##可以一步替换 vim /usr/local/rediscluster/7002/redis.conf vim /usr/local/rediscluster/7003/redis.conf vim /usr/local/rediscluster/7004/redis.conf vim /usr/local/rediscluster/7005/redis.conf vim /usr/local/rediscluster/7006/redis.conf
每次修改配置文件以后,都启动 redis-server redis.conf 6:查看端口,是否全部启动成功
[root@server1 ~]# ps aux | grep redis> 7:> #拷贝ruby脚本 RUBY介绍:
redis-trib.rb是redis官方推出的管理Redis-Cluster的工具,集成在redis的源码src目录下> redis-trib.rb是redis作者用Ruby完成的 封装成简单便捷的操作工具
[root@server1 ~]# cd /root/redis/redis-5.0.3/src [root@server1 src]# ls | grep redis-trib.rb > [root@server1 src]# cp redis-trib.rb /usr/local/bin/ #执行命令 [root@server1 src]# redis-trib.rb /usr/bin/env: ruby: No such file or directory ##报错了,因为没有ruby [root@server1 src]# yum install -y ruby [root@server1 src]# redis-trib.rb WARNING: redis-trib.rb is not longer available! You should use redis-cli instead. ##redis-trib.rb不可用了,用redis-cli [root@server1 ~]# redis-cli --cluster help 8:#创建集群
[root@server1 ~]# redis-cli --cluster create --cluster-replicas 1 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 表示为每一个master创建1个slave [OK] All 16384 slots covered. #看到这个表示16384个槽都分配好了 #查看集群信息 [root@server1 ~]# redis-cli --cluster info 127.0.0.1:7001 ##输入其他端口也可以,但是必须输一个端口 9: #测试存储信息
[root@server1 ~]# redis-cli -c -p 7001 127.0.0.1:7001> set name dd 127.0.0.1:7002> get name #数据保存在5798个哈希槽中,在7002上 测试 down掉一个节点,例如7002
[root@server1 ~]# redis-cli -c -p 7005 127.0.0.1:7005> get name -> Redirected to slot [5798] located at 127.0.0.1:7002 “dd” #在任意节点都可以获取到信息,但是都会跳转到7002 127.0.0.1:7002> SHUTDOWN ##挂掉7002,key还会保存在7004上 not connected> ##7002down的时候,key保存在7004上 [root@server1 src]# redis-cli -c -p 7005 127.0.0.1:7005> get name -> Redirected to slot [5798] located at 127.0.0.1:7004 “dd” 127.0.0.1:7004> get name ##将7004down掉,key丢失 [root@server1 src]# redis-cli -c -p 7005 127.0.0.1:7005> get name 127.0.0.1:7004> SHUTDOWN ##此时进入7004,将7004down掉 [root@server1 ~]# redis-cli -c -p 127.0.0.1:7004 ##进不去,会报错 key丢失,没有数据槽:
[root@server1 src]# redis-cli -c -p 7005 127.0.0.1:7005> get name (error) CLUSTERDOWN The cluster is down
##查看信息,7001和7004已经down掉 [root@server1 src]# redis-cli --cluster info 127.0.0.1:7001 [root@server1 ~]# cd /usr/local/rediscluster/ [root@server1 7002]# cat appendonly.aof #可以看到刚才添加的信息 再启动7002和7004
###注意4和2一定是匹配的 [root@server1 7002]# redis-server redis.conf [root@server1 7004]# redis-server redis.conf #正常查询数据 [root@server1 ~]# redis-cli -c -p 7001 127.0.0.1:7001> get name ##重新指向7004 ##再次查看集群信息 [root@server1 7004]# redis-cli --cluster info 127.0.0.1:7001
redis添加新节点
启动6个节点
1: cd /usr/local/rediscluster redis-server redis.conf ps aux | grep redis ##查看进程 redis-cli --cluster info 127.0.0.1:7001 redis-cli -c -p 7001 ##数据指向节点7002 2:添加两个新节点7007,7008
mkdir 7007 mkdir 7008 cp 7001/redis.conf 7007/ cp 7001/redis.conf 7008/ vim redis.conf ##启动7007,7008 redis-server redis.conf ps aux | grep redis ##查看是否启动 3: redis-cli --cluster info 127.0.0.1:7001
##可以看到两个新节点并没有添加到redis集群中 添加节点到集群并成为master
redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7001 redis-cli --cluster info 127.0.0.1:7001 ##可以看到7007并没有slave redis-cli -c -p 7007 127.0.0.1:7007> cluster nodes ##查看节点信息,7007的id #发现7007没有哈希槽 #尽管新节点没有包含任何哈希槽, 但它仍然是一个主节点, 所以在集群需要将某个从节点升级为新的主节点时, 这个新节点不会被选中,所以要添加一个slave 添加slave:
redis-cli --cluster add-node 127.0.0.1:7008 127.0.0.1:7007 –cluster-slave --cluster-master-id 0e64dfdb644368727a6f0fc55e95fdc04933b261 redis-cli --cluster help ##查看帮助 redis-cli --cluster info 127.0.0.1:7001 ##查看集群信息
4:##为新节点分配哈希槽 redis-cli --cluster reshard 127.0.0.1:7007
300 ##随便分配一点
##接收哈希槽的节点ID
all 这个意思是从所以的节点里选出500个槽位 #从所有节点获取哈希槽 ##检查可以看到已经分配哈希槽,分配不均等,可能导致数据不同步 redis-cli --cluster check 127.0.0.1:7001
5:均分哈希槽
redis-cli --cluster rebalance --cluster-threshold 1 --cluster-use-empty-masters 127.0.0.1:7001 redis-cli --cluster info 127.0.0.1:7001 ##可以看到哈希槽均分 redis-cli --cluster check 127.0.0.1:7001 ##检查 6: 查看数据
[root@server1 ~]# redis-cli -c -p 7008 127.0.0.1:7008> get name集群完成!!!!