V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hackingwu
V2EX  ›  Redis

大家使用 redis 的时候,有考虑 redis 挂的场景?

  •  1
     
  •   hackingwu ·
    hackingwu · 2021-05-13 17:51:27 +08:00 · 6443 次点击
    这是一个创建于 1300 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家使用 redis 的时候,有考虑 redis 挂的场景吗?比如挂了走本地缓存,但是感觉想一想实现的好复杂,大家都是怎么处理的?

    29 条回复    2021-05-14 16:02:56 +08:00
    kop1989
        1
    kop1989  
       2021-05-13 17:54:10 +08:00
    Redis 集群?
    RedisMasterNode
        2
    RedisMasterNode  
       2021-05-13 17:55:27 +08:00
    考虑呀但是没有特别去做降级,按目前的 SLA 看起来只需要简单返回错误就够了宕机时间太短
    aptupdate
        3
    aptupdate  
       2021-05-13 17:58:07 +08:00 via iPhone
    肯定有人考虑过啊,所以才有了集群吗不是。
    cominghome
        4
    cominghome  
       2021-05-13 17:58:50 +08:00
    看 SLA 要求,不是特别变态的话 redis 做了集群就不用太考虑挂掉这个场景
    chenqh
        5
    chenqh  
       2021-05-13 18:34:32 +08:00
    小项目,从来没挂过。
    Jooooooooo
        6
    Jooooooooo  
       2021-05-13 18:37:46 +08:00
    redis 本身也有 HA 啊

    整个集群都挂的场景一般不考虑 (成本很大, 除非有很强的理由要不然做容灾也需要考虑性价比的
    RedisMasterNode
        7
    RedisMasterNode  
       2021-05-13 18:38:33 +08:00
    @aptupdate 它这意思说的就是不管是单点 redis 还是 cluster 还是什么,外部的 cache 出问题不可用的时候,应用内要怎么处理
    leonme
        8
    leonme  
       2021-05-13 18:44:16 +08:00 via iPhone   ❤️ 1
    1. 单点 redis 挂了,可以走 sentinel 2. 集群本身有高可用 3. 应用层,缓存不可访问就查库,或者直接 error 告警
    shawlib
        9
    shawlib  
       2021-05-13 18:47:08 +08:00   ❤️ 1
    脱离场景谈技术都是刷流氓
    40EaE5uJO3Xt1VVa
        10
    40EaE5uJO3Xt1VVa  
       2021-05-13 18:53:26 +08:00
    项目不大,话没考虑挂掉的情况。写了个自动快照脚本,每一小时打个快照,哪里有问题迅速回滚
    cominghome
        11
    cominghome  
       2021-05-13 19:09:25 +08:00
    @RedisMasterNode
    讲道理这个问题的思考方向应该是:我怎么不让强依赖的中间件挂掉,而不是:中间件挂掉了我业务怎么处理
    yeqizhang
        12
    yeqizhang  
       2021-05-13 19:42:56 +08:00 via Android
    挂了立马重启🙈
    Kaciras
        13
    Kaciras  
       2021-05-13 19:45:49 +08:00
    挂了邮件通知,赶紧重启
    westoy
        14
    westoy  
       2021-05-13 19:47:56 +08:00
    做好本地缓存方案又要考虑多个节点的本地缓存一致性了, 然后又要考虑内存出错、IO 出错之类的场景了

    它挂就让它挂

    let it crash 也是一种极好的解决方案
    nielinjie
        15
    nielinjie  
       2021-05-13 19:49:44 +08:00
    彻底挂了还好,redis 有时也会僵死,才叫麻烦。
    RedisMasterNode
        16
    RedisMasterNode  
       2021-05-13 20:34:11 +08:00   ❤️ 3
    @cominghome 你可以问下楼主,我看楼主意思就是大家平时设计的时候有没有在应用层内考虑中间件挂掉了怎么降级和保持可用性;

    你说的完全是另一个事情,而且每个使用的中间件都会考虑,也就没有必要单独问了,比如如何防止 Redis 挂掉
    misaka19000
        17
    misaka19000  
       2021-05-13 21:32:23 +08:00
    HA 加哨兵啊
    GoLand
        18
    GoLand  
       2021-05-13 21:43:29 +08:00
    Redis 做好告警,引入任何依赖都会考虑不可用的情况,尽可能在依赖挂掉的情况下,影响面小一点。

    但是如果强依赖的话,那也没办法,一处挂处处挂。
    miao1007
        19
    miao1007  
       2021-05-13 21:49:15 +08:00
    上高斯 Redis,N-1 级别高可用
    opengps
        20
    opengps  
       2021-05-13 22:10:50 +08:00
    redis 作为缓存,本来就应该做到完全不依赖的程度,redis 是用来提速的,不是用来硬性依赖的
    mreasonyang
        21
    mreasonyang  
       2021-05-13 23:11:52 +08:00 via iPhone
    主从集群加多机房异地,不行再上单元化,这要是都挂了就认命吧。如果单说降级这一点,那可以再来一套分布式缓存方案做冷备
    jinliming2
        22
    jinliming2  
       2021-05-14 00:55:29 +08:00
    redis 官网都曾经几次因为 redis 挂了导致官网几小时内无法访问,直接把错误信息都打出来了
    liuliancao
        23
    liuliancao  
       2021-05-14 08:23:45 +08:00
    提前做好挂掉一台或者多台的准备,增加 HA 的健康检查,redis 搞集群,分级告警出来,未雨绸缪,一个好的架构一台或者几台挂掉都不会影响核心服务。
    leafre
        24
    leafre  
       2021-05-14 08:56:44 +08:00
    主从+Sentinel or Cluster,反对上面说的不依赖 redis,redis 能做的不仅仅是缓存,再说缓存崩了,那是会雪崩的! HA 一定要保证
    polymerdg
        25
    polymerdg  
       2021-05-14 08:58:15 +08:00
    KEEPALIVED VIP 漂移
    iseki
        26
    iseki  
       2021-05-14 09:07:16 +08:00
    感觉与其给 redis 做 HA,不如给整个机房做 HA
    sirius1024
        27
    sirius1024  
       2021-05-14 09:24:43 +08:00
    必然会。而且需要从两方面考虑,一是从 Redis 运维的角度部署 Cluster,保障集群本身的高可用;二是从应用角度编写逻辑,当集群真的不可用时,转为从数据库中捞数据或是有预期内的异常暴露。
    palmers
        28
    palmers  
       2021-05-14 14:24:12 +08:00
    首先讨论 redis 挂的情况, 这种情况 会自动降级,比如兜底方案或不展示某些边缘信息,因为这个过程不会持续很长时间的,否则也没有必要做 redis 挂了的假设或处理;
    其次是 redis 不会挂,原因有:1. redis 现在本身已经是做了高可用,比如集群; 2.再者服务部署多主多从,多机房,尤其是多机房,在高可用里是有要求的,比如 两个机房不能在一个城市,距离上有严格的要求否则形同虚设, 这是为了应对那种极端的灾难, 例如地震 山洪 等。
    ljzxloaf
        29
    ljzxloaf  
       2021-05-14 16:02:56 +08:00
    redis 的功能太多了,导致 ha 方案很难兼顾所有功能。比如说,如果只作为缓存使用的话,用主备就够了,最多是数据不太新鲜而已。而如果作为分布式锁(建议别用),或者一些计数的功能,主备之间的延迟就会影响数据的一致性,必须要保证强一致,不知道目前有没有能保证强一致的方案。这两种场景所要解决的数据访问特征是完全不同的,前者全是读,后者也有一部分写,甚至读写差不多频率,前者更关注的是负载,后者更关注数据的一致和高可用。其实后者不建议使用 redis 了,有更适合的方案,比如 etcd 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1387 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 17:43 · PVG 01:43 · LAX 09:43 · JFK 12:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.