Linux 版本
2.6.32-431.el6.x86_64
Redis 版本
redis-5.0.7
安装
见此博客,当然了版本就下载 5.0 或最新的也行。
集群搭建
创建目录
创建 redis-cluster 目录,并在里面创建如下目录
mkdir -p /usr/local/redis-cluster/
cd /usr/local/redis-cluster/
mkdir 7001 7002 7003 7004 7005 7006 log data
[root@fjr-ofckv-73-94 supdev]# cd /usr/local/redis-cluster/
[root@fjr-ofckv-73-94 redis-cluster]# ll
total 32
drwxr-xr-x 2 root root 4096 Mar 16 17:26 7001
drwxr-xr-x 2 root root 4096 Mar 16 17:26 7002
drwxr-xr-x 2 root root 4096 Mar 16 17:27 7003
drwxr-xr-x 2 root root 4096 Mar 16 17:27 7004
drwxr-xr-x 2 root root 4096 Mar 16 17:27 7005
drwxr-xr-x 2 root root 4096 Mar 16 17:27 7006
drwxr-xr-x 2 root root 4096 Mar 16 17:43 data
drwxr-xr-x 2 root root 4096 Mar 16 17:23 log
其中 7001 到 7006 存放集群里的配置文件,data 存放 rdb 及 aof 文件,log 存放日志。
配置节点信息
把 redis.conf 文件拷贝到 7001 里,同时命名为 nodes-7001.conf
cp /www/down/redis-5.0.7/redis.conf /usr/local/redis-cluster/7001/nodes-7001.conf
同时调整里面的如下配置
; 端口 7001
port 7001
; 守护进程启动
daemonize yes
; rdb 数据库文件保存路径
dir /usr/local/redis-cluster/data/
; rdb 文件名
dbfilename dump-7001.rdb
; 日志名
logfile "/usr/local/redis-cluster/log/7001.log"
; 开启 aof
appendonly yes
; 超时时间
cluster-node-timeout 5000
; 节点配置文件
cluster-config-file nodes-7001.conf
; 保护模式
protected-mode no
; 关闭全体覆盖需求,也就是只要集群不是全部宕掉就能对外提供服务
cluster-require-full-coverage no
然后依次在 7002 到 7006 里配置,
sed "s/7001/7002/g" nodes-7001.conf > ../7002/node-7002/conf
sed "s/7001/7003/g" nodes-7001.conf > ../7003/node-7003.conf
sed "s/7001/7004/g" nodes-7001.conf > ../7004/node-7004.conf
sed "s/7001/7005/g" nodes-7001.conf > ../7005/node-7005.conf
sed "s/7001/7006/g" nodes-7001.conf > ../7006/node-7006.conf
依次启动
/www/down/redis-5.0.7/src/redis-server /usr/local/redis-cluster/7001/nodes-7001.conf
/www/down/redis-5.0.7/src/redis-server /usr/local/redis-cluster/7002/nodes-7002.conf
/www/down/redis-5.0.7/src/redis-server /usr/local/redis-cluster/7003/nodes-7003.conf
/www/down/redis-5.0.7/src/redis-server /usr/local/redis-cluster/7004/nodes-7004.conf
/www/down/redis-5.0.7/src/redis-server /usr/local/redis-cluster/7005/nodes-7005.conf
/www/down/redis-5.0.7/src/redis-server /usr/local/redis-cluster/7006/nodes-7006.conf
查看是否已启动
[root@fjr-ofckv-73-94 redis-cluster]# ps aux | grep redis
root 2012 0.2 0.1 154992 7752 ? Ssl 17:27 0:11 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7002 [cluster]
root 2017 0.2 0.1 154992 8032 ? Ssl 17:27 0:10 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7003 [cluster]
root 2022 0.2 0.2 159088 12180 ? Ssl 17:27 0:11 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7004 [cluster]
root 2027 0.2 0.2 159088 12176 ? Ssl 17:27 0:11 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7005 [cluster]
root 2032 0.2 0.2 159088 12192 ? Ssl 17:27 0:11 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7006 [cluster]
root 2237 0.2 0.2 159600 12116 ? Ssl 17:43 0:09 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7001 [cluster]
root 2985 0.0 0.0 103324 868 pts/1 S+ 18:45 0:00 grep redis
查看 cluster 相关信息
[root@fjr-ofckv-73-94 redis-cluster]# /www/down/redis-5.0.7/src/redis-cli -p 7001 cluster slots
(empty list or set)
[root@fjr-ofckv-73-94 redis-cluster]# /www/down/redis-5.0.7/src/redis-cli -p 7001 cluster info
cluster_state:fail
cluster_slots_assigned:0
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:1
cluster_size:0
cluster_current_epoch:0
cluster_my_epoch:0
cluster_stats_messages_sent:0
cluster_stats_messages_received:0
[root@fjr-ofckv-73-94 redis-cluster]# /www/down/redis-5.0.7/src/redis-cli -p 7001 cluster nodes
0979fae93061b84ca8855277e28057cb3da41868 :7001@17001 myself,master - 0 0 0 connected
由于还仅仅是把节点启动起来,各自还不晓得对方的存在,因此还需要在此基础上创建集群
/www/down/redis-5.0.7/src/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
注: replicas 1 表示每个节点有一个从节点
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 127.0.0.1:7005 to 127.0.0.1:7001
Adding replica 127.0.0.1:7006 to 127.0.0.1:7002
Adding replica 127.0.0.1:7004 to 127.0.0.1:7003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 0979fae93061b84ca8855277e28057cb3da41868 127.0.0.1:7001
slots:[0-5460] (5461 slots) master
M: 03ccc612329f19f3f76f0e79f6ab3a4769c5db91 127.0.0.1:7002
slots:[5461-10922] (5462 slots) master
M: 4e9a21de5316c61d8e4cd5a8b5aa0e76b057c099 127.0.0.1:7003
slots:[10923-16383] (5461 slots) master
S: 272f3e3502ab53c28a1b062d6434b73acb384e81 127.0.0.1:7004
replicates 03ccc612329f19f3f76f0e79f6ab3a4769c5db91
S: 1da7b5b8bb52e62e5f4d75cbe26e12ea47ccb4a7 127.0.0.1:7005
replicates 4e9a21de5316c61d8e4cd5a8b5aa0e76b057c099
S: cce5b4ed446ca59fa4485ce72907024036744d00 127.0.0.1:7006
replicates 0979fae93061b84ca8855277e28057cb3da41868
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
...
>>> Performing Cluster Check (using node 127.0.0.1:7001)
M: 0979fae93061b84ca8855277e28057cb3da41868 127.0.0.1:7001
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 1da7b5b8bb52e62e5f4d75cbe26e12ea47ccb4a7 127.0.0.1:7005
slots: (0 slots) slave
replicates 4e9a21de5316c61d8e4cd5a8b5aa0e76b057c099
S: 272f3e3502ab53c28a1b062d6434b73acb384e81 127.0.0.1:7004
slots: (0 slots) slave
replicates 03ccc612329f19f3f76f0e79f6ab3a4769c5db91
M: 03ccc612329f19f3f76f0e79f6ab3a4769c5db91 127.0.0.1:7002
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
M: 4e9a21de5316c61d8e4cd5a8b5aa0e76b057c099 127.0.0.1:7003
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: cce5b4ed446ca59fa4485ce72907024036744d00 127.0.0.1:7006
slots: (0 slots) slave
replicates 0979fae93061b84ca8855277e28057cb3da41868
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
可以看到 Master 节点分别为 7001、7002、7003,Slave 节点分别为 7006、7005、7004,同时 slots 在三个 Master 节点分布范围 [0-5460]、[5461-10922]、[10923-16383]。
至此,集群都搭建完毕,连接其中一个节点,进去看看
[root@fjr-ofckv-73-94 redis-cluster]# /www/down/redis-5.0.7/src/redis-cli -c -p 7001
127.0.0.1:7001> get name
-> Redirected to slot [5798] located at 127.0.0.1:7002
-c 是以集群方式连接
查询 key 为 name 的时候,因为其 slot 落在 7002 中,于是转移到了 7002
这时如果把某个 Master 阶段 shutdown 的话,那么对应的 Slave 就会成为 Maser,比如我把 7001 shutdown,之后再启动来,这时会发现
[root@fjr-ofckv-73-94 redis-cluster]# /www/down/redis-5.0.7/src/redis-cli -c -p 7002 cluster nodes
cce5b4ed446ca59fa4485ce72907024036744d00 127.0.0.1:7006@17006 master - 0 1584351797000 7 connected 0-5460
1da7b5b8bb52e62e5f4d75cbe26e12ea47ccb4a7 127.0.0.1:7005@17005 slave 4e9a21de5316c61d8e4cd5a8b5aa0e76b057c099 0 1584351796022 5 connected
0979fae93061b84ca8855277e28057cb3da41868 127.0.0.1:7001@17001 slave cce5b4ed446ca59fa4485ce72907024036744d00 0 1584351797425 7 connected
4e9a21de5316c61d8e4cd5a8b5aa0e76b057c099 127.0.0.1:7003@17003 master - 0 1584351795921 3 connected 10923-16383
272f3e3502ab53c28a1b062d6434b73acb384e81 127.0.0.1:7004@17004 slave 03ccc612329f19f3f76f0e79f6ab3a4769c5db91 0 1584351796423 4 connected
03ccc612329f19f3f76f0e79f6ab3a4769c5db91 127.0.0.1:7002@17002 myself,master - 0 1584351795000 2 connected 5461-10922
原来的 Master 的 7001 变成了 7006 的 Slave 节点了。
添加新节点
主节点
集群正常运行后,肯定会添加节点的,这时以添加 7007 主节点为例
mkdir 7007
sed "s/7001/7007/g" nodes-7001.conf > ../7007/node-7007.conf
/www/down/redis-5.0.7/src/redis-server /usr/local/redis-cluster/7007/nodes-7007.conf
再次查看启动的 redis 进程
[root@fjr-ofckv-73-94 7007]# ps aux | grep --color redis
root 2012 0.2 0.1 154992 7784 ? Ssl 17:27 0:49 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7002 [cluster]
root 2017 0.2 0.1 154992 7984 ? Ssl 17:27 0:48 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7003 [cluster]
root 2022 0.2 0.2 159088 12204 ? Ssl 17:27 0:50 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7004 [cluster]
root 2027 0.2 0.2 159088 12200 ? Ssl 17:27 0:50 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7005 [cluster]
root 2032 0.2 0.2 159088 12072 ? Ssl 17:27 0:53 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7006 [cluster]
root 2237 0.2 0.2 159600 12168 ? Ssl 17:43 0:48 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7001 [cluster]
root 5638 0.3 0.1 154992 7836 ? Ssl 22:37 0:05 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7007 [cluster]
root 5963 0.0 0.0 103328 964 pts/1 S+ 23:00 0:00 grep --color redis
接下来就是把新加的 7007 节点添加到集群里
/www/down/redis-5.0.7/src/redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7002
注: 127.0.0.1:7007 为要添加的主节点, 127.0.0.1:7002 为集群里的任一节点,也可以是 127.0.0.1:7001
7007 节点算是加入集群的大家庭了,但是此时还不能使用。为啥,因为没有分配 slots,cluster 就靠这个活。那么下一步就是分配 slots 了
[root@fjr-ofckv-73-94 7007]# /www/down/redis-5.0.7/src/redis-cli --cluster reshard 127.0.0.1:7002
>>> Performing Cluster Check (using node 127.0.0.1:7007)
M: ff51baed5319512d7e242b4d6db1df36e9775d06 127.0.0.1:7007
slots: (0 slots) master
S: 0979fae93061b84ca8855277e28057cb3da41868 127.0.0.1:7001
slots: (0 slots) slave
replicates cce5b4ed446ca59fa4485ce72907024036744d00
S: 272f3e3502ab53c28a1b062d6434b73acb384e81 127.0.0.1:7004
slots: (0 slots) slave
replicates 03ccc612329f19f3f76f0e79f6ab3a4769c5db91
M: 4e9a21de5316c61d8e4cd5a8b5aa0e76b057c099 127.0.0.1:7003
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: cce5b4ed446ca59fa4485ce72907024036744d00 127.0.0.1:7006
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 1da7b5b8bb52e62e5f4d75cbe26e12ea47ccb4a7 127.0.0.1:7005
slots: (0 slots) slave
replicates 4e9a21de5316c61d8e4cd5a8b5aa0e76b057c099
M: 03ccc612329f19f3f76f0e79f6ab3a4769c5db91 127.0.0.1:7002
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 1500
What is the receiving node ID? ff51baed5319512d7e242b4d6db1df36e9775d06
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1: 03ccc612329f19f3f76f0e79f6ab3a4769c5db91
Source node #2: done
回车后,会提示要分配多少个 slots ,输入 1500
,回车,接下来会提示分配给谁,那还用说,输入 7007 的 node-id
,回车,接下来是从哪个 node-id 里分配,输入 7002 的 node-id
,回车,最后再输入 done
,然后输入 yes
。
node ID 可以从 /www/down/redis-5.0.7/src/redis-cli -c -p 7001 cluster nodes 查看集群里每个节点的 node-id,也就是列表的中第一列
分配结束后,可以查看下集群的 slots
[root@fjr-ofckv-73-94 7007]# /www/down/redis-5.0.7/src/redis-cli -c -p 7002 cluster slots
1) 1) (integer) 0
2) (integer) 5460
3) 1) "127.0.0.1"
2) (integer) 7006
3) "cce5b4ed446ca59fa4485ce72907024036744d00"
4) 1) "127.0.0.1"
2) (integer) 7001
3) "0979fae93061b84ca8855277e28057cb3da41868"
2) 1) (integer) 5461
2) (integer) 6960
3) 1) "127.0.0.1"
2) (integer) 7007
3) "ff51baed5319512d7e242b4d6db1df36e9775d06"
3) 1) (integer) 10923
2) (integer) 16383
3) 1) "127.0.0.1"
2) (integer) 7003
3) "4e9a21de5316c61d8e4cd5a8b5aa0e76b057c099"
4) 1) "127.0.0.1"
2) (integer) 7005
3) "1da7b5b8bb52e62e5f4d75cbe26e12ea47ccb4a7"
4) 1) (integer) 6961
2) (integer) 10922
3) 1) "127.0.0.1"
2) (integer) 7002
3) "03ccc612329f19f3f76f0e79f6ab3a4769c5db91"
4) 1) "127.0.0.1"
2) (integer) 7004
3) "272f3e3502ab53c28a1b062d6434b73acb384e81"
当然了,也可以看下所有的节点
[root@fjr-ofckv-73-94 7007]# /www/down/redis-5.0.7/src/redis-cli -c -p 7002 cluster nodes
cce5b4ed446ca59fa4485ce72907024036744d00 127.0.0.1:7006@17006 master - 0 1584370042197 7 connected 0-5460
ff51baed5319512d7e242b4d6db1df36e9775d06 127.0.0.1:7007@17007 master - 0 1584370043701 8 connected 5461-6960
1da7b5b8bb52e62e5f4d75cbe26e12ea47ccb4a7 127.0.0.1:7005@17005 slave 4e9a21de5316c61d8e4cd5a8b5aa0e76b057c099 0 1584370043701 5 connected
0979fae93061b84ca8855277e28057cb3da41868 127.0.0.1:7001@17001 slave cce5b4ed446ca59fa4485ce72907024036744d00 0 1584370043200 7 connected
4e9a21de5316c61d8e4cd5a8b5aa0e76b057c099 127.0.0.1:7003@17003 master - 0 1584370043000 3 connected 10923-16383
272f3e3502ab53c28a1b062d6434b73acb384e81 127.0.0.1:7004@17004 slave 03ccc612329f19f3f76f0e79f6ab3a4769c5db91 0 1584370042000 4 connected
03ccc612329f19f3f76f0e79f6ab3a4769c5db91 127.0.0.1:7002@17002 myself,master - 0 1584370042000 2 connected 6961-10922
看到没有,7002 的 slots 少了 1500 个,变成了 6961-10922;而 7007 的变成了 5461-6960。
从节点
单个 Master 节点会有单点故障,那么再给其加个 Slave 节点。
先添加配置并启动
mkdir 7008
sed "s/7001/7008/g" nodes-7001.conf > ../7008/node-7008.conf
/www/down/redis-5.0.7/src/redis-server /usr/local/redis-cluster/7008/nodes-7008.conf
再使其称为 7007 的 Slave 节点
/www/down/redis-5.0.7/src/redis-cli --cluster add-node 127.0.0.1:7008 127.0.0.1:7007 --cluster-slave --cluster-master-id ff51baed5319512d7e242b4d6db1df36e9775d06
ff51baed5319512d7e242b4d6db1df36e9775d06 就是 7007 的 node-id
再看下 cluster nodes
[root@fjr-ofckv-73-94 7008]# /www/down/redis-5.0.7/src/redis-cli -c -p 7008 cluster nodes
0979fae93061b84ca8855277e28057cb3da41868 127.0.0.1:7001@17001 slave cce5b4ed446ca59fa4485ce72907024036744d00 0 1584372527030 7 connected
272f3e3502ab53c28a1b062d6434b73acb384e81 127.0.0.1:7004@17004 slave 03ccc612329f19f3f76f0e79f6ab3a4769c5db91 0 1584372525525 2 connected
03ccc612329f19f3f76f0e79f6ab3a4769c5db91 127.0.0.1:7002@17002 master - 0 1584372527000 2 connected 6961-10922
ff51baed5319512d7e242b4d6db1df36e9775d06 127.0.0.1:7007@17007 master - 0 1584372527532 8 connected 5461-6960
cce5b4ed446ca59fa4485ce72907024036744d00 127.0.0.1:7006@17006 master - 0 1584372526026 7 connected 0-5460
2eb62eb4757e6f7a1f4101ff8ec184ea67e0a56c 127.0.0.1:7008@17008 myself,slave ff51baed5319512d7e242b4d6db1df36e9775d06 0 1584372526000 0 connected
4e9a21de5316c61d8e4cd5a8b5aa0e76b057c099 127.0.0.1:7003@17003 master - 0 1584372527532 3 connected 10923-16383
1da7b5b8bb52e62e5f4d75cbe26e12ea47ccb4a7 127.0.0.1:7005@17005 slave 4e9a21de5316c61d8e4cd5a8b5aa0e76b057c099 0 1584372527532 3 connected
删除节点
删除从节点
[root@fjr-ofckv-73-94 7008]# /www/down/redis-5.0.7/src/redis-cli --cluster del-node 127.0.0.1:7007 2eb62eb4757e6f7a1f4101ff8ec184ea67e0a56c
>>> Removing node 2eb62eb4757e6f7a1f4101ff8ec184ea67e0a56c from cluster 127.0.0.1:7007
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.
注:127.0.0.1:7007 这个为集群中的任一节点;2eb62eb4757e6f7a1f4101ff8ec184ea67e0a56c 为要删除的节点 id
删除了 7008 节点,同时也把其 shutdown 了,接下来看下集群的 nodes
[root@fjr-ofckv-73-94 7008]# /www/down/redis-5.0.7/src/redis-cli -c -p 7007 cluster nodes
0979fae93061b84ca8855277e28057cb3da41868 127.0.0.1:7001@17001 slave cce5b4ed446ca59fa4485ce72907024036744d00 0 1584372663000 7 connected
272f3e3502ab53c28a1b062d6434b73acb384e81 127.0.0.1:7004@17004 slave 03ccc612329f19f3f76f0e79f6ab3a4769c5db91 0 1584372663000 2 connected
4e9a21de5316c61d8e4cd5a8b5aa0e76b057c099 127.0.0.1:7003@17003 master - 0 1584372664573 3 connected 10923-16383
cce5b4ed446ca59fa4485ce72907024036744d00 127.0.0.1:7006@17006 master - 0 1584372663568 7 connected 0-5460
1da7b5b8bb52e62e5f4d75cbe26e12ea47ccb4a7 127.0.0.1:7005@17005 slave 4e9a21de5316c61d8e4cd5a8b5aa0e76b057c099 0 1584372663000 3 connected
ff51baed5319512d7e242b4d6db1df36e9775d06 127.0.0.1:7007@17007 myself,master - 0 1584372664000 8 connected 5461-6960
03ccc612329f19f3f76f0e79f6ab3a4769c5db91 127.0.0.1:7002@17002 master - 0 1584372663970 2 connected 6961-10922
果真没有了 7008,也可以查看 redis 进程得到
[root@fjr-ofckv-73-94 7008]# ps aux | grep --color redis
root 2012 0.2 0.1 154992 7808 ? Ssl 17:27 0:54 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7002 [cluster]
root 2017 0.2 0.1 154992 8052 ? Ssl 17:27 0:53 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7003 [cluster]
root 2022 0.2 0.2 159088 12204 ? Ssl 17:27 0:55 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7004 [cluster]
root 2027 0.2 0.2 159088 12204 ? Ssl 17:27 0:55 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7005 [cluster]
root 2032 0.2 0.2 159088 12212 ? Ssl 17:27 0:58 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7006 [cluster]
root 2237 0.2 0.2 159600 12172 ? Ssl 17:43 0:53 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7001 [cluster]
root 5638 0.3 0.1 154992 7984 ? Ssl 22:37 0:09 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7007 [cluster]
root 6322 0.0 0.0 103328 964 pts/1 S+ 23:31 0:00 grep --color redis
删除主节点
7007 节点现在成了孤家寡人了,这时就可以着手删除它了,但不能直接删
[root@fjr-ofckv-73-94 7008]# /www/down/redis-5.0.7/src/redis-cli --cluster del-node 127.0.0.1:7001 ff51baed5319512d7e242b4d6db1df36e9775d06
>>> Removing node ff51baed5319512d7e242b4d6db1df36e9775d06 from cluster 127.0.0.1:7001
[ERR] Node 127.0.0.1:7007 is not empty! Reshard data away and try again.
需要把其变成真正的寡人,因为其身上占着 slots。之前是从 7002 那获取的 1500 个 slots,那么现在还给它
[root@fjr-ofckv-73-94 7007]# /www/down/redis-5.0.7/src/redis-cli --cluster reshard 127.0.0.1:7007
>>> Performing Cluster Check (using node 127.0.0.1:7007)
M: ff51baed5319512d7e242b4d6db1df36e9775d06 127.0.0.1:7007
slots: (0 slots) master
S: 0979fae93061b84ca8855277e28057cb3da41868 127.0.0.1:7001
slots: (0 slots) slave
replicates cce5b4ed446ca59fa4485ce72907024036744d00
S: 272f3e3502ab53c28a1b062d6434b73acb384e81 127.0.0.1:7004
slots: (0 slots) slave
replicates 03ccc612329f19f3f76f0e79f6ab3a4769c5db91
M: 4e9a21de5316c61d8e4cd5a8b5aa0e76b057c099 127.0.0.1:7003
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: cce5b4ed446ca59fa4485ce72907024036744d00 127.0.0.1:7006
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 1da7b5b8bb52e62e5f4d75cbe26e12ea47ccb4a7 127.0.0.1:7005
slots: (0 slots) slave
replicates 4e9a21de5316c61d8e4cd5a8b5aa0e76b057c099
M: 03ccc612329f19f3f76f0e79f6ab3a4769c5db91 127.0.0.1:7002
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 1500
What is the receiving node ID? 03ccc612329f19f3f76f0e79f6ab3a4769c5db91
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1: ff51baed5319512d7e242b4d6db1df36e9775d06
Source node #2: done
好了,接下来就可以删除了
[root@fjr-ofckv-73-94 7008]# /www/down/redis-5.0.7/src/redis-cli --cluster del-node 127.0.0.1:7001 ff51baed5319512d7e242b4d6db1df36e9775d06
>>> Removing node ff51baed5319512d7e242b4d6db1df36e9775d06 from cluster 127.0.0.1:7001
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.
再来看看集群的节点情况
[root@fjr-ofckv-73-94 7008]# /www/down/redis-5.0.7/src/redis-cli -c -p 7001 cluster nodes
272f3e3502ab53c28a1b062d6434b73acb384e81 127.0.0.1:7004@17004 slave 03ccc612329f19f3f76f0e79f6ab3a4769c5db91 0 1584373678486 9 connected
cce5b4ed446ca59fa4485ce72907024036744d00 127.0.0.1:7006@17006 master - 0 1584373677482 7 connected 0-5460
1da7b5b8bb52e62e5f4d75cbe26e12ea47ccb4a7 127.0.0.1:7005@17005 slave 4e9a21de5316c61d8e4cd5a8b5aa0e76b057c099 0 1584373677000 5 connected
03ccc612329f19f3f76f0e79f6ab3a4769c5db91 127.0.0.1:7002@17002 master - 0 1584373678000 9 connected 5461-10922
4e9a21de5316c61d8e4cd5a8b5aa0e76b057c099 127.0.0.1:7003@17003 master - 0 1584373678000 3 connected 10923-16383
0979fae93061b84ca8855277e28057cb3da41868 127.0.0.1:7001@17001 myself,slave cce5b4ed446ca59fa4485ce72907024036744d00 0 1584373677000 1 connected
看看正在运行的 redis 进程
[root@fjr-ofckv-73-94 7008]# ps aux | grep redis
root 2012 0.2 0.1 154992 7820 ? Ssl 17:27 0:59 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7002 [cluster]
root 2017 0.2 0.1 154992 8036 ? Ssl 17:27 0:57 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7003 [cluster]
root 2022 0.2 0.2 159088 12208 ? Ssl 17:27 0:58 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7004 [cluster]
root 2027 0.2 0.2 159088 12204 ? Ssl 17:27 0:58 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7005 [cluster]
root 2032 0.2 0.2 159088 12144 ? Ssl 17:27 1:01 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7006 [cluster]
root 2237 0.2 0.2 159600 12188 ? Ssl 17:43 0:56 /www/down/redis-5.0.7/src/redis-server 127.0.0.1:7001 [cluster]
root 6531 0.0 0.0 103328 868 pts/1 S+ 23:48 0:00 grep redis
重新添加原来的节点
这时我想把 7007 节点再添加到集群里,这时得要注意咯,不能直接加,否则会出现
[OK] All nodes agree about slotsconfiguration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
Connecting to node 127.0.0.1:7001: OK
[ERR] Node 127.0.0.1:7001 is not empty. Either the nodealready knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
这时需要在 data 目录里把上次关于 7007 产生的文件都给删除了,再启动就可以了,之后就是添加 slots。
/www/down/redis-5.0.7/src/redis-cli --cluster reshard 127.0.0.1:7007 --cluster-from 03ccc612329f19f3f76f0e79f6ab3a4769c5db91 --cluster-to d8231404bf123aca51743c8288cf0b935dabc65b --cluster-slots 1500
注:–cluster-from:表示slot目前所在的节点的node ID,多个ID用逗号分隔;–cluster-to:表示需要新分配节点的node ID(貌似每次只能分配一个);
–cluster-slots:分配的slot数量
最后再把 7008 给添加进去
/www/down/redis-5.0.7/src/redis-cli --cluster add-node 127.0.0.1:7008 127.0.0.1:7007 --cluster-slave --cluster-master-id ff51baed5319512d7e242b4d6db1df36e9775d06