美文网首页我爱编程
【转】Redis HA 方案选型

【转】Redis HA 方案选型

作者: 程序员驿站 | 来源:发表于2018-02-28 15:04 被阅读307次

转载 http://jolestar.com/redis-ha/
本文整理了redis当前的高可用方案,以及比较各方案的优劣和我们最后的选型。

Redis-Cluster

  • 引入Hash slots概念,便于分片以及数据迁移.解决了按照节点分片带来的扩容以及数据迁移的困难

    slot = crc16(“foo”) mod NUMERSLOTS

  • 节点都是对等的,复制是基于slots的,不是基于节点的.每个slots有两份冗余,可以容忍随机的两台节点宕机而不影响服务

  • 支持自动重新分片以及故障迁移

  • 节点通过PING-PONG以及Gossip互相感知,不需要中心监控服务监控节点的状态

  • 通过SmartClient在Client端缓存了slots的分布图,无需中心代理.

详情参看 Redis_Cluster.pdf

  1. 优点
    • 优点很多 能确保高可用 高性能,基本上是分布式缓存的完美方案
  2. 缺点:
    • 还是beta版本,不能在生产环境使用

HAProxy + Twemproxy + redis-twemproxy-agent(NodeJS) + redis sentinel

方案来源(REDIS-SENTINEL TWEMPROXY AGENT)

image
  • Twemproxy 是twitter开源的代理服务,支持Memcached和Redis协议,在这里主要的作用是 1.解决分片的问题,这样就不需要客户端自己做分片,分片对客户端是透明的.2.客户端应用连接Twemproxy,主从切换对客户端透明
  • Redis sentinel 是redis官方提供的redis检测工具,会检测redis的状态然后触发事件.
  • Redis-Twemproxy-Agent主要是用于监听redis sentinel的变更事件,修改Twemproxy的配置.
  • HAProxy 主要是为了解决Twemproxy的高可用问题。
  1. 优点
    • 解决了分片问题
    • 能保证高可用
  2. 缺点
    • Twemproxy的hash规则和我们当前使用的方式不兼容,改造后会有数据迁移的问题,比较麻烦
    • 这个方案引入的组件过多,担心不好运维
    • 不支持读写分离Slave节点只起备份的作用

Keepalived + HAProxy + Redis sentinel + 自定义脚本

这个方案基本上是上个版本的简化版本 redis-ha
  • Keepalived负责虚拟ip和高可用
  • HAProxy 负责代理Redis的端口,同一个实例可以代理多个redis节点
  • Redis sentinel负责检测Redis的存活状况,并进行主从切换
  • 自定义脚本由Keepalived的定时调用,通过命令向Redis sentinel查询Redis Master的ip,判断是否发生变化,如果变化则修改HAProxy配置文件并重启HAProxy.
  1. 优点:
    • 组件较少,并且都比较成熟,运维成本较低
  2. 缺点:
    • redis的slave一直处于备用状态 比较浪费(同上一个方案)
    • 没有解决分片问题,分片由应用解决
    • 代理对性能有影响
    • 脚本是定时轮询的机制通过Redis sentinel查询redis状态,主从变更后感知会比较慢,如果发生切换,整体上服务会有分钟级别的时间处于不可用状态

Zookeeper + Redis sentinel + 自定义同步服务 + SmartClient

这个方案的思路和RedisCluster有一定的共通之处,

  • Redis sentinel 检测redis实例并进行主从切换
  • 自定义同步服务负责监听Redis sentinel的状态变更,将redis实例的状态同步到Zookeeper
  • Zookeeper扮演配置中心角色
  • SmartClient连接到Zookeeper并且watch Redis 实例的状态,根据状态将请求发送到正确的redis节点
  1. 优点:
    • 不需要代理 没有性能浪费
    • SmartClient机制是当前分布式缓存的一种通用解决方案
  2. 缺点:
    • 自定义同步服务以及SmartClient当前都需要额外开发 考虑到RedisCluster本身已经包含了这些改造,不如等待Cluster正式发布.

结论

基于当前流量不是太大,数据分片也不是当前最大的的问题,主要的需求点在高可用,最后使用了方案二.上线后整体稳定,服务器重启,网络不通等故障,基本不用人工处理redis的问题

相关文章

  • 【转】Redis HA 方案选型

    转载 http://jolestar.com/redis-ha/本文整理了redis当前的高可用方案,以及比较各方...

  • Redis 部署选型方案

    Redis 部署选型方案 ==前言== 项目即将使用Redis,本文对Redis的部署方案,进行选型分析。 ==一...

  • Redis HA 方案

    概述 HA(High Available,高可用性群集) 机集群系统简称,是保证业务连续性的有效解决方案,一般有两...

  • Redis(二)之高可用(HA)

    Redis高可用方案HA(High Available) 一、Redis单实例 当系统中只运行一台Redis实例时...

  • Redis高可用解决方案

    哨兵 哨兵是个基于redis HA解决方案,他支持redis 自身的主从角色替换,所以严格来说他其实只是个redi...

  • Spark | HA

    spark ha 基于文件系统Spark HA方案 基于zookeeperd的Spark HA方案

  • 资深架构师谈Redis高可用架构的应用及改进

    前言 随着很多公司使用Redis作为缓存和高性能存储方案,Redis的可用性也变得越来越重要。目前 比较主流的HA...

  • redis系列(六):哨兵

    综述 哨兵是redis的高可用(HA)解决方案:由一个或多个sentinel实例组成的哨兵系统。 sentinel...

  • 如何进行架构方案选型和推进【Docker】

    [TOC] 如何进行架构方案选型和推进【Docker】 架构选型 架构选型和方案落地要全局观点,就是要考虑到方方面...

  • Redis HA

    部署如下图 可以分为 Master-Slave Cluster 和 Sentinel HA Solution 两个...

网友评论

    本文标题:【转】Redis HA 方案选型

    本文链接:https://www.haomeiwen.com/subject/exzbxftx.html