redis集群新增节点和删除节点

骑猪看日落 2022-05-13 10:56 338阅读 0赞

redis集群添加节点

1、主节点:如果添加的是主节点,那么我们需要创建一个空节点,然后将某些哈希槽移动到这个空节点里面。

2、从节点:如果添加的是从节点,我们也需要创建一个空节点,然后把这个新节点设置成集群中某个主节点的复制品。

添加节点:

1、首先把需要添加的节点启动

创建7006目录,拷贝7000中的redis.conf到7006中,然后修改端口port为7006,修改好后进入7006目录启动这个节点:

  1. redis-server redis.conf

2、执行以下命令,将这个新节点添加到集群中:

  1. redis-trib.rb add-node 192.168.33.130:7006 192.168.33.130:7000

结果图示:

70

3、执行命令查看刚才新增的节点:

  1. redis-cli -c -p 7000 cluster nodes

70 1

4、增加了新的节点之后,这个新的节点可以成为主节点或者是从节点

  1. ***4.1将这个新增节点变成从节点***

前面我们已经把这个新节点添加到集群中了,现在我们要让新节点成为192.168.33.130:7001的从节点,只需要执行下面的命令就可以了,命令后面的节点ID就是192.168.33.130:7001的节点ID。(注意,这个从节点哈希槽必须为空,如果不为空,则需要转移掉哈希槽使之为空)

  1. redis-cli -c -p 7006 cluster replicate a246963893faf03c45cc19ef4188f82f5393bfef

70 2

使用下面命令来确认一下192.168.33.130:7006是否已经成为192.168.33.130:7001的从节点。

  1. redis-cli -p 7000 cluster nodes | grep slave | grep a246963893faf03c45cc19ef4188f82f5393bfef

70 3

4.2、将这个新增节点变成主节点:

使用redis-trib程序,将集群中的某些哈希槽移动到新节点里面,这个新节点就成为真正的主节点了。执行下面的命令对集群中的哈希槽进行移动:

  1. redis-trib.rb reshard 192.168.33.130:7000

命令执行后,系统会提示我们要移动多少哈希槽,这里移动1000个

70 4

然后还需要指定把这些哈希槽转移到哪个节点上

70 5

输入我们刚才新增的节点的ID

d113e0f033c98e2f6b88fb93e6e98866256d85c4

然后需要我们指定转移哪几个几点的哈希槽

70 6

输入all 表示从所有的主节点中随机转移,凑够1000个哈希槽

然后再输入yes,redis集群就开始分配哈希槽了。

70 7

至此,一个新的主节点就添加完成了,执行命令查看现在的集群中节点的状态

  1. redis-cli -c -p 7000 cluster nodes

结果图示:

70 8

Redis集群删除节点

1、如果删除的节点是主节点,这里我们删除192.168.33.130:7006节点,这个节点有1000个哈希槽

首先要把节点中的哈希槽转移到其他节点中,执行下面的命令:

  1. redis-trib.rb reshard 192.168.33.130:7000

系统会提示我们要移动多少哈希槽,这里移动1000个,因为192.168.33.130:7006节点有1000个哈希槽。

70 9

然后系统提示我们输入要接收这些哈希槽的节点的ID,这里使用192.168.33.130:7001的节点ID

70 10

然后要我们选择从那些节点中转出哈希槽,这里一定要输入192.168.33.130:7006这个节点的ID

70 11

最后输入done表示输入完毕。

最后一步,使用下面的命令把这个节点删除

70 12

如果是从节点,直接删除即可。

  1. redis-trib.rb del-node 192.168.33.130:7000 d113e0f033c98e2f6b88fb93e6e98866256d85c4 //最后一个参数为需要删除节点的ID

70 13

java操作redis集群

向Redis集群中存入键值:

70 14

代码示例:

  1. import java.util.HashSet;
  2. //需要再pom.xml中引入jedis依赖
  3. import redis.clients.jedis.HostAndPort;
  4. import redis.clients.jedis.JedisCluster;
  5. import redis.clients.jedis.JedisPool;
  6. import redis.clients.jedis.JedisPoolConfig;
  7. public class RedisCluster {
  8. public static void main(String[] args) {
  9. //初始化集合,用于装下面的多个主机和端口
  10. HashSet<HostAndPort> nodes = new HashSet<HostAndPort>();
  11. //创建多个主机和端口实例
  12. HostAndPort hostAndPort = new HostAndPort("192.168.33.130", 7000);
  13. HostAndPort hostAndPort1 = new HostAndPort("192.168.33.130", 7001);
  14. HostAndPort hostAndPort2 = new HostAndPort("192.168.33.130", 7002);
  15. HostAndPort hostAndPort3 = new HostAndPort("192.168.33.130", 7003);
  16. HostAndPort hostAndPort4 = new HostAndPort("192.168.33.130", 7004);
  17. HostAndPort hostAndPort5 = new HostAndPort("192.168.33.130", 7005);
  18. //添加多个主机和端口到集合中
  19. nodes.add(hostAndPort);
  20. nodes.add(hostAndPort1);
  21. nodes.add(hostAndPort2);
  22. nodes.add(hostAndPort3);
  23. nodes.add(hostAndPort4);
  24. nodes.add(hostAndPort5);
  25. //创建config
  26. JedisPoolConfig poolConfig = new JedisPoolConfig();
  27. //通过config创建集群实例
  28. JedisCluster jedisCluster = new JedisCluster(nodes,poolConfig);
  29. //获取集群中的key为name键的值
  30. String str = jedisCluster.get("name");
  31. System.out.println(str);
  32. }
  33. }

打印结果:

Alice

发表评论

表情:
评论列表 (有 0 条评论,338人围观)

还没有评论,来说两句吧...

相关阅读