Redis哨兵主备切换的数据丢失问题

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis哨兵主备切换的数据丢失问题

数据丢失的场景

主备切换的过程,可能会导致数据丢失

  • 异步复制
    由于 M => R的复制是异步的,所以可能有部分数据还没复制到R,M就宕机,于是这些数据就丢失了
  • 脑裂
    某M所在节点突然脱离正常的网络,无法和其他slave机器连接,但实际上master还运行着


此时哨兵可能就会认为M宕机了,然后开启选举,将其他S切换成M。这时,集群里就会有两个M-脑裂


此时虽然某个slave被切换成了master,但是可能client还没来得及切换到新的master,还继续写向旧master的数据可能也丢失了


因此旧master再次恢复时,会被作为一个slave挂到新的master上去,自己的数据会被清空,重新从新的master复制数据


image.png

数据丢失的解决方案

如下配置可以减少异步复制和脑裂导致的数据丢失

min-slaves-to-write 1
min-slaves-max-lag 10

配置要求至少有1个slave,数据复制和同步的延迟不能超过10秒

一旦所有的slave,数据复制和同步的延迟都超过了10秒钟,master就不再接收任何请求!

2.1 异步复制数据丢失解决方案

min-slaves-max-lag 配置

即可确保,一旦slave复制数据和ack延时过长,就认为可能master宕机后损失的数据太多了,那么就拒绝写请求

这样就可把master宕机时由于部分数据未同步到slave导致的数据丢失降低在可控范围

image.png

2.2 脑裂数据丢失解决方案

若一个master出现了脑裂,跟其他slave失去连接,那么开始的两个配置可以确保

若不能继续给指定数量的slave发送数据,而且slave超过10秒没有给自己ack消息,那么就直接拒绝客户端的写请求


这样脑裂后的旧master就不会接受client的新数据,也就避免了数据丢失


上面的配置就确保了,如果跟任何一个slave丢了连接,在10秒后发现没有slave给自己ack,那么就拒绝新的写请求


因此在脑裂场景下,最多就丢失10秒的数据


image.png

image.png


目录
相关文章
|
8月前
|
缓存 NoSQL Redis
Redis原理—3.复制、哨兵和集群
详细介绍了Redis的复制原理、哨兵原理和集群原理。
|
存储 NoSQL Redis
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
Redis持久化、RDB和AOF方案、Redis主从集群、哨兵、分片集群、散列插槽、自动手动故障转移
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
|
监控 NoSQL 算法
Redis Sentinel(哨兵)详解
Redis Sentinel(哨兵)详解
475 4
|
运维 监控 NoSQL
【Redis】哨兵(Sentinel)原理与实战全解~炒鸡简单啊
Redis 的哨兵模式(Sentinel)是一种用于实现高可用性的机制。它通过监控主节点和从节点,并在主节点故障时自动进行切换,确保集群持续提供服务。哨兵模式包括主节点、从节点和哨兵实例,具备监控、通知、自动故障转移等功能,能显著提高系统的稳定性和可靠性。本文详细介绍了哨兵模式的组成、功能、工作机制以及其优势和局限性,并提供了单实例的安装和配置步骤,包括系统优化、安装、配置、启停管理和性能监控等。此外,还介绍了如何配置主从复制和哨兵,确保在故障时能够自动切换并恢复服务。
|
缓存 NoSQL 网络协议
【Azure Redis 缓存】Azure Redis 遇见的连接不上问题和数据丢失的情况解答
【Azure Redis 缓存】Azure Redis 遇见的连接不上问题和数据丢失的情况解答
|
监控 NoSQL Java
redis哨兵架构
不过为了高可用一般都推荐至少三个哨兵节点。为什么推荐奇数个哨兵节点跟集群奇数个master节点类似。
132 0
redis哨兵架构
|
NoSQL Redis C++
c++开发redis module问题之对于写命令,进行主备复制和写AOF,如何解决
c++开发redis module问题之对于写命令,进行主备复制和写AOF,如何解决
|
消息中间件 监控 NoSQL
Redis哨兵改集群
【7月更文挑战第7天】
145 0
|
缓存 NoSQL Redis
Redis复制、哨兵
Redis复制、哨兵
100 0

热门文章

最新文章