上一篇,我介绍了怎样搭建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提供了高效的数据操作命令,如key操作(列出、测试、删除等)、字符串操作(设置、获取、追加、截取等)、列表操作(添加、查看长度、删除元素等)、集合操作(添加、删除元素等)、有序集合操作...
"redis3.0 windows64位" 版本是指Redis的3.0版本,特别适配于Windows操作系统64位环境。在Windows上部署Redis可能与Linux或Unix系统有所不同,因为Redis通常是为类Unix系统优化的。Windows版Redis提供了方便Windows...
Redis 3.0.504 是一个稳定版本的开源键值存储系统,以其高性能、丰富的数据结构和灵活的数据操作而被广泛应用于缓存、数据库和消息中间件等多个场景。这个版本是为32位操作系统设计的,确保了在资源有限的环境下也能...
3. **Cluster 集群**:Redis 3.0 引入了官方的集群支持,允许用户在多个节点间分配数据,提供水平扩展和故障转移能力。通过命令`CLUSTER`系列,用户可以管理集群,实现数据的自动路由和故障恢复。 4. **lua脚本增强...
Redis 3.0 引入了集群功能,允许用户创建一个由多个节点组成的 Redis 集群,实现数据的自动分片和故障转移,提高系统的可扩展性和可用性。 10. **安全与监控**: Redis 默认不开启密码认证,为了安全起见,应配置...
1. **Cluster 支持**:Redis 3.0 引入了官方的集群支持,允许用户将数据分布到多个节点上,实现数据的自动分片和故障转移,从而提升了系统的可扩展性和可用性。 2. **lua脚本引擎优化**:Lua 脚本在 Redis 中用于...
Redis 还具有丰富的命令集,这些命令允许用户进行数据的读取、写入、更新和删除,同时支持事务处理,确保数据的一致性。此外,Redis 还具备发布/订阅(Publish/Subscribe)功能,使其能作为一个消息中间件,方便应用间...
在添加或删除节点时,需要重新分配哈希槽,确保数据一致性。 应用Redis集群时,开发者需要注意几个关键点: 1. 数据分布:由于数据分布在多个节点,操作可能涉及到多个节点,因此在设计数据模型时要考虑数据的关联...
1. 从节点宕机:重新启动后,从节点会自动与主节点同步。 2. 主节点宕机: a. 从节点提升为主节点,手动设置其他从节点。 b. 主节点重启后,手动设置为主节点的从节点。 Redis的主从复制策略可以有效避免单点故障...
1. 初始化集群:通过`redis-trib.rb`脚本创建初始集群,指定各节点IP和端口,脚本会自动分配槽和建立节点间连接。 2. 扩展与收缩:添加或移除节点时,需要通过`redis-cli`的`CLUSTER ADDSLOTS`和`CLUSTER DELSLOTS`...
Codis允许在不中断服务的情况下动态添加或移除Redis节点,提高了集群的可扩展性和运维效率。 这些集群方案各有优缺点,选择哪种方案取决于具体业务场景、性能要求、运维能力以及团队的技术栈。例如,如果对运维要求...
在Redis 3.0版本之后,官方引入了Redis Cluster功能,允许用户在无中心协调者的情况下构建可扩展的集群。 在“Linux一键部署在线版Redis集群”的过程中,我们需要理解以下几个关键知识点: 1. **Redis集群概念**:...
总之,Redis 高可用集群的水平扩展涉及新节点的配置、启动、加入集群以及哈希槽的重新分配。理解这个过程对于运维大规模 Redis 集群至关重要,因为合理的水平扩展能有效应对数据量的增长,同时保持系统的稳定性和高...
- **Codisconfig**:提供了管理工具及图形化界面,支持添加/删除节点、数据迁移等操作。 - **ZooKeeper**:分布式应用程序协调服务,用于管理和协调Codis集群中的各个组件。 **优势**: 1. **高度可扩展性**:支持...
Redis Cluster 是 Redis 3.0 版本引入的官方分布式解决方案,旨在解决单机Redis的内存、并发和流量瓶颈问题,实现负载均衡。相比于客户端分区和代理方案,Redis Cluster 提供了更优雅的集群管理方式,减少了分布式...
在运行时,可以动态调整槽与节点的关系,增加或减少节点来应对容量变化。注意,这可能需要重新分配数据,影响服务。 #### 监控与故障恢复 使用监控工具持续关注集群状态,包括节点健康、槽分布、网络延迟等。在主...
6. **集群支持**:Redis 从 3.0 版本开始引入了集群功能,RedisStudio 可以管理和操作 Redis 集群,包括节点监控、槽分配、数据迁移等。 7. **脚本编辑器**:内置的 Lua 脚本编辑器,允许用户编写、调试和执行 ...
NoSQL数据库Redis是一种高性能的键值存储系统,它在互联网和Web领域中广泛应用于处理海量数据和高并发问题。...通过建立自动化运维平台和使用Redis,可以确保在面对突发流量时,服务的稳定性和可靠性。
- 分片:数据均匀分布在多个节点,增加或删除节点时,只需迁移部分哈希槽,无需停机。 - 集群总线:每个节点有两个端口,客户端端口用于与客户端交互,集群总线端口用于节点间的通信和故障检测。 3. Redis集群特点 ...