首页 > 数据库 >腾讯音乐:说说Redis脑裂问题?

腾讯音乐:说说Redis脑裂问题?

时间:2024-04-17 20:55:07浏览次数:31  
标签:Slave Redis 问题 脑裂 Master 腾讯 节点

Redis 脑裂问题是指,在 Redis 哨兵模式或集群模式中,由于网络原因,导致主节点(Master)与哨兵(Sentinel)和从节点(Slave)的通讯中断,此时哨兵就会误以为主节点已宕机,就会在从节点中选举出一个新的主节点,此时 Redis 的集群中就出现了两个主节点的问题,就是 Redis 脑裂问题。

脑裂问题影响

Redis 脑裂问题会导致数据丢失,为什么呢?来看脑裂问题产生的过程:
Redis脑裂问题.drawio.png
而最后一步,当旧的 Master 变为 Slave 之后,它的执行流程如下:

  1. Slave(旧 Master)会向 Master(新)申请全量数据。
  2. Master 会通过 bgsave 的方式生成当前 RDB 快照,并将 RDB 发送给 Slave。
  3. Slave 拿到 RDB 之后,先进行 flush 清空当前数据(此时第四步旧客户端给他的发送的数据就丢失了)。
  4. 之后再加载 RDB 数据,初始化自己当前的数据。

从以上过程中可以看出,在执行到第三步的时候,原客户端在旧 Master 写入的数据就丢失了,这就是数据丢失的问题。

如何解决脑裂问题?

脑裂问题只需要在旧 Master 恢复网络之后,切换身份为 Slave 期间,不接收客户端的数据写入即可,那怎么解决这个问题呢?

Redis 为我们提供了以下两个配置,通过以下两个配置可以尽可能的避免数据丢失的问题:

  • min-slaves-to-write:与主节点通信的从节点数量必须大于等于该值主节点,否则主节点拒绝写入。
  • min-slaves-max-lag:主节点与从节点通信的 ACK 消息延迟必须小于该值,否则主节点拒绝写入。

这两个配置项必须同时满足,不然主节点拒绝写入。

在假故障期间满足 min-slaves-to-write 和 min-slaves-max-lag 的要求,那么主节点就会被禁止写入,脑裂造成的数据丢失情况自然也就解决了。

课后思考

设置了参数之后,Redis 脑裂问题能完全被解决吗?为什么?Zookeeper 有脑裂问题吗?它是如何解决脑裂问题的?

本文已收录到我的面试小站 www.javacn.site,其中包含的内容有:Redis、JVM、并发、并发、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、设计模式、消息队列等模块。

标签:Slave,Redis,问题,脑裂,Master,腾讯,节点
From: https://www.cnblogs.com/vipstone/p/18141767

相关文章

  • docker部署redis
    拉取镜像dockerpullredis:6.2.6创建映射目录和文件mkdir-p/data/server/docker_redis/data官网下载对应版本redis.conf,放在/data/server/docker_redis/目录下运行redisdockerrun-d-p6379:6379--name=redis--privileged=true-v/data/server/docker_redis/redis.c......
  • redis自学(36)散列插槽
    散列插槽Redis会把每一个master节点映射到0~16383共16284个插槽(hashslot)上,查看集群信息时就能看到:  数据key不是与节点绑定,而是与插槽绑定。Reids会根据key的有效部分计算插槽值,分两种情况:l Key中包含“{}”,且“{}”中至少包含1个字符,“{}”中的部分是有效部分l Key中......
  • 基于Redis实现基本抢红包算法
    简介:[key,value]的缓存数据库,Redis官方性能描述非常高,所以面对高并发场景,使用Redis来克服高并发压力是一个不错的手段,本文主要基于Redis来实现基本的抢红包系统设计.发红包模块:1:发红包模块流程图如下:  用户首先输入红包金额和红包个数,然后生成当前红......
  • redis自学(35)搭建分片集群
    分片集群结构主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决:l 海量数据存储问题l 高并发写的问题使用分片集群可以解决上述问题,分片集群特征:l 集群中有多个master,每个master保存不同数据,因此能存多少取决于master节点的数量,解决了海量数据存储的......
  • Redis
      关联知识点(1)关系型数据库、非关系型数据库(2)BSD协议(3)发布/订阅模式(4)Hash散列(5) Lua脚本(6)事件驱动模型参考文献(1)官网地址:https://redis.io/(2)源码地址:https://github.com/redis/redis(3)Redis在线测试:http://try.redis.io/(4)Redis命令参考:http:......
  • redis哨兵模式的原理及部署
    目录一、什么是哨兵模式1、为什么需要哨兵机制2、哨兵架构拓扑3、RedisSentinel的功能:二、搭建哨兵架构1、涉及主机2、拓扑结构3、设置一主两从4、master服务器状态5、编辑哨兵的配置文件6、启动哨兵7、验证哨兵端口8、查看哨兵日志9、验证当前sentinel状态三、故障转移1、redis......
  • RTX 腾讯通停止服务,有哪些平滑升级迁移替代方案?
    RTX腾讯通,作为腾讯公司于2003年推出的企业即时通讯软件,曾经在政企单位中得到广泛应用。然而,自2015年后,这款软件就未曾更新,近期腾讯将RTX腾讯通官网的域名更改为跳转到企业微信官网,这意味RTX腾讯通正式停止服务。尽管如此,由于本地化部署的特点,已安装用户仍可继续使用。但面临授权文......
  • 百度地图 腾讯地图 互转
    //百度坐标转换成腾讯坐标convert2TecentMap(lng,lat){if(lng==''&&lat==''){return{lng:'',lat:''}}varx_pi=3.14159265358979324*3000.0/180.0varx=l......
  • 美团二面:如何保证Redis与Mysql双写一致性?连续两个面试问到了!
    引言Redis作为一款高效的内存数据存储系统,凭借其优异的读写性能和丰富的数据结构支持,被广泛应用于缓存层以提升整个系统的响应速度和吞吐量。尤其是在与关系型数据库(如MySQL、PostgreSQL等)结合使用时,通过将热点数据存储在Redis中,可以在很大程度上缓解数据库的压力,提高整体系统的......
  • Docker容器配置redis集群
    前言Redis集群是一种分布式数据库解决方案,旨在提供高性能、高可用性、可扩展性的数据存储服务。目前比较普遍流行的搭配则是三主三从配置,共6台redis服务进行集群配置。Redis的三主三从配置是一种集群模式,其中包含三个主节点和三个从节点。每个从节点对应一个主节点,当主......