当前位置:网站首页>Redis数据丢失问题
Redis数据丢失问题
2022-07-23 14:59:00 【抓手】
常见Redis数据丢失的情况
- DBA/RD误操作执行flushall/flushdb这类命令。
- 过期键被删除。
- 淘汰策略删除数据。
- 因客户端缓冲区内存使用过大,导致大量键被LRU淘汰。
- 主库故障后自动重启,可能导致数据丢失。
- 网络分区的问题,可能导致短时间的写入数据丢失。
- 异步复制导致的数据丢失。
- 脑裂导致的数据丢失。
因客户端缓冲区内存使用过大,导致大量键被LRU淘汰
客户端缓冲区的内存大小很难限制,它们消耗的内存数会计算在used_memory内;如果使用不当,导致缓冲区内存使用过大,达到maxmemory限制;(缓存场景)会导致大量的键被淘汰,最坏会把所有键清理,缓冲无键可淘汰,写入失败。相当于整个缓冲失效,对业务影响较大。
主库故障后自动重启,可能导致数据丢失。
时间点T1,主库故障关闭了,因设置有自动重启的守护程序,时间点T2主库被重新拉起,因(T2-T1)时间间隔过小,未达到Redis集群或哨兵的主从切换判断时长;这样从库发现主库runid变了或断开过,会全量同步主库rdb清理,并清理自己的数据。而为保障性能,Redis主库往往不做数据持久化设置,那么时间点T2启动的主库,很有可能是个空实例(或很久前的rdb文件)。这种问题发生时间间隔,一般小于1分钟,可能监控告警无法感知到。
网络分区的问题,可能导致短时间的写入数据丢失。
这种问题出现丢失数据都很少,网络分区时,Redis集群或哨兵在判断故障切换的时间窗口,这段时间写入到原主库的数据,5秒~15秒的写入量。
异步复制导致的数据丢失。
因为master->slave的复制是异步的,所以可能有部分数据还没复制到slave,master就宕机了,此时这些部分数据就丢失了。
脑裂导致的数据丢失。
某个master所在机器突然脱离了正常的网络,跟其他slave机器不能连接,但是实际上master还运行着。此时哨兵可能就会认为master宕机了,然后开启选举将其他slave切换成了master。集群里就会有两个master,也就是所谓的脑裂。
此时虽然某个slave被切换成了master,但是可能client还没来得及切换到新的master,还继续写向旧master的数据可能也丢失了。因此旧master再次恢复的时候,会被作为一个slave挂到新的master上去,自己的数据会清空,重新从新的master复制数据。
解决方案:
通过在redis.conf配置控制同步时间减少数据丢失.
# 要求至少有1个slave,数据复制和同步延迟不能超过10秒
min-slaves-to-write 1
# 如果说一旦所有的slave,数据复制和同步的延迟都超过了10秒钟,那么master就会拒绝接收任何请求
min-slaves-max-lag 10边栏推荐
- @Will multiple bean instances be created by multiple method calls of bean annotations
- Thread pool, who am I? Where am I?
- 面试官:MySQL 数据库查询慢,除了索引问题还可能是什么原因?
- [pytorch] basic use 7. GPU allocation
- KV260单板PS控制设置IIC开关芯片
- wsus可以打mysql中间件补丁_加入WSUS补丁服务器并下载补丁
- 乘风破浪!金融科技时代下的数字化转型之路
- 来自某学生的求助,干了,闲暇能帮就帮一把!
- 食品安全|喝鲜奶可能感染结核病?带你了解什么是牛奶灭菌
- LeetCode_455_分发饼干
猜你喜欢

封玩家IP和机器码以及解开被封的教程

Unity production QR code scanning

At least half of the people can't answer the difference between isempty and isblank

Kubernetes 聚焦Kubelet职责

Interviewer: what is the possible reason for the slow query of MySQL database besides the index problem?

Encapsulate the general connection and query of the project with pymysql

基于策略路由部署的网络多出口设计研究与实现

KV260单板PS控制设置IIC开关芯片

Kubernetes focuses on kubelet's responsibilities

How to refine the operation of small program mall?
随机推荐
SAP HANA数据库备份失败解决办法
[pytorch] basic use 7. GPU allocation
Emgu CV3+C#图像处理(四):使用EmguCV获取摄像头、读取视频
[flask advanced] deeply understand the endpoint of flask routing from the source code
Pymoo learning (1): basic concepts
Log slimming operation: from 5g to 1g!
Differences between nvisual generic cabling management software and network management software
59. General knowledge of lightning safety
Preliminary understanding of string
OpenIM重大优化-消息按需加载 一致性缓存 uniapp发布
元素内容必须由格式正确的字符数据或标记组成
乘风破浪!金融科技时代下的数字化转型之路
Geometric parametric reconstruction
js工具 cecp
Software configuration | pychart download, installation, environment configuration and uninstall
Kubernetes kubelet manages pod core process
Program environment and pretreatment
Opencv finding the intersection of two regions
Explain SQL optimization in detail
程序环境和预处理