中间件-Redis集群详解

RedisCluster是Redis的分布式解决方案,采用hash分区规则将数据分散到多个节点。核心概念包括slot(范围0-16383),节点角色(主节点和从节点)和节点通信(Gossip协议)。集群搭建涉及节点握手、槽分配和智能客户端请求路由。在扩展和收缩集群时,需迁移槽和数据。此外,RedisCluster对批量操作和事务支持有限,不支持多数据库。
摘要由CSDN通过智能技术生成

Redis Cluster是Redis的分布式解决方案。就是按照hash分区规则将Redis数据映射到多个Redis节点。数据分区是分布式存储的核心  。 

 

一、hash分区规则

a)节点取余分区

b)一致性hash分区

c)虚拟槽分区,Redis的slot范围是0-16383,slot是集群内数据管理和迁移的基本单位

二、Redis的Slot

slot=CRC16(key) & 16383,通过slot解耦数据和节点之间的关系。

三、限制

a)mset、mget等批量操作仅支持具有相同slot值的key。

b)仅支持多key在同一节点上的事务操作,当多个key分布在不同节点上时无法使用事务。

c)不能将大的键值对象如hash、list映射到不同的节点。

d)不支持多数据库空间。

四、Redis集群启动流程

集群配置文件:node-{port}.conf,Redis自动维护集群配置文件,不需要手动维护。

命令:查看集群节点状态 -> cluster nodes,

          查看集群状态 -> cluster info

五、节点握手

节点握手就是运行在集群模式下的节点通过gossip协议彼此通信,感知对方的过程。握手后,集群处于下线状态,所有读写都被禁止,只有16384个slot全部分配给节点后,集群才可以正式对外服务。

命令:握手 -> cluster meet {ip} {port},异步。

六、分配槽

redis-cli -h 127.0.0.1 -p 6379 cluster addslots {0...5461}

redis-cli -h 127.0.0.1 -p 6380 cluster addslots {5462...10922}

redis-cli -h 127.0.0.1 -p 6381 cluster addslots {10923...16383}

七、Redis Cluster的节点角色

主节点:首次启动的节点和被分配槽的节点,从节点:负责复制主节点槽信息和相关的数据。

命令:-> cluster replicate {nodeId},命令必须在对应的从节点上执行,nodeId是需要复制的主节点的节点ID

八、官方Redis集群搭建工具redis-trib.rb

redis-trib.rb是ruby实现的redis集群管理工具。

1、ruby环境准备

2、节点准备

3、创建集群:redis-trib.rb create --replicas 1 127.0.0.1:6481 127.0.0.1:6482 127.0.0.1:6483 127.0.0.1:6484 127.0.0.1:6485 127.0.0.1:6486

注意:给 redis-trib.rb的节点地址必须不能包括任何槽/数据的节点。

4、集群完整性检查:redis-trib.rb check 127.0.0.1:6379  

九、节点通信

1、Gossip协议,信息交换,包括:消息头、消息体

  • ping消息:用于检测节点是否在线和交换彼此状态信息,每秒。
  • pong消息:响应
  • meet消息:
  • fail消息等:当节点判定集群内另一个节点下线时,会向集群内广播一个fail消息。

2、节点选择

​​​​​​​3、通过cluster_node_timeout参数,可以影响集群信息交换的频率,从而影响故障转移、槽信息更新、新节点发现的速度。

ping消息的数量=1+10*num(node.pong_received>cluster_node_timeout/2)

4、集群伸缩:就是槽和数据在节点之间的移动

1)集群扩容:

  • 准备新节点:redis-server conf/redis-6385.conf ... 
  • 加入集群:cluster meet 127.0.0.1 6385  或 redis-trib.rb add-node new_host:new_port existing_host:existing_port --slave --master-id <arg> 。
  • 迁移槽和数据:redis-trib.rb reshard host:port --from <arg> --to <arg> --slots <arg> --yes --timeout <arg> --pipleline <arg> 。
  • redis-trib.rb rebalance host:port检查节点之间槽的均衡性。
  • 添加从节点:cluster replicate {masterNodeId}。

2)集群收缩

  • 下线迁移槽:redis-trib.rb reshard 127.0.0.1:6381 
  • 忘记节点:redis-trib.rb del-node {host:port} {downNodeId} 或 cluster forget {downNodeId}
  • 先下线从节点,再下线主节点

5、请求路由

1)请求重定向

查看键所在的slot命令:cluster keyslot test:2 

hash_tag:键内部使用大括号包含的内容叫hash_tag,它提供了不同的键可以具备相同slot的功能。例如:mget user:{10086}:friends user:{10086}:videos。

2)Smart客户端

Smart客户端通过在内部维护slot->node的映射关系,本地就可实现键到节点的查找,MOVED重定向负责协助Smart客户端更新slot->node映射。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
08-10
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值