[2023]Redis高可用

为什么要有Redis高可用?

痛点:

  1. 如果一个服务的redis,只有一个master节点,那哪天接口机跟redis机器网络不通,或者redis机器故障了,不就访问不了Redis了,如果服务强依赖redis,那不就崩了
  2. master多节点级别的高可用:如果redis有master节点,以及还有slave节点,那如果网络不通、redis机器故障了,哪怕故障1个小时,整个服务的redis都受影响,那如果redis有多个master节点(4个),数据分片到这些master里面,那redis机器如果只是挂了一个机器,受影响也是1/4的数据。损失减少3/4
  3. 地区级别的redis高可用:如果服务是南北都有部署的,广州访问广州地区的redis,北京访问北京的redis。如果北京地区redis挂了,可以北京地区连广州redis,或者直接北京请求转发到广州;或者客户端收到北京失败请求后,重试到广州

高可用的手段

高可用的本质是有备份,在出现故障的时候,有backup可以提供服务。
所以问题核心是备份,那么怎么备份呢?

一下按几个层次来简单解析一下:

持久化:

解决的痛点:数据落盘,不会因为redis挂了内存数据都丢了

redis数据存在内存的,如果redis挂了,那么重启后内存数据就丢失,没有备份。此时就是需要持久化了,即把redis存入的数据,同时也写一份到磁盘,在redis挂了重启的时候,可以重新导入磁盘数据,来达到恢复的目的。

好处:

  • 有了磁盘的备份,故障的时候,可以通过磁盘数据恢复

坏处:

  • 依然是单点服务,数据恢复的时候需要时间,这个时间长短要看数据大小而定,恢复过程中,服务依然是不可用
  • 非自动化,要手动恢复

主从同步

解决的痛点:多节点备份数据

上面说的持久化,痛点是在故障的时候,还得手动通过磁盘文件恢复。
那么主从同步可以解决这个痛点
具体是这么做的:redis主节点,挂N个从节点,slave节点实时同步master节点的数据,在master挂了的时候,可以立刻把slave提升成为master节点。
因为slave有了master的所有数据,因此可以直接切换,不用从磁盘恢复数据,大大缩短这个恢复时间。

好处:

  • 故障时候,不用从磁盘恢复数据,减短故障时间
  • slave节点一直保持同步,所以数据是最新的,可以直接提升为master
  • 读写分离,master接收写请求,slave接收读请求。

坏处:

  • 如果代码写死了链接master节点,此时切换了slave节点,代码就要更改redis连接配置。解决方案:因此需要设置一个VIP,中间件IP,客户端连接这个VIP即可,VIP后面怎么转发,对代码透明。
  • 非自动切换,需要手动切换,深夜时间无人值班,没发现即时会让故障时间延长。

哨兵模式(Sentinel)

解决的痛点:自动故障转移

出故障的时候可能夜晚,又必须要精通的运维才能快速搞定,否则一定崩了,影响服务和用户。
有了主从同步,数据得以备份,以备故障的时候可以容器。但是这个故障切换要手动操作,哨兵模式就是解决这个痛点:自动转移故障

工作原理:
sentinel哨兵也是一个集群,而且是独立于redis集群的一个服务。
因此哨兵是多个节点的,他的本质原理就是,每个哨兵每秒定时发送ping给master,等master回应
如果回应正常,那没问题
如果回应超时,那就需要关注。但是超时也有可能很多原因,比如网络不通畅、偶发的丢包等等。
假设有3个哨兵:
如果只有一个哨兵得不到回应,他会标识master 主观下线,即只是他自己认为master下线了
但另外两个哨兵是正常的,那就说明master没有真的下线,可能只是哨兵1网络问题

这样就有个好处,必须要多数哨兵认为master下线了,才会切换主从。
哨兵自己认为master挂了,这种叫主观下线
半数以上哨兵认为master挂了,他们通过互相信息同步,就认为master是客观下线
这个时候,就需要走主从切换流程了

主从切换原理:
正常情况下,多个slave配置,都配置了slaveof master
如果master被哨兵认为客观下线了,此时就要进行一次“投票”,从slave里面选出新的master。
具体就是修改配置文件、重启服务,这几个操作的自动化

简化理解
其实就好比平常工作中,写了个脚本,定时扫描漏单之类的,这个定时脚本也要高可用,所以就部署在多个接口机上。
然后脚本定时探测一下master是否正常,多数发现不正常了,就触发自动更换配置文件,reload服务。
就是这么个道理

问题
问题1. 如果代码写死链接的masterip, 这样切换了,代码还得发版上线才能生效,所以代码不能这么说傻叉写死一个IP。
解决:需要有一个类似中间件的组件,来做这个事。比如mysql就有个中间件,端口就是127.0.0.1:9981服务,后面转发到redis真实IP 。当然故障切换后,这个中间件得知道master是谁了。这个也是可以通过下发配置通知的?

问题:还是客户端直接访问的sentinel ? sentinel担任起中间件的角色?因为它知道master和slave具体信息

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

推荐阅读更多精彩内容