说说Redis主从的脑裂行为,你看懂了吗?

知识2025-11-05 12:59:415

前言

大家好,说说我是脑裂田螺。

分享一道大厂面试真题:说说redis主从的看懂脑裂?

我们可以按照这几个维度来回答:

什么是脑裂行为主从集群中为什么会发生脑裂?脑裂为什么又会导致数据丢失呢?我们该如何避免和应对脑裂的发生呢?

1. 什么是脑裂

什么是脑裂行为?

脑裂(Split-Brain)是指在分布式系统中,网络分区导致多个节点之间失去联系,说说形成了两个或多个独立的脑裂“脑”,每个脑都认为自己是看懂主节点,导致数据写入的说说冲突和不一致。

图片

在 Redis 的脑裂主从架构中,如果主节点和从节点因网络故障或其他原因失去联系,看懂哨兵开始选举了新的说说主节点,而旧的脑裂主节点恢复过来继续接受写请求,也就是看懂存在两个redis主节点了,这就是说说redis的脑裂行为。

2. 主从集群中为什么会发生脑裂?脑裂

脑裂行为在Redis主从集群中可能发生的原因,主要包括以下几点:

图片

网络故障:在网络故障或不稳定的看懂情况下,主节点与哨兵或从节点之间的亿华云计算通信可能会中断。这时,哨兵可能会误认为主节点已宕机。哨兵的选举机制:当哨兵无法与主节点通信时,会启动选举过程,从现有的从节点中选出一个新的主节点。如果此时网络恢复,主节点仍在运行,就会导致出现两个主节点。假故障: 哨兵的故障转移策略在网络异常时会过于敏感,容易在错误的情况下进行主节点的选举。也就是因为假故障导致又多选一个主节点出来。

3. 脑裂为什么又会导致数据丢失呢?

Redis的主从切换后,一旦从库被提升为新的主库,哨兵会指示原主库去执行主从复制命令,以便与新主库进行全量同步数据。最后在全量同步的阶段的话,原主库需要清除本地数据,加载来自新主库的RDB文件(我们知道,redis主从同步是基于rdb文件的云服务器提供商)。这就会导致在主从切换期间,原主库接收的新写数据会丢失啦。

还是上个简单的图,方便大家理解吧:

图片

上图,大家可以发现:

当旧的主库因为假死(假故障) 的原因,导致哨兵开始选举新的主库。在选举新主库期间,旧的主库莫名奇妙又好了,它可以继续接受写入的请求了。然后新主库选好了,就有两个主库在同时处理写请求啦。等到新主库选好之后,旧的主库就变成从库了,它需要从新的主库那里同步数据过来,这样一来,在切换期间,旧主库保存的数据就丢失啦。

4. 我们该如何避免/应对脑裂的发生呢?

为了避免脑裂的发生,我们尝试这些方法:

图片

使用 Quorum 配置:确保哨兵数量为奇数,网站模板并设定适当的投票规则,以减少误判的可能性。合理设置超时参数:调整哨兵的 down-after-milliseconds 和 failover-timeout 参数,以适应实际网络环境,减少误判。网络隔离与监控:确保网络稳定,监控网络状态和延迟,以便在问题出现时及时处理。引入代理层:使用代理(如 Codis)来管理客户端与 Redis 的连接,避免直接连接导致的脑裂。

还有个比较推荐的方式,那就是min-slaves-to-write 和 min-slaves-max-lag 这两个参数,可以有效减少 Redis 脑裂的风险

min-slaves-to-write:该参数设置在执行写操作时,至少需要有多少个从节点在线并且处于同步状态。如果在线的从节点数量低于此值,主节点将拒绝写入请求,从而避免在不一致的情况下进行写操作。min-slaves-max-lag:这个参数定义了允许的最大复制延迟(以秒为单位)。如果从节点的复制延迟超过此阈值,主节点将不会考虑这些从节点为有效,从而减少因落后节点引起的数据不一致问题。
本文地址:http://www.bhae.cn/html/069f7699854.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

热门文章

全站热门

