[料理佳肴] 管理 Redis Cluster(Add Node、Delete Node、Resharding)

Redis Cluster 建立完成后,当然不是建完就摆着可以不用理它,未来有可能会遇到 Scale out 或是资源重新分配的问题,以下介绍如何在我们的 Redis Cluster 上 Add Node、Delete Node、Resharding。


增加 Node

我们准备好另一个 Node 并正常启动后,就可以执行下面的命令,来增加 Cluster 的 Node。

命令 redis-trib.rb add-node 127.0.0.1:6383 127.0.0.1:6380

命令说明:

Node 增加成功后,我们就会收到下面的成功消息。

这时候这个 Node 还不能使用,因为它并没有被分配 hash slot,所以我们就得做 Resharding,把其他 Nodes 上的 hash slot 手动搬到新增加的 Node 来。

重新分片 (Resharding)

Resharding 对于 Redis Cluster 来说是一件非常重要的事情,Node 无论增减都得做 Resharding。

命令 redis-trib.rb reshard 127.0.0.1:6380

命令说明:

当我们下了 reshard 的命令,Redis 会开始询问我们一些问题,第一个问题就是要移动多少 hash slot?

第二个问题会问我们这些 hash slot 要移动到哪一个 Node Id?(Node Id 可以从任意一个 nodes.conf 之中得知。)

综合以上两个问题,我举例说明一下:如果我们要移动 10 个 hash slot 到 1a2b3c 这个 Node Id 上,则表示移动完毕后 1a2b3c 这个 Node 总共会有 10 个 hash slot。

第三个问题会问我们要从哪些 Nodes 移动这些 hash slot?

我们可以填入 all 代表从除了目的 Node 之外的 Nodes 上移动 hash slot 到目的 Node,也可以一台一台填入来源 Node Id,填完后输入 done 即可,至于一个来源 Node 要被移动多少 hash slot,Redis 会自己决定。

接着 Redis 就会让我们预览分片结果,确认无误填入 yes 就开始搬移了,而且在搬移的过程中 Redis 的服务并不会被中断。

另一种重新分片 (Resharding) 的方式

除上前面提到的下参数方式之外,也可以这样做。

命令 redis-trib.rb reshard --from dd5333e3927eb199564b54308dbaf71cd5ae0b5d --to c1663ed15f472e26c5b1ebf9534a2a0cdeebaef3 --slots 454 --yes 127.0.0.1:6380

命令说明:

删除 Node

删除 Cluster 的 Node 就相对单纯许多了。

命令 redis-trib.rb del-node 127.0.0.1:6383 dd5333e3927eb199564b54308dbaf71cd5ae0b5d

命令说明:

执行后,我们就会收到下面的消息,而且连同被删除的 Node 的服务也一起被停掉了。

删除 Node 之前必须注意一件事,要先确保被删除的 Node 已经没有被分配到 hash slot,才可以进行删除。

参考数据

  • windows redis 集群搭建(二)