`
mhtbbx
  • 浏览: 36361 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

redis3.0 运维(动态增加、删除、重新分配节点)

阅读更多

上一篇,我介绍了怎样搭建redis 3.0集群环境,本篇继续学习怎样人工干预redis 集群环境,动态的增加、删除、重新分配节点。

一、redis cluster 命令行

  1. //集群(cluster)
  2. CLUSTER INFO 打印集群的信息
  3. CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。
  4.  
  5. //节点(node)
  6. CLUSTER MEET <ip> <port> 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
  7. CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点。
  8. CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点。
  9. CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。
  10.  
  11. //槽(slot)
  12. CLUSTER ADDSLOTS <slot> [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。
  13. CLUSTER DELSLOTS <slot> [slot ...] 移除一个或多个槽对当前节点的指派。
  14. CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
  15. CLUSTER SETSLOT <slot> NODE <node_id> 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。
  16. CLUSTER SETSLOT <slot> MIGRATING <node_id> 将本节点的槽 slot 迁移到 node_id 指定的节点中。
  17. CLUSTER SETSLOT <slot> IMPORTING <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。
  18. CLUSTER SETSLOT <slot> STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。
  19.  
  20. //键 (key)
  21. CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。
  22. CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。
  23. CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键。

这些命令是集群所独有的。执行上述命令要先登录,可以从集群的任意一个节点进行登录:

  1. redis-cli -c -p 7002 -h 127.0.0.1 //登录集群
  2. 127.0.0.1:7002> cluster info
  3. cluster_state:ok
  4. cluster_slots_assigned:16384
  5. cluster_slots_ok:16384
  6. cluster_slots_pfail:0
  7. cluster_slots_fail:0
  8. cluster_known_nodes:6
  9. cluster_size:3
  10. cluster_current_epoch:7
  11. cluster_my_epoch:3
  12. cluster_stats_messages_sent:249371
  13. cluster_stats_messages_received:88204

二、添加节点

1,新配置二个测试节点

  1. [root@localhost cluster]# cp -r 7000 ./7006
  2. [root@localhost7006]# rm -rf appendonly.aof dump.rdb nodes.conf //删除7000节点的相关文件
  3. vi redis.conf
  4. 修改
  5. port 7006
  6. pidfile /var/run/redis_7006.pid

同样操作创建7007节点,然后启动两个redis节点:

  1. [root@localhost7006]# redis-server redis.conf

2,添加主节点

  1. [root@localhostlocal]# cd redis-3.0.0/src/
  2. [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

  1. 127.0.0.1:7001> cluster nodes
  2. 5da7b4b37f4e14638d9558e66166c042b752d417 127.0.0.1:7006 master - 014587242926950 connected
  3. bda1c8d3dacc62fd3f94e681056d24df9c9509d5 127.0.0.1:7005 slave 56dbded984085df8ab3565828a5a8fad02560988 014587242921846 connected
  4. ed3afe6671e902df9572eae4d3364007344c0c71 127.0.0.1:7001 myself,master - 002 connected 5461-10922
  5. 0e7b636594a7ef4d575d8160225b2e1ca90ac375 127.0.0.1:7000 slave 49ed626134079dc301f586ff4edb1670a3a42a8c 014587242916727 connected
  6. 56dbded984085df8ab3565828a5a8fad02560988 127.0.0.1:7002 master - 014587242916723 connected 10923-16383
  7. 49ed626134079dc301f586ff4edb1670a3a42a8c 127.0.0.1:7003 master - 014587242932027 connected 0-5460
  8. 62dea9349dd9b53be602f653b62ab21adad06d26 127.0.0.1:7004 slave ed3afe6671e902df9572eae4d3364007344c0c71 014587242926945 connected
  9. #添加7007成为7006的slave
  10. [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

  1. [root@localhost src]# redis-trib.rb reshard 127.0.0.1:7001//下面是主要过程  
  2. how many slots do you want to move (from1to16384)? 1000//设置slot数1000
  3. What is the receiving node ID? 03ccad2ba5dd1e062464bc7590400441fafb63f2 //新节点node id
  4. Please enter all the source node IDs.
  5. Type'all'to use all the nodes as source nodes for the hash slots.
  6. Type'done' once you entered all the source nodes IDs.
  7. Source node #1:all //表示全部节点重新洗牌
  8. 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,删除从节点

  1. redis-trib.rb del-node127.0.0.1:7001'9c240333476469e8e2c8e80b089c48f389827265'

2,删除主节点

注意:如果主节点有从节点,将从节点转移到其他主节点在删除

  1. 127.0.0.1:7007> clusterreplicate 49ed626134079dc301f586ff4edb1670a3a42a8c

注:49ed626134079dc301f586ff4edb1670a3a42a8c 为master节点7003的node id

如果主节点有slot,去掉分配的slot,然后在删除主节点

  1. # redis-trib.rb reshard 127.0.0.1:7006 //取消分配的slot,下面是主要过程
  2. How many slots do you want to move (from1to16384)? 1000 //被删除master的所有slot数量
  3. What is the receiving node ID? 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052 //接收7007节点slot的master
  4. Please enter all the source node IDs.
  5. Type 'all'to use all the nodes as source nodes forthe hash slots.
  6. Type 'done' once you entered all the source nodes IDs.
  7. Source node #1:03ccad2ba5dd1e062464bc7590400441fafb63f2 //被删除master的node-id
  8. Source node #2:done
  9. Do you want to proceed withthe proposed reshard plan (yes/no)? yes //取消slot后,reshard

注意:source node 要用 ‘done’,如果用all 则会全部洗牌,7006还是会得到slot. 

最后删除主节点7006:

  1. redis-trib.rb del-node127.0.0.1:7001'5da7b4b37f4e14638d9558e66166c042b752d417'

注: 
127.0.0.1:7001 代表cluster的一个node 
5da7b4b37f4e14638d9558e66166c042b752d417 为要删除的7006这个节点的id.

分享到:
评论

相关推荐

    redis开发运维指南.pdf

    在开发方面,Redis提供了高效的数据操作命令,如key操作(列出、测试、删除等)、字符串操作(设置、获取、追加、截取等)、列表操作(添加、查看长度、删除元素等)、集合操作(添加、删除元素等)、有序集合操作...

    redis3.0 windows64位

    "redis3.0 windows64位" 版本是指Redis的3.0版本,特别适配于Windows操作系统64位环境。在Windows上部署Redis可能与Linux或Unix系统有所不同,因为Redis通常是为类Unix系统优化的。Windows版Redis提供了方便Windows...

    Redis3.0.504

    Redis 3.0.504 是一个稳定版本的开源键值存储系统,以其高性能、丰富的数据结构和灵活的数据操作而被广泛应用于缓存、数据库和消息中间件等多个场景。这个版本是为32位操作系统设计的,确保了在资源有限的环境下也能...

    redis3.0和redis-desktop-manager

    3. **Cluster 集群**:Redis 3.0 引入了官方的集群支持,允许用户在多个节点间分配数据,提供水平扩展和故障转移能力。通过命令`CLUSTER`系列,用户可以管理集群,实现数据的自动路由和故障恢复。 4. **lua脚本增强...

    Redis-x64-3.0.504.zip

    Redis 3.0 引入了集群功能,允许用户创建一个由多个节点组成的 Redis 集群,实现数据的自动分片和故障转移,提高系统的可扩展性和可用性。 10. **安全与监控**: Redis 默认不开启密码认证,为了安全起见,应配置...

    redis3.0和redis管理工具

    1. **Cluster 支持**:Redis 3.0 引入了官方的集群支持,允许用户将数据分布到多个节点上,实现数据的自动分片和故障转移,从而提升了系统的可扩展性和可用性。 2. **lua脚本引擎优化**:Lua 脚本在 Redis 中用于...

    redis-3.0.503_x64.rar|redis-3.0.503_x64.rar

    Redis 还具有丰富的命令集,这些命令允许用户进行数据的读取、写入、更新和删除,同时支持事务处理,确保数据的一致性。此外,Redis 还具备发布/订阅(Publish/Subscribe)功能,使其能作为一个消息中间件,方便应用间...

    Redis3.0集群与应用.zip

    在添加或删除节点时,需要重新分配哈希槽,确保数据一致性。 应用Redis集群时,开发者需要注意几个关键点: 1. 数据分布:由于数据分布在多个节点,操作可能涉及到多个节点,因此在设计数据模型时要考虑数据的关联...

    redis集群文档

    1. 从节点宕机:重新启动后,从节点会自动与主节点同步。 2. 主节点宕机: a. 从节点提升为主节点,手动设置其他从节点。 b. 主节点重启后,手动设置为主节点的从节点。 Redis的主从复制策略可以有效避免单点故障...

    redis-stable.tar.gz

    1. 初始化集群:通过`redis-trib.rb`脚本创建初始集群,指定各节点IP和端口,脚本会自动分配槽和建立节点间连接。 2. 扩展与收缩:添加或移除节点时,需要通过`redis-cli`的`CLUSTER ADDSLOTS`和`CLUSTER DELSLOTS`...

    Redis集群方案.docx

    Codis允许在不中断服务的情况下动态添加或移除Redis节点,提高了集群的可扩展性和运维效率。 这些集群方案各有优缺点,选择哪种方案取决于具体业务场景、性能要求、运维能力以及团队的技术栈。例如,如果对运维要求...

    Linux一键部署在线版Redis集群

    在Redis 3.0版本之后,官方引入了Redis Cluster功能,允许用户在无中心协调者的情况下构建可扩展的集群。 在“Linux一键部署在线版Redis集群”的过程中,我们需要理解以下几个关键知识点: 1. **Redis集群概念**:...

    第三节Redis高可用集群之水平扩展1

    总之,Redis 高可用集群的水平扩展涉及新节点的配置、启动、加入集群以及哈希槽的重新分配。理解这个过程对于运维大规模 Redis 集群至关重要,因为合理的水平扩展能有效应对数据量的增长,同时保持系统的稳定性和高...

    Redis集群_实际使用自己整理的版本.docx

    - **Codisconfig**:提供了管理工具及图形化界面,支持添加/删除节点、数据迁移等操作。 - **ZooKeeper**:分布式应用程序协调服务,用于管理和协调Codis集群中的各个组件。 **优势**: 1. **高度可扩展性**:支持...

    redis集群文档,原理,集群搭建过程,非常细致

    Redis Cluster 是 Redis 3.0 版本引入的官方分布式解决方案,旨在解决单机Redis的内存、并发和流量瓶颈问题,实现负载均衡。相比于客户端分区和代理方案,Redis Cluster 提供了更优雅的集群管理方式,减少了分布式...

    redis“集群”的前世今生.rar

    在运行时,可以动态调整槽与节点的关系,增加或减少节点来应对容量变化。注意,这可能需要重新分配数据,影响服务。 #### 监控与故障恢复 使用监控工具持续关注集群状态,包括节点健康、槽分布、网络延迟等。在主...

    redis 可视化工具,redisstudio

    6. **集群支持**:Redis 从 3.0 版本开始引入了集群功能,RedisStudio 可以管理和操作 Redis 集群,包括节点监控、槽分配、数据迁移等。 7. **脚本编辑器**:内置的 Lua 脚本编辑器,允许用户编写、调试和执行 ...

    全面解读NoSQL数据库Redis的核心技术与应用实践1

    NoSQL数据库Redis是一种高性能的键值存储系统,它在互联网和Web领域中广泛应用于处理海量数据和高并发问题。...通过建立自动化运维平台和使用Redis,可以确保在面对突发流量时,服务的稳定性和可靠性。

    Redis集群的相关详解

    - 分片:数据均匀分布在多个节点,增加或删除节点时,只需迁移部分哈希槽,无需停机。 - 集群总线:每个节点有两个端口,客户端端口用于与客户端交互,集群总线端口用于节点间的通信和故障检测。 3. Redis集群特点 ...

Global site tag (gtag.js) - Google Analytics