1 数据丢失的两个场景

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

1.1 异步复制

由于 master => slave的复制是异步的,所以可能有部分数据还没复制到slave,master就宕机,于是这些数据就丢失了

1.2 脑裂导致

脑裂,也就是说,某个master所在节点突然脱离正常的网络,无法和其他slave机器连接,但实际上master还运行着

此时哨兵可能就会认为master宕机了,然后开启选举,将其他slave切换成了master

这个时候,集群里就会有两个master,也就是所谓的脑裂

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

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

2 数据丢失的解决方案

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

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导致的数据丢失降低在可控范围

2.2 脑裂数据丢失解决方案

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

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

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

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

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

参考

《Java工程师面试突击第1季-中华石杉老师》

欢迎关注全是硬核干货的公众号:JavaEdge

redis 哨兵 异步_突破Java面试(23-8) - Redis哨兵主备切换的数据丢失问题-阿里云开发者社区...相关推荐

  1. java 通过redis实现倒计时_突破Java面试(42) - Redis amp; ZooKeeper两种分布式锁实现的优劣...

    0 Github 1 面试题 一般实现分布式锁都有哪些方式?使用redis如何设计分布式锁?使用zk来设计分布式锁可以吗?这两种分布式锁的实现方式哪种效率比较高? 2 考点分析 一般先问问你zk,然后 ...

  2. java redis 重连_突破Java面试(23-4) - Redis 复制原理

    全是干货的技术号: 本文已收录在github,欢迎 star/fork: 在Redis复制的基础上(不包括Redis Cluster或Redis Sentinel作为附加层提供的高可用功能),使用和配 ...

  3. python的requests模块功能_《Python数据可视化编程实战》—— 1.7 安装requests模块-阿里云开发者社区...

    本节书摘来异步社区<Python数据可视化编程实战>一书中的第1章,第1.7节,作者:[爱尔兰]Igor Milovanović,更多章节内容可以访问云栖社区"异步社区" ...

  4. python预测实例教程_手把手教你用Python库Keras做预测(附代码)-阿里云开发者社区...

    当你在Keras中选择好最合适的深度学习模型,就可以用它在新的数据实例上做预测了.但是很多初学者不知道该怎样做好这一点,我经常能看到下面这样的问题: "我应该如何用Keras对我的模型作出预 ...

  5. jfinal mysql读写分离_在JFinal中对数据库读写分离的实现:报错 -问答-阿里云开发者社区-阿里云...

    频繁使用 use(configName) 没有任何性能问题,仅仅是为变量赋一个 string 值而已,完全可以忽略######@JFinal######我现在也使用,读用的是视图model,写操作使用 ...

  6. mysql sqlserver 函数_等价于MySQL中的SQLServer函数SCOPE_IDENTITY()??mysql-问答-阿里云开发者社区-阿里云...

    这是您要寻找的: LAST_INSERT_ID() 为了回应OP的评论,我创建了以下基准测试: CREATE TABLE Foo ( FooId INT AUTO_INCREMENT PRIMARY ...

  7. typescript索引类型_复杂场景下的 typescript 类型锚定 (1) ----- 对象索引提取-阿里云开发者社区...

    前言:在编写 typescript 应用的时候,有时候我们会希望复用或者构造一些特定结构的类型,这些类型只从 typescript 靠内建类型和 interface.class 比较难以表达,这时候我 ...

  8. css textarea行数_超级简单:在一个TextArea中如何限制行数和字符数-阿里云开发者社区...

    在网上,已经有很多关于在一个textbox限制允许的字符数量.但是如果需要,在textbox中如何去统计和限制行数呢.这里有一个解决方案,使用客户端的Javascript去限制TextArea的内容为 ...

  9. deglitch 技术_面向前端设计的DFT基础介绍(一)——MBIST存储器内建自测试-阿里云开发者社区...

    前言--芯片由MPW试产进入量产阶段的时候,DFT可测性设计是前后端设计者都无法绕过的必修课.DFT的设计,既属于芯片功能设计的范畴,又对后端的设计流程有显性的影响. 前端设计者需要理解: DFT可测 ...

最新文章

  1. linux下的daemon进程
  2. centos7 mysql 5.6.38_centos7.4 安装mysql 5.6.38
  3. 单调递增最长子序列 - 从最长公共子序列到单调递增最长子序列
  4. http://jingyan.baidu.com/article/dca1fa6fa07000f1a44052f6.html
  5. Java 9 中的9个新特性
  6. Introduce Parameter Object(引入参数对象)
  7. LAB Color Space
  8. Linux下查看CPU使用率 --- top命令的使用
  9. cdt规约报文用程序解析_用 Python 撸一个 Web 服务器第3章:使用 MVC 构建程序
  10. python中math函数库矩阵_Python中矩阵库Numpy基本操作详解
  11. MAX脚本发送贴图的另外一个方式
  12. [原创] 若水新闻安卓客户端开发教程笔记
  13. Ajax 学习(一)
  14. 浏览器网页操作 EXCEL 示例
  15. TwinCAT软件编码器参数介绍
  16. 精选机器学习深度学习视频资源合集 !(附下载链接)
  17. 【SAMF】A Scale Adaptive Kernel Correlation Filter Tracker with Feature Integration 论文阅读笔记
  18. Visio2016中图标的查找
  19. python浏览器怎么设置_如何用python控制浏览器
  20. java用代码实现星期菜谱,基于jsp的家庭食谱管理-JavaEE实现家庭食谱管理 - java项目源码...

热门文章

  1. 计算机数学基础模拟试题,计算机数学基础(A)模拟试题.doc
  2. micropython lcd触摸屏显示中文_基于Micropython的天气显示 进程帖
  3. 网络资产管理系统_固定资产管理系统的常用操作
  4. 超几何分布_常见概率分布
  5. UE4 获得player id
  6. 在 WinCe 平台读写 ini 文件
  7. 交易机项目工作日志--2013-01-30
  8. 电脑怎么结束进程_深刻了解windows系统的任务管理器,电脑高手的成长之路
  9. python博客下载本地文件_解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了...
  10. arcgis缓冲后在envi中聚类出错