Redis 集群添加节点失败并显示 [ERR] 并非所有 16384 插槽都被节点覆盖

Redis cluster add node fails with [ERR] Not all 16384 slots are covered by nodes

我有 6 个节点(3 个主节点,3 个从节点)的 Redis 集群。我试图添加额外的主从:

redis-cli --cluster add-node 100.96.1.11:6379 100.96.2.14:6379

我有

redis-cli --cluster add-node 100.96.1.11:6379 100.96.2.14:6379
>>> Adding node 100.96.1.11:6379 to cluster 100.96.2.14:6379
>>> Performing Cluster Check (using node 100.96.2.14:6379)
M: 9d91c8d60c4c644a7846829f91f1af8563bf99f9 100.96.2.14:6379
   slots: (0 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[ERR] Not all 16384 slots are covered by nodes.

同时检查集群是否正常:

redis-cli --cluster check 100.96.1.5:6379
100.96.1.5:6379 (d475435a...) -> 36265 keys | 5462 slots | 1 slaves.
100.96.1.7:6379 (fd44a251...) -> 36205 keys | 5461 slots | 1 slaves.
100.96.2.13:6379 (00cc3a8b...) -> 36069 keys | 5461 slots | 1 slaves.
[OK] 108539 keys in 3 masters.
6.62 keys per slot on average.
>>> Performing Cluster Check (using node 100.96.1.5:6379)
M: d475435a6e70a5603f046f743f7774e6eead6afe 100.96.1.5:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 2c66b6ab6ebacd6054371bdc5d39aa08c48f76b5 100.96.1.10:6379
   slots: (0 slots) slave
   replicates 00cc3a8ba8cae1b539e172be01333b6f5fb2631a
M: fd44a251ce75c92049d1a5c748a8e52c2b0763e0 100.96.1.7:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
M: 00cc3a8ba8cae1b539e172be01333b6f5fb2631a 100.96.2.13:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: edcacf3cd1de6c5d9a3108211c7b84676b2cddca 100.96.2.9:6379
   slots: (0 slots) slave
   replicates fd44a251ce75c92049d1a5c748a8e52c2b0763e0
S: e6cea582a6d6a9c726d36d2899c9fbf4a7e08909 100.96.2.6:6379
   slots: (0 slots) slave
   replicates d475435a6e70a5603f046f743f7774e6eead6afe
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

怎么了?

要将新节点添加到 Redis 集群,我们应该使用命令:

redis-cli --cluster add-node <new-node-ip:port> <existing-node-ip:port>

在我的例子中,有两个新节点的 IP。 所以,如果我们需要添加两个新节点作为 Master 和 Slave,我们应该 运行 这个命令两次,但是对 slave 使用 --cluster-slave 标志:

redis-cli --cluster add-node <new-node-ip:port> <existing-node-ip:port>
redis-cli --cluster add-node <new-node-ip:port> <existing-node-ip:port> --cluster-slave

之后我们应该重新分片 Redis 集群:

redis-cli --cluster reshard <existing-node-ip:port>