一、redis的集群搭建
1.将之前的redis关掉
[root@server1 utils]# /etc/init.d/redis_6379 stop
2.搭建集群环境,搭建六个(7001到7006)集群节点
[root@server1 ~]# cd /usr/local
[root@server1 local]# mkdir rediscluster
[root@server1 local]# ls
bin games lib libexec rediscluster share
etc include lib64 nginx sbin src
[root@server1 local]# cd rediscluster/
[root@server1 rediscluster]# mkdir 700{1..6}
[root@server1 rediscluster]# ls
7001 7002 7003 7004 7005 7006
3.在每个节点的目录里编写配置文件redis.conf
[root@server1 rediscluster]# cd 7001/
[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
4.查看进程,7001进程已开启
[root@server1 7001]# ps ax
查看端口7001已经打开
[root@server1 7001]# netstat -tnlp
5.把7001目录下配置好的文件发送给其他目录,其他目录下的文件只需修改对应的号(比如:7002目录下的配置文件对应的号为7002)
[root@server1 7001]# cp redis.conf ../7002/
[root@server1 7001]# cp redis.conf ../7003/
[root@server1 7001]# cp redis.conf ../7004/
[root@server1 7001]# cp redis.conf ../7005/
[root@server1 7001]# cp redis.conf ../7006/
6.修改7002目录下redis.conf文件
[root@server1 7001]# cd ../7002/
[root@server1 7002]# vim redis.conf
port 7002
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
pidfile "/usr/local/rediscluster/7002/redis.pid"
logfile "/usr/local/rediscluster/7002/redis.log"
daemonize yes
dir "/usr/local/rediscluster/7002"
[root@server1 7002]# redis-server redis.conf
注意:其他几个目录配置如上
7.查看进程6个端口的进程都已开启
[root@server1 7006]# ps ax
8.复制redis-trib.rb到/usr/local/bin/下
[root@server1 ~]# cd redis-5.0.3/
[root@server1 redis-5.0.3]# ls
00-RELEASENOTES COPYING Makefile redis.conf runtest-sentinel tests
BUGS deps MANIFESTO runtest sentinel.conf utils
CONTRIBUTING INSTALL README.md runtest-cluster src
[root@server1 redis-5.0.3]# cd src/
[root@server1 src]# cp redis-trib.rb /usr/local/bin/
9.创建集群
[root@server1 redis-5.0.3]# 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
- 测试:
1.测试集群与对应节点关系,7001,7002,7003是matser
[root@server1 redis-5.0.3]# redis-cli --cluster info 127.0.0.1:7001
127.0.0.1:7001 (436821ae...) -> 0 keys | 5461 slots | 1 slaves.
127.0.0.1:7003 (64e2feb3...) -> 0 keys | 5461 slots | 1 slaves.
127.0.0.1:7002 (8ab0cf15...) -> 0 keys | 5462 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
[root@server1 redis-5.0.3]# redis-cli -c -p 7001
127.0.0.1:7001> info
2.无中心检测
[root@server1 redis-5.0.3]# redis-cli -c -p 7005
127.0.0.1:7005> get name
-> Redirected to slot [5798] located at 127.0.0.1:7002
(nil)
127.0.0.1:7002> exit
[root@server1 redis-5.0.3]# redis-cli -c -p 7006
127.0.0.1:7006> get name
-> Redirected to slot [5798] located at 127.0.0.1:7002
(nil)
3.将7002(master)宕掉,对应的7006会接替
[root@server1 redis-5.0.3]# redis-cli -c -p 7002
127.0.0.1:7002> SHUTDOWN
not connected>
4.如果在把slave宕掉,整个集群就无法使用
[root@server1 redis-5.0.3]# redis-cli -c -p 7006
127.0.0.1:7006> SHUTDOWN
not connected> exit
5.查看进程,7002,7006进程不在
- 恢复集群
1.重新加载7002和7006的配置文件
[root@server1 ~]# cd /usr/local/rediscluster/
[root@server1 rediscluster]# cd 7006/
[root@server1 7006]# redis-server redis.conf
[root@server1 7006]# cd ..
[root@server1 rediscluster]# cd 7002/
[root@server1 7002]# redis-server redis.conf
2.再次查看集群恢复正常
[root@server1 ~]# ps ax
- 给集群中添加节点
1.先创建两个新的节点
[root@server1 ~]# cd /usr/local/rediscluster/
[root@server1 rediscluster]# ls
7001 7002 7003 7004 7005 7006
[root@server1 rediscluster]# mkdir 7007 7008
[root@server1 rediscluster]# ls
7001 7002 7003 7004 7005 7006 7007 7008
2.把7001目录下配置好的redis文件发送给7007和7008目录下
[root@server1 rediscluster]# cp 7001/redis.conf 7007/
[root@server1 rediscluster]# cp 7001/redis.conf 7008/
3.切换到7007目录下,编辑redis配置文件
[root@server1 rediscluster]# cd 7007/
[root@server1 7007]# ls
redis.conf
[root@server1 7007]# vim redis.conf
port 7007
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
pidfile "/usr/local/rediscluster/7007/redis.pid"
logfile "/usr/local/rediscluster/7007/redis.log"
daemonize yes
dir "/usr/local/rediscluster/7007"
4.把新建节点7007拉起来,查看进程7007节点已经起来
[root@server1 7007]# redis-server redis.conf
[root@server1 7007]# ps ax
5.切换到7008目录下,编辑redis配置文件
[root@server1 7007]# cd ../7008
[root@server1 7008]# vim redis.conf
port 7008
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
pidfile "/usr/local/rediscluster/7008/redis.pid"
logfile "/usr/local/rediscluster/7008/redis.log"
daemonize yes
dir "/usr/local/rediscluster/7008"
6.把新建节点7008拉起来,查看进程7008节点已经起来
[root@server1 7008]# redis-server redis.conf
[root@server1 7008]# ps ax
7.把节点7007添加到集群里(master的添加方法)
[root@server1 ~]# redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7001
8.查看节点7007已经添加进去
[root@server1 ~]# redis-cli --cluster check 127.0.0.1:7001
9.把节点7008添加到集群里(slave的添加方法)
[root@server1 ~]# redis-cli --cluster add-node --cluster-slave --cluster-master-id 259b303813b76fb05e6d938af7926d831aec719a 127.0.0.1:7008 127.0.0.1:7007
注意:这里的id号为节点7007的id
10.再次查看,节点7008已经添加进去
[root@server1 ~]# redis-cli --cluster check 127.0.0.1:7001
11.给新的节点7007添加哈希槽
[root@server1 ~]# redis-cli --cluster reshard --cluster-from all --cluster-to 259b303813b76fb05e6d938af7926d831aec719a --cluster-slots 300 --cluster-yes 127.0.0.1:7001
12.再次查看,哈希槽添加成功,但可以看到哈希槽分配不平均,会导致数据不同步
[root@server1 ~]# redis-cli --cluster check 127.0.0.1:7001
13.平均分配哈希槽
[root@server1 ~]# redis-cli --cluster rebalance --cluster-threshold 1 --cluster-use-empty-masters 127.0.0.1:7001
14.再次检查,可以看到哈希槽都为4096 slots
[root@server1 ~]# redis-cli --cluster check 127.0.0.1:7001
15.查看节点状态
[root@server1 ~]# redis-cli -c -p 7008
127.0.0.1:7008> info