# Redis集群管理（一）

> 来源：梦飞idc云平台 | 原文：https://www.mfisp.com/13632.html | 发布：2022-12-02 | 更新：2022-12-02 | 分类：建站教程、投稿分享

## 1、集群管理常用命令

 

// 集群(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 将当前节点的配置信息手动保存到硬盘（nodes-port.conf）   
CLUSTER SLAVES <master_node_id> 查询指定的master_node_id主节点有哪些从（slave）节点

 

// 槽(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）  
CLUSTER SLOTS 查看槽（slot）在集群中的分配情况

 

// 键 (key)   
CLUSTER KEYSLOT <key> 计算键key应该被分配在哪个槽上   
CLUSTER COUNTKEYSINSLOT <slot> 返回指定槽（slot）保存key的数量   
CLUSTER GETKEYSINSLOT <slot> <count> 获取指定槽（slot）中count个key，如果指定槽中大于count个key，则只返回前cout个key，小于或为空，则返回最多数量的key

 

以上命令是**集群特有**的，必须登录到redis集群才能使用。注释中提到的**当前节点**，指登录到集群中指定的节点。如：`redis-cli -h 192.168.0.201 -p 6379`，当前登录的节点就是192.168.0.201:6379。   
更多集群管理命令请参考官网

 

shell> redis-cli -c -h 192.168.0.201 -p 6379  
127.0.0.1:6379> cluster nodes  
459dbcccc1e5be021f19efde794b9e84474c0c02 192.168.0.202:16379 slave b6814c717080de33907e6f769e1fd8dc4fe53c38 0 1468339459776 11 connected  
06023f8283389ad5580c782797f49a5996c108b3 192.168.0.201:6379 myself,master - 0 0 10 connected 500-11255  
91179b96d9b8abce85fa7a5748aa9b4114f0b260 192.168.0.202:16380 slave 06023f8283389ad5580c782797f49a5996c108b3 0 1468339462797 10 connected  
ef8a49e5242c791551f1b317d5039144e38acde6 192.168.0.201:6380 slave 13567f6f8787d3aa3f4ef3abd15c2cc500a1469b 0 1468339466819 8 connected  
b6814c717080de33907e6f769e1fd8dc4fe53c38 192.168.0.201:6381 master - 0 1468339465813 11 connected 0-499  
13567f6f8787d3aa3f4ef3abd15c2cc500a1469b 192.168.0.202:16381 master - 0 1468339463802 8 connected 11256-16383

 

## 2、添加节点

 

添加一对（一主一从）新的节点加入到集群当中：192.168.0.201:6382（Master）和192.168.0.201:6383（Slave），文中简称201:6381和201:16382。

 

### **1> 添加master节点**

 

**shell> redis-trib.rb add-node 192.168.0.201:6382 192.168.0.201:6379**

 

参数说明：   
**192.168.0.201:6382：新节点**   
192.168.0.201:6379：可以是集群中的任意一个节点（这里以201:6379为例）

 

注意：   
1> 新的节点必须开启了集群配置   
2> 新的节点必须已启动   
如果不同时满足以上两点，将无法加入到集群中。成功加入集群后，会打印如下信息：

 

![Redis集群管理（一）](https://www.mfisp.com/wp-content/uploads/2021/10/20221202001743jVRywV.png)

 

### **2> 为master节点分配slot**

 

当往Redis集群中存储一份数据时，redis根据key的hash值对16384（slot）取模，算出负责指定slot范围内的某个节点来存储这个key。集群在第一次创建的时候，会给每个master节点在16384个slot中平均分配相应的slot数量，而后面新加入的master节点默认是不会分配slot的。所以我们需要手动为新加入的节点分配一定范围的slot，以便集群在存取数据的时候，能够找到这个新加入的节点。

 

[root@localhost redis-3.2.0]# redis-cli cluster nodes  
901cade1bc2703ef2bb4ff49466b38762346755d 192.168.0.201:6382 master - 0 1468324422110 0 connected  
06023f8283389ad5580c782797f49a5996c108b3 192.168.0.201:6379 myself,master - 0 0 1 connected 0-5460  
...

 

sloat范围显示在节点状态（connected）后边，从上可以看出，新加入的节点201:6382是没有分配slot的，所以为空。而为201:6379节点分配了0-5460范围的slot。   
为新节点分配slot的原理是从其它主节点中负责的slot中，各移出一部份   
slot给新的节点。下面为201:6382分配slot：

 

shell> redis-trib.rb reshard 192.168.0.201:6382

 

![Redis集群管理（一）](https://www.mfisp.com/wp-content/uploads/2021/10/20221202001853gkugDF.png)

 

注意上图中**红框**部份：   
1> 1000 ： 为新的master节点分配1000个slot   
2> 901cade1bc2703ef2bb4ff49466b38762346755d：接收1000个slot的master节点ID   
3> 选择从哪些主节点移动slot到新加入的主节点中：   
* all：表示从集群中所有master节点中各移动一部份slot，凑够1000个slot为止   
* 选择输入一个或多个master的node_id来从中移动，最后输入done完成选择   
4> yes：执行slot移动操作，输入no表示终止操作。   
下面看下新的集群节点及slot分布情况：

 

[root@localhost redis-3.2.0]# redis-cli cluster nodes  
901cade1bc2703ef2bb4ff49466b38762346755d 192.168.0.201:6382 master - 0 1468325773988 9 connected 0-332 5461-5794 10923-11255  
459dbcccc1e5be021f19efde794b9e84474c0c02 192.168.0.202:16379 slave b6814c717080de33907e6f769e1fd8dc4fe53c38 0 1468325769968 7 connected  
06023f8283389ad5580c782797f49a5996c108b3 192.168.0.201:6379 myself,master - 0 0 1 connected 333-5460  
91179b96d9b8abce85fa7a5748aa9b4114f0b260 192.168.0.202:16380 slave 06023f8283389ad5580c782797f49a5996c108b3 0 1468325775495 5 connected  
ef8a49e5242c791551f1b317d5039144e38acde6 192.168.0.201:6380 slave 13567f6f8787d3aa3f4ef3abd15c2cc500a1469b 0 1468325772982 8 connected  
b6814c717080de33907e6f769e1fd8dc4fe53c38 192.168.0.201:6381 master - 0 1468325771976 7 connected 5795-10922  
13567f6f8787d3aa3f4ef3abd15c2cc500a1469b 192.168.0.202:16381 master - 0 1468325774992 8 connected 11256-16383

 

已经成功为201:6382节点分配了0-332、5461-5794、10923-11255范围的slot，可以看出redis从其它三个master节点中均匀的移动了一部份slot到201:6382中。

---
本页由 梦飞idc云平台（https://www.mfisp.com）提供。站点导航见 https://www.mfisp.com/llms.txt
