资讯专栏INFORMATION COLUMN

【Redis】redis cluster 添加 删除 重分配 节点

MrZONT / 501人阅读

摘要:从集群中移除指定的节点。移除一个或多个槽对当前节点的指派。取消对槽的导入或者迁移。返回槽目前包含的键值对数量。

一,redis cluster命令行
//集群(cluster)  
CLUSTER INFO 打印集群的信息  
CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。   
  
//节点(node)  
CLUSTER MEET   将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。  
CLUSTER FORGET  从集群中移除 node_id 指定的节点。  
CLUSTER REPLICATE  将当前节点设置为 node_id 指定的节点的从节点。  
CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。   
  
//槽(slot)  
CLUSTER ADDSLOTS  [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。  
CLUSTER DELSLOTS  [slot ...] 移除一个或多个槽对当前节点的指派。  
CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。  
CLUSTER SETSLOT  NODE  将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。  
CLUSTER SETSLOT  MIGRATING  将本节点的槽 slot 迁移到 node_id 指定的节点中。  
CLUSTER SETSLOT  IMPORTING  从 node_id 指定的节点中导入槽 slot 到本节点。  
CLUSTER SETSLOT  STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。   
  
//键 (key)  
CLUSTER KEYSLOT  计算键 key 应该被放置在哪个槽上。  
CLUSTER COUNTKEYSINSLOT  返回槽 slot 目前包含的键值对数量。  
CLUSTER GETKEYSINSLOT   返回 count 个 slot 槽中的键。  
这些命令是集群所独有的。执行上述命令要先登录

[root@manage redis]# redis-cli -c -p 6382 -h 192.168.10.220    //登录  
192.168.10.220:6382> cluster info   //查看集群情况  
cluster_state:ok  
cluster_slots_assigned:16384  
cluster_slots_ok:16384  
cluster_slots_pfail:0  
cluster_slots_fail:0  
cluster_known_nodes:6  
cluster_size:3  
cluster_current_epoch:8  
cluster_my_epoch:4  
cluster_stats_messages_sent:82753  
cluster_stats_messages_received:82754 
二,添加节点 1,新配置二个测试节点
# cd /etc/redis  
  
//新增配置  
# cp redis-6379.conf redis-6378.conf && sed -i "s/6379/6378/g" redis-6378.conf  
# cp redis-6382.conf redis-6385.conf && sed -i "s/6382/6385/g" redis-6385.conf  
  
//启动  
# redis-server /etc/redis/redis-6385.conf > /var/log/redis/redis-6385.log 2>&1 &  
# redis-server /etc/redis/redis-6378.conf > /var/log/redis/redis-6378.log 2>&1 &  
2,添加主节点
# redis-trib.rb add-node 192.168.10.219:6378 192.168.10.219:6379  
注释:
192.168.10.219:6378是新增的节点
192.168.10.219:6379集群任一个旧节点
3,添加从节点
# redis-trib.rb add-node --slave --master-id 03ccad2ba5dd1e062464bc7590400441fafb63f2 192.168.10.220:6385 192.168.10.219:6379  
注释:
--slave,表示添加的是从节点
--master-id 03ccad2ba5dd1e062464bc7590400441fafb63f2,主节点的node id,在这里是前面新添加的6378的node id
192.168.10.220:6385,新节点
192.168.10.219:6379集群任一个旧节点
4,重新分配slot
# redis-trib.rb reshard 192.168.10.219:6378 //下面是主要过程  
  
How many slots do you want to move (from 1 to 16384)? 1000 //设置slot数1000  
What is the receiving node ID? 03ccad2ba5dd1e062464bc7590400441fafb63f2 //新节点node 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:all //表示全部节点重新洗牌  
Do you want to proceed with the proposed reshard plan (yes/no)? yes //确认重新分  
新增加的主节点,是没有slots的,
M: 03ccad2ba5dd1e062464bc7590400441fafb63f2 192.168.10.219:6378
slots:0-332,5461-5794,10923-11255 (0 slots) master
主节点如果没有slots的话,存取数据就都不会被选中。
可以把分配的过程理解成打扑克牌,all表示大家重新洗牌;输入某个主节点的node id,然后在输入done的话,就好比从某个节点,抽牌。
5,查看一下,集群情况
[root@slave2 redis]# redis-trib.rb check 192.168.10.219:6379  
Connecting to node 192.168.10.219:6379: OK  
Connecting to node 192.168.10.220:6385: OK  
Connecting to node 192.168.10.219:6378: OK  
Connecting to node 192.168.10.220:6382: OK  
Connecting to node 192.168.10.220:6383: OK  
Connecting to node 192.168.10.219:6380: OK  
Connecting to node 192.168.10.219:6381: OK  
Connecting to node 192.168.10.220:6384: OK  
>>> Performing Cluster Check (using node 192.168.10.219:6379)  
M: 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052 192.168.10.219:6379  
 slots:5795-10922 (5128 slots) master  
 1 additional replica(s)  
S: 9c240333476469e8e2c8e80b089c48f389827265 192.168.10.220:6385  
 slots: (0 slots) slave  
 replicates 03ccad2ba5dd1e062464bc7590400441fafb63f2  
M: 03ccad2ba5dd1e062464bc7590400441fafb63f2 192.168.10.219:6378  
 slots:0-332,5461-5794,10923-11255 (1000 slots) master  
 1 additional replica(s)  
M: 19b042c17d2918fade18a4ad2efc75aa81fd2422 192.168.10.220:6382  
 slots:333-5460 (5128 slots) master  
 1 additional replica(s)  
M: b2c50113db7bd685e316a16b423c9b8abc3ba0b7 192.168.10.220:6383  
 slots:11256-16383 (5128 slots) master  
 1 additional replica(s)  
S: 6475e4c8b5e0c0ea27547ff7695d05e9af0c5ccb 192.168.10.219:6380  
 slots: (0 slots) slave  
 replicates 19b042c17d2918fade18a4ad2efc75aa81fd2422  
S: 1ee01fe95bcfb688a50825d54248eea1e6133cdc 192.168.10.219:6381  
 slots: (0 slots) slave  
 replicates b2c50113db7bd685e316a16b423c9b8abc3ba0b7  
S: 9a2a1d75b8eb47e05eee1198f81a9edd88db5aa1 192.168.10.220:6384  
 slots: (0 slots) slave  
 replicates 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052  
[OK] All nodes agree about slots configuration.  
>>> Check for open slots...  
>>> Check slots coverage...  
[OK] All 16384 slots covered.  
三,改变从节点的master
//查看一下6378的从节点  
# redis-cli -p 6378 cluster nodes | grep slave | grep 03ccad2ba5dd1e062464bc7590400441fafb63f2  
  
//将6385加入到新的master  
# redis-cli -c -p 6385 -h 192.168.10.220  
192.168.10.220:6385> cluster replicate 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052  //新master的node id  
OK  
192.168.10.220:6385> quit  
  
//查看新master的slave  
# redis-cli -p 6379 cluster nodes | grep slave | grep 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052 
四,删除节点 1,删除从节点
# redis-trib.rb del-node 192.168.10.220:6385 "9c240333476469e8e2c8e80b089c48f389827265"  
2,删除主节点

如果主节点有从节点,将从节点转移到其他主节点
如果主节点有slot,去掉分配的slot,然后在删除主节点

# redis-trib.rb reshard 192.168.10.219:6378 //取消分配的slot,下面是主要过程  
  
How many slots do you want to move (from 1 to 16384)? 1000 //被删除master的所有slot数量  
What is the receiving node ID? 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052 //接收6378节点slot的master  
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:03ccad2ba5dd1e062464bc7590400441fafb63f2 //被删除master的node-id  
Source node #2:done   
  
Do you want to proceed with the proposed reshard plan (yes/no)? yes //取消slot后,reshard 

新增master节点后,也进行了这一步操作,当时是分配,现在去掉。反着的。

 # redis-trib.rb del-node 192.168.10.219:6378 "03ccad2ba5dd1e062464bc7590400441fafb63f2"  

新的master节点被删除了,这样就回到了,就是这篇文章开头,还没有添加节点的状态

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/36574.html

相关文章

  • redis系列:集群

    摘要:节点与节点之间知道对方的哪些信息节点的地址和端口号。最近一次用集群连接发送包的时间。接收到创建集群命令后,检查传入的节点数量是否大于等于个。让节点加入到同一个集群中。那么节点会标记节点为已下线状态。 1 简介 Redis 集群是Redis 的一个分布式实现,它是一个网状结构,每个节点都通过 TCP 连接跟其他每个节点连接。现在来看看Redis集群实现了哪些目标? 在1000个节点的时...

    AlanKeene 评论0 收藏0
  • redis/codis

    摘要:长度小于等于字节的字符数组。强制大于变量目前版本中,的值为当字典的填充率低于时,程序就可以对这个字典进行收缩操作过程大小为的两倍,记录的索引位置。当某元素长度超过时要整体升级编码方式。当键值超过了常量的值,此键值对用多条命令来存储。 redis内存k-v,支持多种数据结构,第一个重点在于如何操作更快和适当的节省内存,第二个重点在于分布式管理。本文redis基于3.0。第一部分将介绍所有...

    frolc 评论0 收藏0
  • redis cluster 扩容

    摘要:重新分片,把要删除的主节点的数据槽移动到其他主节点上,以免数据丢失。分区完成当前主节点已经没有数据槽了。这样就可以实现横向动态扩容,新增加的主从节点,用于存储新的数据则可,对以前的节点的数据不会有任何影响。 需求: A redis cluster 集群 40 台集群扩容到 68 台也就是 增加 28 台新的机器 : 一主一从 为一组,一共12组 前期准备 扫描新增扩容服务器ip是...

    call_me_R 评论0 收藏0
  • redis cluster 扩容

    摘要:重新分片,把要删除的主节点的数据槽移动到其他主节点上,以免数据丢失。分区完成当前主节点已经没有数据槽了。这样就可以实现横向动态扩容,新增加的主从节点,用于存储新的数据则可,对以前的节点的数据不会有任何影响。 需求: A redis cluster 集群 40 台集群扩容到 68 台也就是 增加 28 台新的机器 : 一主一从 为一组,一共12组 前期准备 扫描新增扩容服务器ip是...

    _ang 评论0 收藏0
  • Redis知识点总结

    摘要:采用一致性哈希而不是采用简单类似哈希求模映射的主要原因是当增加或减少节点时,不会产生由于重新匹配造成的。一致性哈希只影响相邻节点分配,影响量小。 Redis基础篇 Redis数据结构 String1、概念:string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。string类型是二进制安全的。意思是redis的string...

    xiaowugui666 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<