测试环境搭建 redis-cluster

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值