Redis官方集群原理及特点

Redis官方集群原理及特点

基本介绍

Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施。

Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令需要在多个 Redis 节点之间移动数据, 并且在高负载的情况下, 这些命令将降低Redis集群的性能, 并导致不可预测的行为。

Redis 集群通过分区partition来提供一定程度的可用性availability: 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。

Redis集群提供了以下两个好处:

  • 将数据自动切分split到多个节点的能力。
  • 当集群中的一部分节点失效或者无法进行通讯时, 仍然可以继续处理命令请求的能力。

集群原理

redis-cluster架构图

  1. 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
  2. 节点的fail是通过集群中超过半数的节点检测失效时才生效。
  3. 客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
  4. redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

Redis集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点

redis-cluster投票:容错

  1. 投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超时(cluster-node-timeout),认为当前master节点挂掉.
  2. 什么时候整个集群不可用(cluster_state:fail)?
    • 如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完整时进入fail状态.
    • redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.
    • 如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态.

Redis官方集群设计目标

  • 高性能,并且多达1000个节点的线性可扩展性。没有代理,使用异步复制,并且在进行赋值时没有合并操作。
  • 可接受程度的写安全:当客户端与大多数master节点建立连接后,系统努力(使用最优的方式)保持来自客户端的写操作。通常有小窗口,其中确认的写操作可能会丢失。当客户端在一个小的分区中,窗口丢失写操作会更大。
  • 可用性:Redis集群支持网络分区——其中大部分主节点都可访问,并且不可访问的各master节点对应的从至少一个可访问。而且采用副本迁移,有多个从的主会提供一个从给没有从的主。

Redis集群特点

  • Redis集群不为客户端代理重定向服务,需要客户端自己重定向或缓存slot-node映射
  • Redis集群是无中心架构
  • Redis集群中存在Master-Slave结构
  • Redis集群的Re-sharding等管理需要管理员手动触发

几个约束

  • Redis版本需要>=3.0
  • Redis集群至少需要3个Master节点,考虑到基本的HA,至少需要3个Master节点+3个Slave节点
  • 创建集群使用安装Redis官方提供的Ruby实现的工具
  • 执行复杂的多键操作, 像set类型的合集或交集的命令,要求键必须是属于同一个节点
  • 事务只支持同一个节点的操作,不支持分布式事务

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏后端技术探索

让nginx更安全的几点注意事项

Nginx是当今最流行的Web服务器之一。它为世界上7%的web流量提供服务而且正在以惊人的速度增长。它是个让人惊奇的服务器,我愿意部署它。 下面是一个常见安全...

9520
来自专栏Youngxj

最新Kangle一键安装脚本免费发布PHP5.2-7.0

1.1K60
来自专栏小文博客

自动批量取消关注微信公众号——按键精灵

34140
来自专栏懒人开发

Zookeeper应用:HBase的HA简单实现

相对应hadoop的高可用,HBase配置简单很多 HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有...

46430
来自专栏北京马哥教育

python web 部署:nginx + gunicorn + supervisor + flask 部署笔记

python web 部署 web开发中,各种语言争奇斗艳,web的部署方面,却没有太多的方式。简单而已,大概都是 nginx 做前端代理,中间 webser...

53940
来自专栏Java后端技术栈

简要分析ZooKeeper基本原理及安装部署

Zookeeper官网地址: http://zookeeper.apache.org/

9630
来自专栏网络

ajax极简教程

推荐阅读 微服务: springboot系列教程学习 源码:Javaweb练手项目源码下载 调优:十五篇好文回顾 面试笔试:面试笔试整理系列 一、什么是ajax...

236100
来自专栏Java后端技术栈

Tomcat部署时war和war exploded区别以及平时踩得坑

(1)war模式这种可以称之为是发布模式,看名字也知道,这是先打成war包,再发布;

8830
来自专栏Linyb极客之路

深入浅出Nginx

Nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。

22160
来自专栏架构师之路

TCP接入层的负载均衡、高可用、扩展性架构

一、web-server的负载均衡 ? 互联网架构中,web-server接入一般使用nginx来做反向代理,实施负载均衡。整个架构分三层: 上游调用层,一般是...

51160

扫码关注云+社区

领取腾讯云代金券