Redis集群节点的变更

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/phantom_111/article/details/80328049

Redis集群节点增加

添加的节点以主节点从节点 两种不同的节点类型加入集群。

  • 若为主节点 ,需要创建一个空节点,然后将某些哈希槽移动到这个空节点中
  • 若为从节点 ,需要创建一个空节点,然后将新节点设置为集群中某个master节点的slave节点

注意: 无论是主节点还是从节点,首先第一步都是创建一个空节点,所以创建步骤都是一致的。

添加节点

1.启动新的redis实例

接上一篇文章的描述,首先,新建7117目录;然后,将目录7116的redis服务的配置文件拷贝到7117目录中;最后,将配置文件中的7116全部改为7117并安装一下命令启动服务:

/usr/local/redis4/bin/redis-server /usr/local/redis4/cluster/7117/redis-7116.conf

2.添加节点到集群中

#redis-tirb 的add-node命令解释
#add-node        new_host:new_port existing_host:existing_port
]# redis-trib add-node 127.0.0.1:7117 127.0.0.1:7112
>>> Adding node 127.0.0.1:7117 to cluster 127.0.0.1:7112
>>> Performing Cluster Check (using node 127.0.0.1:7112)
M: 9fd3ed4af7d8ade053112eb30b87ae60710ab823 127.0.0.1:7112
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 3af81b11efae0c0b921218ec4ca1b920f662e985 127.0.0.1:7115
   slots: (0 slots) slave
   replicates 9fd3ed4af7d8ade053112eb30b87ae60710ab823
S: ca15cf3f79f34f6fc40f354d3d8f88e62d9404e5 127.0.0.1:7116
   slots: (0 slots) slave
   replicates bcac95efa02b24ddb07ae186161457f575425bb6
M: f17572645ee8a0e60a62bd9d22a3f8f34e73b6bc 127.0.0.1:7114
   slots:0-5460 (5461 slots) master
   0 additional replica(s)
M: bcac95efa02b24ddb07ae186161457f575425bb6 127.0.0.1:7113
   slots:10923-16383 (5461 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.
>>> Send CLUSTER MEET to node 127.0.0.1:7117 to make it join the cluster.
[OK] New node added correctly.

3.查看新增节点信息

使用/user/local/redis4/bin/reids-cli -c -p 7114 连接到redis 集群,然后用如下命令查看集群信息:
这里写图片描述

4.选择新增节点的类型

  • 作为从节点

    由于在新增主节点的时候将端口号为7117的redis实例作为master节点了,此处重新安装上述步骤新增端口为7118的实例作为slave节点

    • 将新增的节点作为127.0.0.1:7114 的从节点,执行的命令如下:

    /usr/local/redis4/bin/redis-cli -c -p 7118 cluster replicate f17572645ee8a0e60a62bd9d22a3f8f34e73b6bc
    注意: 执行上述命令的正确返回结果为返回OK

    • 检查新增的节点是否已经成为从节点
      这里写图片描述

    至此新增节点作为slave节点的全部过程已结束。

  • 作为主节点

    • 使用redis-trib工具,将集群中的某些哈希槽移动到新增节点中,此刻该新增节点才成为主节点 。要将集群中的哈希槽进行移动需要执行如下命令:
      这里写图片描述

    • 指定将哈希槽移动到那个节点,以及从哪几个节点移动哈希槽
      这里写图片描述

    注意all 表示从所有节点中随机转移,凑够3000个哈希槽

  • 再次确实是否开始哈希槽的移动
    这里写图片描述

  • 查看增加主节点后,集群节点的情况
    这里写图片描述
    至此将新增的节点设置为master节点全部操作已经结束。

删除节点

与添加节点类似,删除节点也需要分为两类处理,包括主节点从节点

删除主节点

此处以上文中新增的master节点(127.0.0.1:7117)为例进行说明,该节点有300个哈希槽。

1.移动该节点的哈希槽到集群中的其他节点

执行命令redis-trib reshard 127.0.0.1:7117,控制台输出如下内容:
这里写图片描述

完成上述步骤的输入后,最后输入done表示输入完毕

2.删除该节点

检查负责该节点负责哈希槽是否全部移除

这里写图片描述

使用如下命令删除该节点
//最后一个参数为需要删除的节点ID
bin]# redis-trib del-node 127.0.0.1:7113 a83732804a1bea9f8e5408e7fe06fe6e3fe698ac 
>>> Removing node a83732804a1bea9f8e5408e7fe06fe6e3fe698ac from cluster 127.0.0.1:7113
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.

删除从节点

删除从节点的操作比较简单,只需要使用redis集群管理工具redis-trib直接删除该节点即可。此处以上文中添加的redis实例(127.0.0.1:7118)为例。

//最后一个参数为需要删除的节点ID
bin]# redis-trib del-node 127.0.0.1:7115 61c19e097b56e91d6a67c9c833172790717bce0d
>>> Removing node 61c19e097b56e91d6a67c9c833172790717bce0d from cluster 127.0.0.1:7115
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.

遇到的问题

在用redis-tirb 工具进行reshard 的时候,报如下错误:

[ERR] Calling MIGRATE ERR Syntax error, try CLIENT (LIST | KILL | GETNAME | SETNAME | PAUSE | REPLY)

ruby gem安装的redis库,版本不能使用最新的4.x版本的,否则redis-trib reshard 127.0.0.1:7117重新分片会报语法错误

解决方法

  • 卸载安装的redis库,gem uninstall redis

  • 安装3.x版本,gem install redis -v 3.3.5 测试3.2.1到3.3.5都可以,4.x以上的分片报错。

猜你喜欢

转载自blog.csdn.net/phantom_111/article/details/80328049