上一篇,我介绍了怎样搭建redis 3.0集群环境,本篇继续学习怎样人工干预redis 集群环境,动态的增加、删除、重新分配节点。
一、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 槽中的键。
这些命令是集群所独有的。执行上述命令要先登录,可以从集群的任意一个节点进行登录:
- redis-cli -c -p 7002 -h 127.0.0.1 //登录集群
- 127.0.0.1:7002> 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:7
- cluster_my_epoch:3
- cluster_stats_messages_sent:249371
- cluster_stats_messages_received:88204
二、添加节点
1,新配置二个测试节点
- [root@localhost cluster]# cp -r 7000 ./7006
- [root@localhost7006]# rm -rf appendonly.aof dump.rdb nodes.conf //删除7000节点的相关文件
- vi redis.conf
- 修改
- port 7006
- pidfile /var/run/redis_7006.pid
同样操作创建7007节点,然后启动两个redis节点:
- [root@localhost7006]# redis-server redis.conf
2,添加主节点
- [root@localhostlocal]# cd redis-3.0.0/src/
- [root@localhost src]# ./redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7001
注释:
127.0.0.1:7006 是新增的节点
127.0.0.1:7001 集群任一个旧节点
3,添加从节点
#查看 7006节点的node id
- 127.0.0.1:7001> cluster nodes
- 5da7b4b37f4e14638d9558e66166c042b752d417 127.0.0.1:7006 master - 014587242926950 connected
- bda1c8d3dacc62fd3f94e681056d24df9c9509d5 127.0.0.1:7005 slave 56dbded984085df8ab3565828a5a8fad02560988 014587242921846 connected
- ed3afe6671e902df9572eae4d3364007344c0c71 127.0.0.1:7001 myself,master - 002 connected 5461-10922
- 0e7b636594a7ef4d575d8160225b2e1ca90ac375 127.0.0.1:7000 slave 49ed626134079dc301f586ff4edb1670a3a42a8c 014587242916727 connected
- 56dbded984085df8ab3565828a5a8fad02560988 127.0.0.1:7002 master - 014587242916723 connected 10923-16383
- 49ed626134079dc301f586ff4edb1670a3a42a8c 127.0.0.1:7003 master - 014587242932027 connected 0-5460
- 62dea9349dd9b53be602f653b62ab21adad06d26 127.0.0.1:7004 slave ed3afe6671e902df9572eae4d3364007344c0c71 014587242926945 connected
- #添加7007成为7006的slave
- [root@localhost src]# ./redis-trib.rb add-node --slave --master-id 5da7b4b37f4e14638d9558e66166c042b752d417 127.0.0.1:7007 127.0.0.1:7001
注释:
–slave,表示添加的是从节点
–master-id 5da7b4b37f4e14638d9558e66166c042b752d417 ,主节点的node id,在这里是前面新添加的7006的node id
127.0.0.1:7007,新节点
127.0.0.1:7001集群任一个旧节点
4,重新分配slot
- [root@localhost src]# redis-trib.rb reshard 127.0.0.1:7001//下面是主要过程
- how many slots do you want to move (from1to16384)? 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 //确认重新分
在查看集群nodes信息,得到如下结果:
新添加的主节点是没有slot的,主节点如果没有slots的话,存取数据就都不会被选中。所以重新洗牌后就新加的master node 就有slot了。 注意:如果用’all’则会将其他每个master节点的slot 分给目标节点。最好别用‘all’, 会造成slot 分割碎片。图为用’all’的情况。
三、删除节点
1,删除从节点
- redis-trib.rb del-node127.0.0.1:7001'9c240333476469e8e2c8e80b089c48f389827265'
2,删除主节点
注意:如果主节点有从节点,将从节点转移到其他主节点在删除
- 127.0.0.1:7007> clusterreplicate 49ed626134079dc301f586ff4edb1670a3a42a8c
注:49ed626134079dc301f586ff4edb1670a3a42a8c 为master节点7003的node id
如果主节点有slot,去掉分配的slot,然后在删除主节点
- # redis-trib.rb reshard 127.0.0.1:7006 //取消分配的slot,下面是主要过程
- How many slots do you want to move (from1to16384)? 1000 //被删除master的所有slot数量
- What is the receiving node ID? 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052 //接收7007节点slot的master
- Please enter all the source node IDs.
- Type 'all'to use all the nodes as source nodes forthe 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 withthe proposed reshard plan (yes/no)? yes //取消slot后,reshard
注意:source node 要用 ‘done’,如果用all 则会全部洗牌,7006还是会得到slot.
最后删除主节点7006:
- redis-trib.rb del-node127.0.0.1:7001'5da7b4b37f4e14638d9558e66166c042b752d417'
注:
127.0.0.1:7001 代表cluster的一个node
5da7b4b37f4e14638d9558e66166c042b752d417 为要删除的7006这个节点的id.
相关推荐
redis开发运维工具手册,适用于redis开发和运维人员。
Redis3.0.504Redis3.0.504Redis3.0.504Redis3.0.504Redis3.0.504
redis 开发运维指南 全套宝典 包含开发标准开发设计规范,上线部署规划 常见问题处理 高可用及集群 开发运维人员的必备宝典
redis3.0windows版,解压后可直接使用
Redis 3.0在原有的基础上进行了升级,新增了丰富的功能,其中包括支持Lua脚本、可插拔模块化、多主复制、集群等,使得Redis 3.0在性能、可扩展性、安全性等方面有着显著的提升。 2、Redis 3.0新特性: (1)支持Lua...
redis3.0.501绿色版 自己改下批处理的路径
redis3.0-windows.具体安装步骤请转至博主博客
redis3.0集群正式版出来啦,redis3.0.集群环境安装手册
redis 3.0 win7 32位x86,亲测可用!
linux下redis3.0 安装与优化
Redis 3.0 教程 高清中文版
Redis开发运维实践指南电子书 支持PDF/mobi/epub多种格式
redis3.0 服务端+客户端,64位无条数限制版本,亲测可用
redis 3.0 集群的安装和原理部分的设置,主从复制,哨兵,集群,故障转移,
某播客Redis3.0新特性、主从复制、集群视频教程 某播客Redis3.0新特性、主从复制、集群视频教程 某播客Redis3.0新特性、主从复制、集群视频教程
redis3.0 windows64位版本
redis3.0 widows集群 spring整合jedis redis搭建window集群代码和文档rubygems-2.5.1和rubyinstaller-2.2.3-x64软件下载
redis3.0 可以在windows系统使用,喜欢的朋友可以下载
window环境下的redis3.0
redis windows安装包 3.0.503版。安装详情可以查看我的博客redis初体验篇。http://www.cnblogs.com/qiyue-web/