Redis Cluster 主要特点和设计原理

Redis cluster 目标

Redis Cluster 是分布式Redis, 按重要性排序, 需要实现以下几个目标:

  • 高性能、可线性扩展至1000个节点。不使用代理, 没有异步复制, 不需要任何值的合并操作
  • 比较高的写安全度: 系统尝试(以最大努力的方式)保留来自与大多数主节点连接的客户端的所有写入。通常有一些小窗口,确认的写入可能会丢失,只有小部分分区会丢失已确认写入的窗口。
  • 可用性: Redis集群能够在大多数主节点可访问的分区中生存,并且对于每个不再可访问的主节点,至少有一个可访问的从节点。此外,使用副本迁移时, 当某一个主没有任何从复制时, 可以从另外一个有多个从的主那里获取到新的从

Redis Cluster 是3.0版本以后支持的。

Redis Cluster是单机功能的子集

Cluster实现了所有单机Redis的命令。对于一些复杂的多key批量操作比如集合的并集和交集也是支持的, 只是需要这些keys能hash到一个槽上(slot)。

Redis Cluster实现了一个称为哈希标签的概念,可以使用它来强制将某些keys存储在同一哈希槽中。但是,在手动重分片期间,多键操作可能在一段时间内不可用,而单键操作始终可用。

Redis Cluster 不支持单机redis的那种多database的功能。集群模式只有database 0 因此 切换database的SELECT 命令是不支持的。

Redis Cluster 协议中客户端和服务端角色

节点负责保存数据,并获取集群的状态,包括将keys映射到正确的节点。集群节点还能够自动发现其他节点,检测非工作节点,并在需要时将从属节点提升为主节点,以便在发生故障时继续运行。

为了执行任务,所有集群节点都使用TCP总线和称为Redis集群总线的二进制协议连接。每个节点都使用集群总线连接到集群中的每个其他节点。节点使用gossip协议来传播关于集群的信息,以便发现新节点,发送ping包以确保所有其他节点都正常工作,并发送集群消息以通知特定条件。集群总线还用于在集群中传播发布/订阅消息,并在用户请求时协调手动故障切换(手动故障切换不是由Redis集群故障检测器发起,而是由系统管理员直接发起)。

由于群集节点无法代理请求,因此可能会使用重定向错误-MOVED和-ASK将客户端重定向到其他节点。理论上,客户机可以自由地向集群中的所有节点发送请求,如果需要,可以重定向,因此客户机不需要保持集群的状态。然而,能够缓存键和节点之间映射的客户端可以以合理的方式提高性能。

 (免费订阅,永久学习)学习地址: 

C/C++Linux服务器开发公开课

更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,永久学习,或点击这里加qun免费
领取,关注我持续更新哦! !

LinuxC/C++服务器开发/架构师 面试题、学习资料、教学视频和学习路线图(资料包括C/C++,Linux,Ngi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值