深度解析IntelHM70(探索HM70处理器的关键特性和市场前景)

那些被低估的Python库

python数据挖掘常用工具有哪几种?

COVID-19将如何影响医疗市场中的增强现实(AR)?

LVM是Logical Volume Manager(逻辑卷管理器)的简写,又译为逻辑卷宗管理器、逻辑扇区管理器、逻辑磁盘管理器。是Linux核心所提供的逻辑卷管理(Logical Volume Management)功能。它在硬盘的硬盘分区之上,又创建了一个逻辑层以方便系统管理硬盘分区系统。最早由IBM开发,在AIX系统上实现,OS/2操作系统与HP-UX也支持这个功能;在1998年,Heinz Mauelshagen根据HP-UX上的逻辑卷管理器,写作出第一个Linux版本的逻辑卷管理器;并将其发布到Linux社区中,它允许用户在Linux系统上用简单的命令行管理一个完整的逻辑卷管理环境。LVM的优点:它是建立在物理存储设备之上的一个抽象层,允许用户生成逻辑存储卷,与直接使用物理存储在管理上相比,提供了更好灵活性;LVM将存储虚拟化,使用逻辑卷,用户不会受限于物理磁盘的大小;另外,与硬件相关的存储设置被器隐藏,用户可以不用停止应用或卸载文件系统来调整卷大小或数据迁移,可以减少操作成本。LVM与直接使用物理存储相比,有以下优点:1、  灵活的容量当使用逻辑卷时,文件系统可以扩展到多个磁盘上,你可以聚合多个磁盘或磁盘分区成单一的逻辑卷.2、  可伸缩的存储池;你可以使用简单的命令来扩大或缩小逻辑卷大小,不用重新格式化或分区磁盘设备.3、  在线的数据再分配你可以在线移动数据,数据可以在磁盘在线的情况下重新分配.比如,你可以在线更换可热插拔的磁盘.4、  方便的设备命名;逻辑卷可以按你觉得方便的方式来起任何名称.5、  磁盘条块化你可以生成一个逻辑盘,它的数据可以被条块化存储在2个或更多的磁盘上.这样可以明显提升数据吞吐量.6、  镜像卷逻辑卷提供方便的方法来镜像你的数据.7、  卷快照使用逻辑卷,你可以获得设备快照用来一致性备份或者测试数据更新效果而不影响真实数据.2.版本:LVM1 最初的LVM与1998年发布,只在Linux内核2.4版本上可用,它提供最基本的逻辑卷管理。LVM2 LVM-1的更新版本,在Linux内核2.6中才可用,它在标准的LVM-1功能外还提供了额外的功能。查看版本:复制代码代码如下:复制代码代码如下:复制代码代码如下:逻辑卷的创建,就是将多块硬盘创建物理卷,而将这些物理卷以逻辑的形式总成一个容器,然后从这个容器里面创建大小不同的分区文件,而这个容器就是所谓的卷组(VG),而从这个容器里创建大小不同的分区文件,这个分区文件就叫做逻辑卷。LVM实现逻辑卷镜像2、将sdb、sdc、sdd、sde 创建物理卷,将sdb、sdc、sdd 添加卷组到vmTest复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下: 复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:[root@node4 lvmTest]#[root@node4 lvmTest]# lvdisplay --- Logical volume --- LV Path                /dev/vgTest/lvTest LV Name                lvTest VG Name                vgTest LV UUID                a8kDmI-R3ls-SfKJ-qx3d-1Tbb-wPAd-TJcQfn LV Write Access        read/write LV Creation host, time node4.lansgg.com, 2015-09-10 20:50:41 +0800 LV Status              available # open                1 LV Size                1.00 GiB Current LE            256 Mirrored volumes      2 Segments              1 Allocation            inherit Read ahead sectors    auto - currently set to    256 Block device          253:5

2020年商业领域的十大编程语言

写出更优质的Python代码,12个Python新版本编程技巧都在这里

为什么看到这么多人不推荐C++?

热门文章

友情链接

滇ICP备2023000592号-9