redis cluster配置好,并运行一段时间后,我们想添加节点,或者删除节点,该怎么办呢。

 一,redis cluster命令

 //集群(cluster)

  CLUSTER INFO 打印集群的信息

  CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。

  //节点(node)

  CLUSTER MEET <ip> <port> 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。

  CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点。

  CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点。

  CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。

  //槽(slot)

  CLUSTER ADDSLOTS <slot> [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。

  CLUSTER DELSLOTS <slot> [slot ...] 移除一个或多个槽对当前节点的指派。

  CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。

  CLUSTER SETSLOT <slot> NODE <node_id> 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。

  CLUSTER SETSLOT <slot> MIGRATING <node_id> 将本节点的槽 slot 迁移到 node_id 指定的节点中。

  CLUSTER SETSLOT <slot> IMPORTING <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。

  CLUSTER SETSLOT <slot> STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。

  //键 (key)

  CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。

  CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。

  CLUSTER GETKEYSINSLOT <slot> <count> 返回 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节点被删除了,这样就回到了,就是这篇文章开头,还没有添加节点的状态

redis cluster 添加 删除 重分配 节点的更多相关文章

  1. redis cluster中添加删除重分配节点例子

    redis cluster配置好,并运行一段时间后,我们想添加节点,或者删除节点,该怎么办呢. 一,redis cluster命令行     //集群(cluster)  CLUSTER INFO 打 ...

  2. redis cluster 添加/删除节点操作

    RedisCluster 添加/删除节点 添加节点新配置两个测试节点8008和9009 [root@--- ~]# /usr/local/redis-/bin/redis-server /u02/re ...

  3. Redis Cluster 添加/删除 完整折腾步骤

    Redis还是挺好玩的,今天测试了集群的添加.删除节点.重分配slot等.更深入的理解redis的游戏规则.步骤繁多,但是详细. 环境解释: 我是在一台Centos 6.9上测试的,各个redis节点 ...

  4. 向redis中添加删除list列表

    转: 向redis中添加删除list列表 2018年04月18日 15:44:54 luo_yu_1106 阅读数:4082   一.添加 向redis中添加队列有两种方式 1.lpush l是lef ...

  5. 输出redis cluster集群所有节点指定的参数的配置

    需要:实现类似redis-trib.rb call 命令的功能,输出redis cluster集群所有节点指定的参数的配置 redis-trib.rb的输出 [redis@lxd-vm3 ~]$ re ...

  6. centos8平台redis cluster集群添加/删除node节点(redis5.0.7)

    一,当前redis cluster的node情况: 我们的添加删除等操作都是以这个cluster作为demo cluster采用六台redis,3主3从 redis1 : ip: 172.17.0.2 ...

  7. Hadoop 添加删除数据节点(datanode)

    前提条件: 添加机器安装jdk等,最好把环境都搞成一样,示例可做相应改动 实现目的: 在hadoop集群中添加一个新增数据节点. 1. 创建目录和用户  mkdir -p /app/hadoop gr ...

  8. kubernetes添加删除重启节点

    1.添加节点 (master)查看目前节点 [root@k8s-master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-maste ...

  9. Redis Cluster 集群节点维护 (三)

    Redis Cluster 集群节点维护: 集群运行很久之后,难免由于硬件故障,网络规划,业务增长,等原因对已有集群进行相应的调整,比如增加redis nodes 节点,减少节点,节点迁移,更换服务器 ...

随机推荐

  1. MySQL相关知识总结

    1. 显示所有表 show tables; 还有information_schema数据库里面有tables表,记录了所有表信息 use information_schema; select * fr ...

  2. windows 安装配置jdk7

    1.安装jdk这里不在介绍 2.配置新建用户变量:JAVA_HOME 值为(就是你自己jdk的安装路径):C:\Program Files\Java\jdk1.7.0_75\ 3.配置系统变量:Pat ...

  3. 替换SQL执行计划

    Switching two different SQL Plan with SQL Profile in Oracle... 当SQL是业务系统动态生成的,或者是第三方系统产生的,在数据库层面分析发现 ...

  4. Phantomjs 生成多页PDF

    开篇 最近使用 Phantomjs 生成PDF,其中遇到一些问题,导致PDF生成失败,如出现空白文件或一页数据量太大,都是由于没有设置好格式导致.特别是分页问题,感觉资料很少,除了在 StackOve ...

  5. 2018.10.15 NOIP训练 水流成河(换根dp)

    传送门 换根dp入门题. 貌似李煜东的书上讲过? 不记得了. 先推出以1为根时的答案. 然后考虑向儿子转移. 我们记f[p]f[p]f[p]表示原树中以ppp为根的子树的答案. g[p]g[p]g[p ...

  6. 2018.08.16 POJ1183反正切函数的应用(简单数学)

    传送门 代数变形一波. 显然有b,c>a. 那么这样的话可以令b=a+m,c=a+n. 又有a=(bc-1)/(b+c). 带入展开可知m*n=a*a+1. 要让m+n最小只需让m最大,这个结论 ...

  7. 山东省第七届ACM竞赛 J题 Execution of Paladin (题意啊)

    题意:鱼人是炉石里的一支强大种族,在探险者协会里,圣骑士有了一张新牌,叫亡者归来,效果是召唤本轮游戏中7个已死鱼人.如果死掉的不足7个,那么召唤的数量就会不足7. 鱼人有很多,下面的4个是: 寒光智者 ...

  8. button设置边宽和圆角

       UIButton *meifuButton = [UIButton buttonWithType:UIButtonTypeSystem];         [meifuButton setTit ...

  9. (二分匹配“匈牙利算法”)无题II --HDU --2236

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=2236 代码: #include<cstdio> #include<cstring> ...

  10. Andfix热修复原理

    一.前言 最近腾讯弄出一个Tinker热修复框架,那么本文先不介绍这个框架,先来介绍一下阿里的一个热修复框架AndFix,这个框架出来已经很长时间了,但是看网上没有太多非常详细的讲解,这里就来做一次分 ...