Redis增加删除(伸缩)节点操作步骤.

说明:

  1. 由于是练习,所以设置的是同一台服务器多个redis实例来操作的redis集群。所以下面的步骤是基于这个来做的。如果是不同的服务器步骤稍微有一点的区别。
  2. Redis版本是6.2.6版本
  3. 如果有密码,必须保证所有实例的密码一致。
  4. 事先准备好了3主3从6个redis实例。

文章目录

  • 一、 增加节点
    • 1、增加节点是主节点
    • 2、增加slave节点
  • 二、删除节点
    • 1、删除主节点7004
    • 2、删除slave节点

一、 增加节点

主要分两种情况

  1. 增加节点是主节点
  2. 增加节点是从节点

1、增加节点是主节点

需求:增加7004主节点,如果需求需要包含某个值或者某些值一并移动到新节点去,那么就需要找到移动的值的最大散列插槽的值。步骤如下:

  1. 首先创建(复制)一个redis.conf文件。(我的是放在一个文件夹下面的,所以就直接复制文件夹了)
 cp ./redis7001 -r  ./redis7004

参数说明:

  • cp:复制命令。
  • -r:递归复制整个文件夹。忽略redis7004这个这个目录是否存在,没有就创建一个新的文件夹(目录)。
  1. 修改复制的文件端口号,日志文件地址名字,还有RDB文件名(万一后期自动选举成主节点了呢)等必要的信息。
#全局搜索文件./redis7004/conf/redis.conf的所有7001改成7004。
sed -i s/7001/7004/g ./redis7004/conf/redis.conf
  1. 启动服务。
redis-server /www/server/redis/redis7004/conf/redis.conf
  1. 将7004节点添加到我们的集群节点中。
 #1.命令:old_ip只要是集群中的任意一个ip即可redis-cli -a [password] --cluster add-node [new_ip] [old_ip]#2.例子redis-cli -a 123456 --cluster add-node 127.0.0.1:7004 127.0.0.1:7001
  1. 查看是否添加到集群中成功。
#1.命令
redis-cli -a [password] -p [ip] cluster nodes
#查看集群的命令
redis-cli --cluster help
#2.例子
redis-cli -a 123456 -p 7004 cluster nodes
  1. 分配散列槽
