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. centos8平台redis cluster集群添加/删除node节点(redis5.0.7)

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

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

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

  4. openstack中彻底删除计算节点的操作记录

    在使用openstack的过程中,我们经常会添加好几台计算节点来部署虚拟机,在后续使用中由于某些原因,一些计算节点出现了问题,需要将这些出了问题的计算节点从openstack的控制节点中踢出去!但是很 ...

  5. redis集群添加删除节点

    Redis3.0集群添加节点 1:首先把需要添加的节点启动 cd /usr/local/cluster/ mkdir 7006 cp /usr/local/cluster/redis.conf  /u ...

  6. js添加、修改、删除xml节点例子

    version="1.0" encoding="gb2312"?> . <bookstore> . <book genre=" ...

  7. C#中 添加 删除 查找Xml中子节点

    //添加xml节点    private void AddXml(string image, string title)     {        XmlDocument xmlDoc = new X ...

  8. 获取redis cluster中所有节点的内存使用情况

    需求:获取redis cluster集群中所有节点的内存使用情况. ip_port=`redis-cli -h $ -p $ -a abc123 -c cluster nodes | awk '{pr ...

  9. Redis Cluster 强制kill某一个节点和shutdown某一个节点后修复过程

    redis cluster 命令行,执行以下命令需登录cluster,是集群所独有的集群(cluster)CLUSTER INFO 打印集群的信息CLUSTER NODES 列出集群当前已知的所有节点 ...

随机推荐

  1. Apple的通知

    Apple的通知 1. 本地通知 //取消原来的通知,可设可不设 [[UIApplication sharedApplication]cancelAllLocalNotifications]; //初 ...

  2. jQuery Easing 动画效果扩展

    jQuery API提供了简单的动画效果如淡入淡出以及自定义动画效果,而今天我给大家分享的是一款jQuery动画效果扩展增强插件jquery.easing.js,使用该插件可以实现直线匀速运功.变加速 ...

  3. ${pageContext.request.contextPath}的作用

    刚开始不知道是怎么回事,在网上也查找了一些资料,看了还是晕. 看了另一个大侠的,终于有了点眉目. 那位大侠在博客中这样写道“然后在网上找,更让我郁闷的事,TMD!网上“抄袭”的真多啊!而且扯了一大堆! ...

  4. CF 332A Down the Hatch! 超级水题。。不过题目太长了

    A. Down the Hatch! time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  5. sql tran, c# SqlTransaction , TransactionScope 的用法

    本节主要介绍Sql语句,SqlTransaction和TransactionScope这三种使用事务的方法.       本节的所有例子都在sql server 2008和vs 2008环境下运行通过 ...

  6. 对象转Json序列化

    C#--对象转Json序列化 前言 最近在研究Android项目,其中涉及到Android中解析Json数据的问题,需要模拟网络中传递Json数据的模式,因为以前是.net的工程师,所以想着从.net ...

  7. android 源码编译 问题 列表

    转自:http://www.cnblogs.com/xilinch/archive/2013/04/02/2996359.html make: *** [out/host/linux-x86/obj/ ...

  8. 一起来玩echarts系列(二)------echarts图表自适应问题

    为了直观查看公司服务器各个进程占用的内存动态情况,我使用echarts进行数据可视化,具体的实现过程按下不表. 最后实现的效果如图: 然后问题就来了,因UI采用了Bootstrap响应式框架,所以除了 ...

  9. NodeJS stream 一:Buffer

    当年是看了朴灵的九浅一深 NodeJS 入门的 Node, 朴大大的书讲实践很少更多的篇幅用在了讲原理上,道理听了那么多,后来开始在前端工程领域使用 NodeJS 却处处掣肘,总结原因发现 NodeJ ...

  10. 读书笔记:《HTML5开发手册》Web表单

    这是补充HTML5基础知识的第五篇内容,其他为: 一.HTML5-- 新的结构元素 二.HTML5-- figure.time.details.mark 三.HTML5-- details活学活用 四 ...