【转】Redis HA 方案选型

转载 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的问题

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,682评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,277评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,083评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,763评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,785评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,624评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,358评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,261评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,722评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,900评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,030评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,737评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,360评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,941评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,057评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,237评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,976评论 2 355

推荐阅读更多精彩内容

  • 单机/单点 单点故障/瓶颈:多个节点负载:面向数据:一变多(一致性<弱一致,最终一致性>)》可用性最终一致性:一部...
    壹点零阅读 793评论 0 3
  • 本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍。之后概...
    kelgon阅读 61,166评论 23 625
  • 转载:Redis 宝典 | 基础、高级特性与性能调优 本文由 DevOpsDays 本文由简书作者kelgon供稿...
    meng_philip123阅读 3,126评论 1 34
  • Redis集群方案 通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取。Redis...
    jiangmo阅读 597评论 0 3
  • 文/Nichole 文学/情感 昨晚返京,杨先森早早说要来接我,开森;因为飞机延误,不来了,不开森。 落地后发现杨...
    翁萍阅读 458评论 0 1