当前位置: 首页 > news >正文

ZooKeeper应用——解决分布式系统单点故障

1.单点故障问题

什么是分布式系统中的单点故障:通常分布式系统采用主从模式,就是一个主控机连接多个处理节点。主节点负责分发任务,从节点负责处理任务,当我们的主节点发生故障时,那么整个系统就都瘫痪了,那么我们把这种故障叫作单点故障。

传统方式是采用一个备用节点,这个备用节点定期给当前主节点发送ping包,主节点收到ping包以后向备用节点发送回复Ack ,当备用节点收到回复的时候就会认为当前主节点还活着,让他继续提供服务。如下图所示:
复制代码

图片描述(最多50字)

但是这种方式就是有一个隐患,就是网络问题 ,来看一网络问题会造成什么后果。
复制代码

图片描述(最多50字)

也就是说 我们的主节点的并没有挂,只是 在回复的时候网络发生故障,这样我们的备用节点同样收不到回复,就会认为主节点挂了 , 然后备用节点将他的Master实例启动起来,这样我们的分布式系统当中就有了两个主节点也就是---双Master , 出现双Master以后我们的从节点就会将它所做的事一部分汇报给了主节点,一部分汇报给了备用节点,这样服务就全乱了。 为了防止出现这种情况,我们引入了 ZooKeeper,它虽然不能避免网络故障,但它能够保证每时每刻只有一个Master。

2.ZooKeeper解决方案

在引入了Zookeeper以后,我们启动了两个主节点, "主节点-A"和"主节点-B"他们启动以后,都向ZooKeeper去注册一个节点 。 我们 假设"主节点-A"锁注册地节点是"master-00001","主节点-B"注册的节点是"master-00002", 注册完以后进行选举,编号最小的节点将在选举中获胜获得锁成为主节点 ,也就是我们的"主节点-A"将会获得锁成为主节点,然后"主节点-B"将被阻塞成为一个备用节点。那么,用这种方式就完成了对两个Master进程的调度。
复制代码

图片描述(最多50字)

如果"主节点-A"挂了,这时候他所注册的节点将被自动删除, ZooKeeper会自动感知节点的变化,然后再次发出选举,这时候"主节点-B"将在选举中获胜,替代"主节点-A"成为主节点。

图片描述(最多50字)

3.Master 恢复
复制代码

图片描述(最多50字)

如果主节点恢复了,他会再次向ZooKeeper注册一个节点,这时候他注册的节点将会是 "master-00003" , ZooKeeper会感知节点的变化再次发动选举 ,这时候"主节点-B"在选举中会再次获胜继续担任"主节点","主节点-A"会担任备用节点。

欢迎工作一到五年的Java工程师朋友们加入Java架构开发: 855835163 群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

相关文章:

  • 扩展rocketMQ延迟等级
  • echarts花样作死的坑
  • 那些年让你迷惑的阻塞、非阻塞、异步、同步
  • Cloudopt-logger — Kotlin 实现的日志框架扩展
  • Linux日记本_04:阿里云ECS服务器(CentOS7)端口设置以及 MySQL数据库搭建
  • [js]- 两个对象的合并(Object.assign)
  • 火币交易细则
  • 阿里云服务器配置过程
  • redirectTo、navigateTo与switchTap区别
  • python3 猜数字小游戏2.0
  • python函数式编程一
  • .NET性能优化(文摘)
  • CentOS 7.5 运维之路之网络配置
  • Linux日志分析详解
  • 高德地图大批量数据(上万)画历史轨迹实现方案
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • CentOS 7 防火墙操作
  • Docker下部署自己的LNMP工作环境
  • download使用浅析
  • github从入门到放弃(1)
  • HTML-表单
  • Transformer-XL: Unleashing the Potential of Attention Models
  • VUE es6技巧写法(持续更新中~~~)
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • vue总结
  • 批量截取pdf文件
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 入口文件开始,分析Vue源码实现
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • elasticsearch-head插件安装
  • (13):Silverlight 2 数据与通信之WebRequest
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (HAL库版)freeRTOS移植STMF103
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (转)h264中avc和flv数据的解析
  • (转)jdk与jre的区别
  • (转)可以带来幸福的一本书
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • . Flume面试题
  • .Mobi域名介绍
  • .net wcf memory gates checking failed
  • .net 中viewstate的原理和使用
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • @RequestParam详解
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [1127]图形打印 sdutOJ
  • [ai笔记4] 将AI工具场景化,应用于生活和工作
  • [BUUCTF 2018]Online Tool
  • [echarts] y轴不显示0
  • [EMWIN]FRAMEWIN 与 WINDOW 的使用注意
  • [hdu 3065] 病毒侵袭持续中 [AC自动机] [病毒特征码匹配]