Redis集群管理(一)

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集群管理(一)

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集群管理(一)

注意上图中红框部份:
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中。

文章链接: https://www.mfisp.com/13632.html

文章标题:Redis集群管理(一)

文章版权:梦飞科技所发布的内容,部分为原创文章,转载请注明来源,网络转载文章如有侵权请联系我们!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
建站教程投稿分享

Redis集群搭建(二)

2022-12-2 0:14:42

建站教程投稿分享

Redis集群管理(二)

2022-12-2 0:24:47

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索

梦飞科技 - 最新云主机促销服务器租用优惠