#1.命令
redis-cli -a [password] --cluster reshard [new_ip]
#2.例子
redis-cli -a 123456 --cluster reshard 127.0.0.1:7004
[root@T98899999 redis]# redis-cli -a 123456 --cluster reshard 127.0.0.1:7004
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing Cluster Check (using node 127.0.0.1:7004)
M: 11c3459ccdb510973ed5e61a755aaecc923405f7 127.0.0.1:7004slots: (0 slots) master
S: c836695daad38bcea59eb71dece7f860eab5f15e 127.0.0.1:8003slots: (0 slots) slavereplicates 8140ca0e986ec863881b6dede6f7555d04fe5c06
S: 633546d3d75199e202d66ac56bca7e4c387bb453 127.0.0.1:8002slots: (0 slots) slavereplicates 145b99ca42e4ddf2ad7fc43bdbc410ed0729e818
M: 145b99ca42e4ddf2ad7fc43bdbc410ed0729e818 127.0.0.1:7001slots:[0-5460] (5461 slots) master1 additional replica(s)
M: 8140ca0e986ec863881b6dede6f7555d04fe5c06 127.0.0.1:7002slots:[5461-10922] (5462 slots) master1 additional replica(s)
S: e236e0ec685118abc67da92ad67c2db4b3f1abc6 127.0.0.1:8001slots: (0 slots) slavereplicates 4efa79ebad2f410049ab59edf695d6be63ed0a25
M: 4efa79ebad2f410049ab59edf695d6be63ed0a25 127.0.0.1:7003slots:[10923-16383] (5461 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 100
What is the receiving node ID? 11c3459ccdb510973ed5e61a755aaecc923405f7
Please enter all the source node IDs.Type 'all' to use all the nodes as source nodes for the hash slots.Type 'done' once you entered all the source nodes IDs.
Source node #1: 145b99ca42e4ddf2ad7fc43bdbc410ed0729e818
Source node #2: done
Ready to move 100 slots.Source nodes:M: 145b99ca42e4ddf2ad7fc43bdbc410ed0729e818 127.0.0.1:7001slots:[0-5460] (5461 slots) master1 additional replica(s)Destination node:M: 11c3459ccdb510973ed5e61a755aaecc923405f7 127.0.0.1:7004slots: (0 slots) masterResharding plan:Moving slot 0 from 145b99ca42e4ddf2ad7fc43bdbc410ed0729e818Moving slot 1 from 145b99ca42e4ddf2ad7fc43bdbc410ed0729e818Moving slot 2 from 145b99ca42e4ddf2ad7fc43bdbc410ed0729e818.....
Do you want to proceed with the proposed reshard plan (yes/no)? yes

说明下执行命令redis-cli -a 123456 --cluster reshard 127.0.0.1:7004时出现的询问:

  • How many slots do you want to move (from 1 to 16384)?:表示需要移动槽的数量。填写自己的需要即可。
  • What is the receiving node ID?:表示:那个id来接收它。即新的7004的id。
  • Source node #1:从那个节点id上移动散列插槽。填写移动的7001的id。当然如果需要平均节点插槽,那么每个主节点的id都写上或者写all,然后需要移动的节点数量处理主节点数。
  • Source node #2:最后时填写done结束。
  • Do you want to proceed with the proposed reshard plan (yes/no)?:确定要移动这些槽的计划吗?输入yes或者no。

补充说明:
如果需要包含某个值移动到新的节点(7004)上,那么就需要查询到移动的值的散列插槽值是多少。

redis-cli -a 123456-c -p 7004
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:7004> get numRedirected to slot [2765] located at 127.0.0.1:7001"10"

可以看到num的slot槽是2765。

  1. 查看是否添加成功。
redis-cli -a 123456 -p 7004 cluster nodes
#结果,可以发现7004上有0-99共100个散列插槽redis-cli -a 123456 -p 7004 cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
c836695daad38bcea59eb71dece7f860eab5f15e 127.0.0.1:8003@18003 slave 8140ca0e986ec863881b6dede6f7555d04fe5c06 0 1656342598000 2 connected
11c3459ccdb510973ed5e61a755aaecc923405f7 127.0.0.1:7004@17004 myself,master - 0 1656342595000 9 connected 0-99
633546d3d75199e202d66ac56bca7e4c387bb453 127.0.0.1:8002@18002 slave 145b99ca42e4ddf2ad7fc43bdbc410ed0729e818 0 1656342597000 8 connected
145b99ca42e4ddf2ad7fc43bdbc410ed0729e818 127.0.0.1:7001@17001 master - 0 1656342596000 8 connected 100-5460
8140ca0e986ec863881b6dede6f7555d04fe5c06 127.0.0.1:7002@17002 master - 0 1656342598804 2 connected 5461-10922
e236e0ec685118abc67da92ad67c2db4b3f1abc6 127.0.0.1:8001@18001 slave 4efa79ebad2f410049ab59edf695d6be63ed0a25 0 1656342597801 3 connected
4efa79ebad2f410049ab59edf695d6be63ed0a25 127.0.0.1:7003@17003 master - 0 1656342595777 3 connected 10923-16383

2、增加slave节点

需求想要在master7001上增加7004子节点,步骤如下(前面的主节点前3个步骤与情况1一样的):

  1. 首先创建(复制)一个redis.conf文件。(我的是放在一个文件夹下面的,所以就直接复制文件夹了)
 cp ./redis7001 -r  ./redis7004

参数说明:

  • cp:复制命令。
  • -r:递归复制整个文件夹。忽略redis7004这个这个目录是否存在,没有就创建一个新的文件夹(目录)。
  1. 修改复制的文件端口号,日志文件地址名字,还有RDB文件名(万一后期自动选举成主节点了呢)等必要的信息。
#全局搜索文件./redis7004/conf/redis.conf的所有7001改成7004。
sed -i s/7001/7004/g ./redis7004/conf/redis.conf
  1. 启动服务。
redis-server /www/server/redis/redis7004/conf/redis.conf
  1. 添加到集群中设置为从节点
#1,命令
redis-cli -a [password] --cluster add-node [old_host:old_port] -a [password] --cluster-slave [old_id]
#2.最快捷的方式(当然你首先要查看主节点的id)
redis-cli -a 123456 --cluster add-node 127.0.0.1:7004 127.0.0.1:7001 -a 123456 --cluster-slave 145b99ca42e4ddf2ad7fc43bdbc410ed0729e818

参数说明:

  • -a 123456 : 如果redis有密码则需要加这个命令
  • 127.0.0.1:7004:新节点host+port
  • 127.0.0.1:7001:已经存在集群的任意host+端口
  • --cluster-slave:表示新的节点是一个从节点,如果后面没有跟ID则随机分配到一个master下。
  • 145b99ca42e4ddf2ad7fc43bdbc410ed0729e818:指定master的ID
  1. 查看是否添加成功
[root@T98899999 ~]# redis-cli -a 123456 -p  7001 cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
4efa79ebad2f410049ab59edf695d6be63ed0a25 127.0.0.1:7003@17003 master - 0 1654181965000 3 connected 10923-16383
11c3459ccdb510973ed5e61a755aaecc923405f7 `127.0.0.1:7004@17004 slave` `145b99ca42e4ddf2ad7fc43bdbc410ed0729e818` 0 1654181966807 8 connected
8140ca0e986ec863881b6dede6f7555d04fe5c06 127.0.0.1:7002@17002 master - 0 1654181968816 2 connected 5461-10922
e236e0ec685118abc67da92ad67c2db4b3f1abc6 127.0.0.1:8001@18001 slave 4efa79ebad2f410049ab59edf695d6be63ed0a25 0 1654181965801 3 connected
c836695daad38bcea59eb71dece7f860eab5f15e 127.0.0.1:8003@18003 slave 8140ca0e986ec863881b6dede6f7555d04fe5c06 0 1654181967000 2 connected
`145b99ca42e4ddf2ad7fc43bdbc410ed0729e818` 127.0.0.1:7001@17001 myself,master - 0 1654181964000 8 connected 0-5460
633546d3d75199e202d66ac56bca7e4c387bb453 127.0.0.1:8002@18002 slave 145b99ca42e4ddf2ad7fc43bdbc410ed0729e818 0 1654181967812 8 connected

二、删除节点

主要分两种情况

  1. 删除节点是主节点
  2. 删除节点是从节

1、删除主节点7004

因为主节点是分配了slot槽的,所以需要把删除节点的solt槽移动到其他master节点中去,否则数据会丢失。

需求想要删除7004节点,步骤如下:

  • 数据迁移到其他主节点中 (逻辑和添加节点分配散列槽一样)
#1.查看集群节点信息 -a password 如果没有密码就不需要这个命令
redis-cli -a 123456 -p 7004 cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
e236e0ec685118abc67da92ad67c2db4b3f1abc6 127.0.0.1:8001@18001 slave 4efa79ebad2f410049ab59edf695d6be63ed0a25 0 1654091452576 3 connected
c836695daad38bcea59eb71dece7f860eab5f15e 127.0.0.1:8003@18003 slave 8140ca0e986ec863881b6dede6f7555d04fe5c06 0 1654091452000 2 connected
4efa79ebad2f410049ab59edf695d6be63ed0a25 127.0.0.1:7003@17003 master - 0 1654091453593 3 connected 10923-16383
633546d3d75199e202d66ac56bca7e4c387bb453 127.0.0.1:8002@18002 slave 145b99ca42e4ddf2ad7fc43bdbc410ed0729e818 0 1654091452000 1 connected
11c3459ccdb510973ed5e61a755aaecc923405f7 127.0.0.1:7004@17004 myself,master - 0 1654091451000 7 connected 0-2999
8140ca0e986ec863881b6dede6f7555d04fe5c06 127.0.0.1:7002@17002 master - 0 1654091453000 2 connected 5461-10922
145b99ca42e4ddf2ad7fc43bdbc410ed0729e818 127.0.0.1:7001@17001 master - 0 1654091454597 1 connected 3000-5460
#2.移动slot槽:需要注意的是id顺序不要搞错了
#2.1 执行命令:redis-cli -a 123456 --cluster reshard 127.0.0.1:7004
#2.2 会出现如下的内容:能看到你要移除节点的slots槽
redis-cli -a 123456 --cluster reshard 127.0.0.1:7004
Warning: Using a 123456 with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing Cluster Check (using node 127.0.0.1:7004)
M: 11c3459ccdb510973ed5e61a755aaecc923405f7 127.0.0.1:7004slots:[0-2999] (3000 slots) master1 additional replica(s)
S: e236e0ec685118abc67da92ad67c2db4b3f1abc6 127.0.0.1:8001slots: (0 slots) slavereplicates 4efa79ebad2f410049ab59edf695d6be63ed0a25
S: c836695daad38bcea59eb71dece7f860eab5f15e 127.0.0.1:8003slots: (0 slots) slavereplicates 8140ca0e986ec863881b6dede6f7555d04fe5c06
M: 4efa79ebad2f410049ab59edf695d6be63ed0a25 127.0.0.1:7003slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: 633546d3d75199e202d66ac56bca7e4c387bb453 127.0.0.1:8002slots: (0 slots) slavereplicates 11c3459ccdb510973ed5e61a755aaecc923405f7
M: 8140ca0e986ec863881b6dede6f7555d04fe5c06 127.0.0.1:7002slots:[5461-10922] (5462 slots) master1 additional replica(s)
M: 145b99ca42e4ddf2ad7fc43bdbc410ed0729e818 127.0.0.1:7001slots:[3000-5460] (2641 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
#2.3表示移动slots的数量
How many slots do you want to move (from 1 to 16384)?3000
#2.4 表示移动到那个节点ID(或者说那个节点ID来接受这个移动的slots)
What is the receiving node ID? 145b99ca42e4ddf2ad7fc43bdbc410ed0729e818
#2.5 表示那个节点ID需要移动
Please enter all the source node IDs.Type 'all' to use all the nodes as source nodes for the hash slots.Type 'done' once you entered all the source nodes IDs.
Source node #1: 11c3459ccdb510973ed5e61a755aaecc923405f7
#2.6输入done
Source node #1:done
#2.7最后确认是否是想要的结果
Do you want to proceed with the proposed reshard plan (yes/no)? yes
#2.8 开始执行移动功能。等着移动完成后就可以删除节点了。
Moving slot 1546 from 127.0.0.1:7004 to 127.0.0.1:7001:
Moving slot 1547 from 127.0.0.1:7004 to 127.0.0.1:7001:
Moving slot 1548 from 127.0.0.1:7004 to 127.0.0.1:7001:
Moving slot 1549 from 127.0.0.1:7004 to 127.0.0.1:7001:
省略.....
#3.可以再次执行1命令检查一下

用到的命令:

  • redis-cli -a password -p 7004 cluster nodes
  • redis-cli -a password --cluster reshard host:prot
  1. 执行删除命令:
#1.命令
redis-cli -a password --cluster del-node ip:prot 删除点ID
#2.例子
[root@T98899999 ~]# redis-cli -a 123456 --cluster del-node 127.0.0.1:7004 11c3459ccdb510973ed5e61a755aaecc923405f7
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Removing node 11c3459ccdb510973ed5e61a755aaecc923405f7 from cluster 127.0.0.1:7004
>>> Sending CLUSTER FORGET messages to the cluster...
>>> Sending CLUSTER RESET SOFT to the deleted node.
  1. 查看是否删除成功(发现已经没有这个节点了)
[root@T98899999 ~]# redis-cli -a 123456 -p 7001 cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.4efa79ebad2f410049ab59edf695d6be63ed0a25 127.0.0.1:7003@17003 master - 0 1654095165860 3 connected 10923-163838140ca0e986ec863881b6dede6f7555d04fe5c06 127.0.0.1:7002@17002 master - 0 1654095164857 2 connected 5461-10922e236e0ec685118abc67da92ad67c2db4b3f1abc6 127.0.0.1:8001@18001 slave 4efa79ebad2f410049ab59edf695d6be63ed0a25 0 1654095163854 3 connectedc836695daad38bcea59eb71dece7f860eab5f15e 127.0.0.1:8003@18003 slave 8140ca0e986ec863881b6dede6f7555d04fe5c06 0 1654095164000 2 connected145b99ca42e4ddf2ad7fc43bdbc410ed0729e818 127.0.0.1:7001@17001 myself,master - 0 1654095164000 8 connected 0-5460633546d3d75199e202d66ac56bca7e4c387bb453 127.0.0.1:8002@18002 slave 145b99ca42e4ddf2ad7fc43bdbc410ed0729e818 0 1654095164000 8 connected
  1. 关闭服务:先查看ps进程,然后kill掉进程
[root@T98899999 ~]# ps -ef|grep  redis-server
root     1751233       1  0 5月26 ?       00:06:51 redis-server *:6379
root     2244353       1  0 5月27 ?       00:05:55 redis-server 0.0.0.0:7001 [cluster]
root     2244355       1  0 5月27 ?       00:06:00 redis-server 0.0.0.0:7002 [cluster]
root     2244357       1  0 5月27 ?       00:05:56 redis-server 0.0.0.0:7003 [cluster]
root     2244359       1  0 5月27 ?       00:05:53 redis-server 0.0.0.0:8001 [cluster]
root     2244361       1  0 5月27 ?       00:05:53 redis-server 0.0.0.0:8002 [cluster]
root     2244367       1  0 5月27 ?       00:05:56 redis-server 0.0.0.0:8003 [cluster]
root     2749064       1  0 5月30 ?       00:02:17 redis-server 0.0.0.0:7004 [cluster]
root     3875558 3762488  0 22:54 pts/4    00:00:00 grep --color=auto redis-server
[root@T98899999 ~]# kill -9 2749064

2、删除slave节点

删除从节点就比较简单了。步骤如下:

  1. 执行删除命令
#1.命令
redis-cli -a password --cluster del-node ip:prot 删除点ID
#2.例子
redis-cli -a 123456 --cluster del-node 127.0.0.1:7004 11c3459ccdb510973ed5e61a755aaecc923405f7
  1. 关闭服务:先查看ps -ef|grep redis-server,然后执行kill命令。

Redis集群cluster:增加删除(伸缩)节点操作步骤相关推荐

  1. Elasticsearch 集群中增加专用master节点

    Elasticsearch 集群中增加专用master节点 文章目录 Elasticsearch 集群中增加专用master节点 1.增加master节点 2.排除原来的节点的选举权 3.data节点 ...

  2. 分布式Redis集群--Cluster架构

    Cluster架构 Redis哨兵与Cluster集群模式对比 1. 哨兵模式 Redis3.0之前一般是通过哨兵工具来监测master节点的状态,若master节点宕机,则哨兵集群会进行主从切换,从 ...

  3. Redis集群Cluster部署

    这篇Redis 集群部署笔记参考的书籍资料是: <Redis入门指南>第二版,作者:李子骅 第8章 <Redis开发与运维> 作者:付磊 第10章 以下是学习笔记,记录了Red ...

  4. Redis集群cluster环境(快速搭建过程10分钟)

    安装环境CentOS Linux release 7.5.1804 (Core) 如果服务器没有连接网络,请按步骤自行百度其离线方式 话不多说,开整!!! 一.安装redis #下载至/home/in ...

  5. kubernetes增加删除master节点操作

    一.Kubernetes中删除节点 #获取节点 kubectl get nodes#驱逐节点 kubectl drain <node name> #删除节点之前撤销驱逐操作 kubectl ...

  6. Redis集群战法整理

    单机及集群搭建 http://www.codeceo.com/article/distributed-caching-redis-server.html 主从复制设置 Redis服务器复制(主-从配置 ...

  7. Redis~集群(分布理论、一致性哈希分区、虚拟槽分区、节点握手、集群通信、集群伸缩、请求路由、故障转移、集群维护)

    文章目录 分布理论 集群的分布式存储 简单哈希 一致性哈希分区 虚拟槽分区 Redis集群功能限制 节点握手 分配槽 集群通信 Gossip消息 集群伸缩 集群扩容 集群收缩 请求路由 MOVED重定 ...

  8. Redis集群:redis cluster方案

    redis集群原理之官方的Redis Cluster方案 redis是单线程,但是一般的作为缓存使用的话,redis足够了,因为它的读写速度太快了. 官方的一个简单测试: 测试完成了50个并发执行10 ...

  9. 【Redis】集群(cluster)

    文章目录 Redis集群(cluster) 定义 官网 作用 集群算法(分片->槽位) 分片(每台Redis实例) 槽位 slot槽位映射 哈希取余分区 一致性哈希算法分区 哈希槽分区 搭建三主 ...

  10. Redis设计与实现 笔记 第十七章 集群 cluster

    集群 Redis 集群是 Redis 提供的分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移功能 17.1 节点 一个 Redis 集群通常由多个节点组成,在刚开始的时候,每个节点都 ...

最新文章

  1. 【其他】GIT常用原生命令
  2. 蓝桥杯审核要多久_商标审核要多久?
  3. beyond compare比较工具设置
  4. iOS UIView的一些方法和属性(本博客侧重于视图布局部分的学习)
  5. Redis set 类型操作及常用命令
  6. 怎样打开mysql进程数_mysql查看最大打开进程数
  7. 2019年网络规划设计师下午真题及答案解析
  8. 开工大吉:Oracle 18c已经发布及新特性介绍
  9. discuz x2.5 mysql_Discuz2.5的MYSQL数据库的备份与恢复
  10. 2021 前端面试经常被问到 Javascript+HTML5+CSS+ 框架问题(89 篇资料总结)
  11. easyMule自动关机工具(可用于1.X和2.0版本)
  12. C++ 类(继承中的构造和析构)
  13. fragment内嵌webView,输入框获得焦点禁用系统输入法,弹出自定义输入法的处理
  14. 【西电—英美国家概况(英美概况/英美文化)2023第一学期】第十章参考课后答案
  15. dede修改描述description限制字数长度
  16. prometheus数据结构和压缩原理讲解
  17. 市场“不确定性”中的投资逻辑 2020-03-18
  18. k8s node节点停机维护,pod如何迁移?
  19. 设计技术实现方案时,需要考虑的一些问题
  20. 我的关联规则读数目录

热门文章

  1. Xbox360自制系统GOD包安装教程
  2. linux中tac的用法,如何在Linux中使用“cat”和“tac”命令与示例
  3. 苹果ipad基本使用方法,苹果ipad的使用方法
  4. 服务器审计资质证书,利用ACS服务器实现用户的认证、授权和审计
  5. 软件中GA、Release、RC、Beta、Alpha 各版本号的意义
  6. CoMP 协同多点传输技术
  7. java comp_Java EE异常:名称java:comp未在此上下文中绑定
  8. Python告诉你NBA球星都喜欢在哪个位置出手?
  9. 计算机网络——Cisco Packet Tracer 实验
  10. 王老吉为何败给加多宝?