开发者学堂课程【Redis 数据库入门:Redis_集群_原生3.x集群模式_1】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/15/detail/65
Redis_集群_原生3.x集群模式_1
内容介绍:
一、Redis Twemproxy
一、Redis Twemproxy
1.总结
- 前端使用 Twemproxy 做代理,后端的Redis数据能基本上根据 key 来进行比较均衡的分布
- 后端一台 Redis 挂掉后, Twemproxy 能够自动摘除。恢复后,Twemproxy 能够自动识别、恢复并重新加入到 Redis 组中重新使用
- Redis 挂掉后,后端数据是否丢失依据 Redis 本身的持久化策略配置,与 Twemproxy 基本无关
- 如果要新增加一台 Redis,Twemproxy 需要重启才能生效:并且数据不会自动重新 Reblance ,需要人工单独写脚本来实现
- 如原来已经有2个节点 Redis,后续有增加2个 Redis ,则数据分布计算与原来的 Redis 分布无关现有数据如果需要分布均匀的话,需要人工单独处理
- 如果 Twemproxy 的后端节点数量发生变化, Twemproxy 相同算法的前提下,原来的数据必须重新处理分布,否则会存在找不到 key 值的情况
- 不管 Twemproxy 后端有几台 Redis,前端的单个 Twemproxy 的性能最大也只能和单台 Redis 性能差不多
- 如同时部署多台 Twemproxy 配置一样,客户端分别连接多台 Twemproxy 可以在一定条件下提高性能
- redis-mgr
- 整合了通过整合复制、Sentinel 以及 twemproxy 等组件,提供了一站式的 Redis 服务器部署、监控、迁移功能,网址https://github.com/changyibiao/redis-mgr
2.Redis 集群
- 3.0支持
- 由多个 Redis 服务器组成的分布式网络服务集群
- 每一个 Redis 服务器称为节点 Node ,节点之间会互相通信。两两相连
- Redis 集群无中心节点
3.Redis 集群节点复制
- Redis 集群的每个节点都有两种角色可选:主节点 masternode 从节点 slavenode,其中主节点用于存储数据,而从节点则是某个主节点的复制品
- 当用户需要处理更多读请求的时候,添加从节点可以扩展系统的读性能,因为 Redis 集群重用了单机 Redis 复制特性的代码,所以集群的复制行为和我们之前介绍的单机复制特性的行为是完全一样的
4.Redis 集群故障转移
- Redis 集群的主节点内置了类似 RedisSentinel 的节点故障检测和自动故障转移功能,当集群中的某个主节点下线时,集群中的其他在线主节点会注意到这一点,并对已下线的主节点进行故障转移
- 集群进行故障转移的方法和 RedisSentinel 进行故障转移的方法基本一样,不同的是,在集群里面,故障转移是由集群中其他在线的主节点负责进行的,所以集群不必另外使用 Redis Sentinel
5.Redis 集群分片
- 集群将整1数据库分为16384个槽位 slot,所有 key 都数据这些 slot 中的一个,key 的槽位计算公式为slot number=crc16(key)%16384,其中 crc16为16位的循环冗余校验和函数
- 集群中的每个主节点都可以处理0个至16383个槽,当16384
个槽都有某个节点在负责处理时,集群进入上线状态,并开始处理客户端发送的数据命令请求
- 举例
a)三个主节点700070017002平均分片16384个 slot 槽位
b)节点7000指派的槽位为0到5460
c)节点7001指派的槽位为5461到10922
d)节点7002指派的槽位为10923到16383
6.Redi 集群 Redirect 转向
- 由于 Redis集群无中心节点,请求会发给任意主节点
- 主节点只会处理自己负责槽位的命令请求,其它槽位的命令请求,该主节点会返回客户端一个转向错误
- 客户端根据错误中包含的地址和端口重新向正确的负责的主节点发起命令请求
7.Redis 集群搭建
- 创建多个主节点
- 为每一个节点指派 slot ,将多个节点连接起来,组成一个集群
- 槽位分片完成后,集群进入上线状态
- 6个节点:3个主节点,每一个主节点有一个从节点




