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

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

时间:2024-12-28 11:27:11浏览次数:3  
标签:Slave Redis 问题 脑裂 Master 腾讯 节点

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

脑裂问题影响

Redis 脑裂问题会导致数据丢失,为什么呢?来看脑裂问题产生的过程:
在这里插入图片描述
而最后一步,当旧的 Master 变为 Slave 之后,它的执行流程如下:

Slave(旧 Master)会向 Master(新)申请全量数据。
Master 会通过 bgsave 的方式生成当前 RDB 快照,并将 RDB 发送给 Slave。
Slave 拿到 RDB 之后,先进行 flush 清空当前数据(此时第四步旧客户端给他的发送的数据就丢失了)。
之后再加载 RDB 数据,初始化自己当前的数据。
从以上过程中可以看出,在执行到第三步的时候,原客户端在旧 Master 写入的数据就丢失了,这就是数据丢失的问题。

如何解决脑裂问题?

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

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

min-slaves-to-write:与主节点通信的从节点数量必须大于等于该值主节点,否则主节点拒绝写入。
min-slaves-max-lag:主节点与从节点通信的 ACK 消息延迟必须小于该值,否则主节点拒绝写入。
这两个配置项必须同时满足,不然主节点拒绝写入。

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

课后思考

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

标签:Slave,Redis,问题,脑裂,Master,腾讯,节点
From: https://blog.csdn.net/gyf200708/article/details/144785659

相关文章

  • linux中,redis哨兵和数据持久化存储
    redis哨兵:"主从同步增强架构","读写分离","高可用" 1.概念 是Redis主从同步的增强架构,可以实现Redis主从同步的读写分离和高可用 2.特性: 1、可以承接客户端连接,但不存储数据 2、实现Redis主从复制组的监控 3、实现Redis主从的读写分离 4、Redis主从复制组的故......
  • Redis-十大数据类型
    Reids数据类型指的是value的类型,key都是字符串redis-server:启动redis服务redis-cli:进入redis交互式终端常用的key的操作redis的命令和参数不区分大小写,key和value区分1、查看当前库所有的keykeys*2、判断某个key是否存在existskey3、查看key是什么类型......
  • Redis可视化工具推荐:Another Redis Desktop Manager使用教程与下载
    Redis是一种高性能的Key-Value数据库,被广泛应用于缓存、消息队列等场景。尽管Redis的命令行工具功能强大,但对于许多开发者而言,使用一款可视化工具可以大大提高操作效率和用户体验。今天为大家推荐一款功能强大的Redis可视化工具——AnotherRedisDesktopManager,并提供资源......
  • redis缓存穿透和 缓存雪崩
    在使用Redis作为缓存系统时,缓存穿透(CachePenetration)和缓存雪崩(CacheAvalanche)是两种常见的问题。它们会影响缓存系统的性能和稳定性。以下是这两种问题的详细解释及其解决方法。缓存穿透(CachePenetration)缓存穿透是指查询一个在缓存和数据库中都不存在的数据,导致请求直接......
  • 【Redis Zset】Redis Zset多字段排序方案设计
    背景最近拿到多个排行榜相关的需求,按财富值,魅力值等单个或多个字段进行排序默认取前N条数据,考虑使用Redis进行排行榜实现,数据结构使用zset,本文对财富值和魅力值二个或多个字段排序的思路进行说明; 需求背景排行榜,按财富值和魅力值进行倒序排序,优先财富值排序,财富值相同则取魅......
  • 日志文件爆满_开发脚本每小时自动检测日志大小_定期清理日志_生产环境redis宕机_无法
     今天日志数据占用磁盘爆满,正常运行的系统发生,redis无法写入的报错,导致共用的redis服务器,瘫痪了,很多系统都进不去了. 最后查了一下才知道,是因为磁盘上一个日志文件170多GB了,都是日志.看看怎么处理:首先编写一个脚本,用来循环检测,每一个小时检测文件大小,如果超过......
  • Redis篇--应用篇1--会话存储(session共享)
    1、概述实现Session共享是构建分布式Web应用时的一个重要需求,尤其是在水平扩展和高可用性要求较高的场景下。在分布式服务或集群服务中往往会出现这样一个问题:用户登录A服务后可以正常访问A服务中的接口。但是我们知道,分布式服务通常都是有多个微服务一起构建形成的。如果......
  • (九).NET6.0搭建基于Redis的Hangfire定时器
    1.首先创建新的类库项目Wsk.Core.Hangfire,然后在Wsk.Core.Package包项目下引用hangfire有关的组件,包括Hangfire、Hangfire.Core、Hangfire.Redis、Hangfire.Redis.StaskExchange2.在配置文件新增基于redis的hangfire的数据库连接3.在Wsk.Core.Hangfire项目下,新增Hangfire连......
  • (八).NET6.0添加通用的Redis功能
    1.添加包:StackExchange.Redis2.在配置文件里面,新建Redis的有关配置信息Name是别名,可以任意起。Ip是Redis的服务端地址,例如安装本地,就是127.0.0.1,端口号Port默认是6379,密码可以通过Redis安装的根目录下的配置文件进行设置,Timeout是连接的超时时间,Db是使用Redis的DB区,一般Redis......
  • PHP语言laravel框架中基于Redis的异步队列使用实践与原理
    在Laravel中,基于Redis的异步队列是通过Laravel的队列系统与Redis服务结合来实现的。这种队列机制允许你将任务推送到队列中,并由后台工作进程异步处理这些任务。这样,你就可以将耗时的操作(如发送邮件、处理视频、数据同步等)推迟到后台处理,从而提高应用的响应速度。###1......