如何从redis集群中删除节点?

how to delete nodes from redis cluster?

我google它并找到了两个解决方案:

  1. CLUSTER FORGET (http://redis.io/commands/cluster-forget)

  2. redis-trib.rb del-node

我认为 CLUSTER FORGET" 是正确的做法。

但是我真的很想知道关于redis-trib.rb del-node的细节。

有人可以解释一下它们之间的区别吗?

redis-trib.rb 是一个 ruby 实用程序脚本,由 antirez(redis 开发负责人)构建,作为在基本 redis 集群命令之上构建管理工具的参考实现。

在幕后,redis-trib 使用 CLUSTER FORGET 来实现它自己的管理删除节点命令。 https://github.com/antirez/redis/blob/unstable/src/redis-trib.rb#L1374

Redis-trib 使用起来更友好。如果你正在做 CLUSTER FORGET 你需要循环并将该命令发送到系统中的每个其他节点,而 del-node 将为你自动执行该过程。

src/redis-trib.rb del-node 192.168.0.211:6379 650e3746968e6b7c7e357f06adbde5b3b92fcceb

注:

  • 192.168.0.211:6379 这是集群中的任意节点
  • 650e3746968e6b7c7e357f06adbde5b3b92fcceb 这是要删除的节点的集群 ID。您可以从“集群节点”命令中获取此 ID 的值。

从 Redis 6.2.3 开始

警告:redis-trib.rb不再可用! 您应该改用 redis-cli。

属于redis-trib.rb的所有命令和特性都已被移动 到 redis-cli。 为了使用它们,您应该使用 --cluster 调用 redis-cli 选项后跟子命令名称、参数和选项。

使用以下语法: redis-cli --cluster SUBCOMMAND [ARGUMENTS] [OPTIONS]

示例: redis-cli --cluster info 127.0.0.1:6382


~$ redis-cli
127.0.0.1:6379> CLUSTER HELP
127.0.0.1:6379> CLUSTER NODES
127.0.0.1:6379> CLUSTER FORGET <node-id>