zoukankan      html  css  js  c++  java
  • 8.2.ZooKeeper应用场景

    7、ZooKeeper应用举例 

    为了方便大家理解ZooKeeper,在此就给大家举个例子,看看ZooKeeper是如何实现的他的服务的,我以ZooKeeper提供的基本服务分布式锁为例。

    7.1 分布式锁应用场景

    在分布式锁服务中,有一种最典型应用场景,就是通过对集群进行Master选举,来解决分布式系统中的单点故障。什么是分布式系统中的单点故障:

    通常分布式系统采用主从模式,就是一个主控机连接多个处理节点。主节点负责分发任务,从节点负责处理任务,当我们的主节点发生故障时,那么

    整个系统就都瘫痪了,那么我们把这种故障叫作单点故障。如下图7.1和7.2所示:

    图 7.1 主从模式分布式系统               图7.2 单点故障

        

    7.2 传统解决方案

    传统方式是采用一个备用节点,这个备用节点定期给当前主节点发送ping包,主节点收到ping包以后向备用节点发送回复Ack,当备用节点收到回复的

    时候就会认为当前主节点还活着,让他继续提供服务。如图7.3所示:

    图 7.3 传统解决方案

    当主节点挂了,这时候备用节点收不到回复了,然后他就认为主节点挂了接替他成为主节点如下图7.4所示:

    图 7.4传统解决方案

    但是这种方式就是有一个隐患,就是网络问题,来看一网络问题会造成什么后果,如下图7.5所示:

    图 7.5 网络故障

    也就是说我们的主节点的并没有挂,只是在回复的时候网络发生故障,这样我们的备用节点同样收不到回复,就会认为主节点挂了,然后备用节点

    将他的Master实例启动起来,这样我们的分布式系统当中就有了两个主节点也就是---双Master,出现Master以后我们的从节点就会将它所做的事一

    部分汇报给了主节点,一部分汇报给了从节点,这样服务就全乱了。为了防止出现这种情况,我们引入了ZooKeeper,它虽然不能避免网络故障,

    但它能够保证每时每刻只有一个Master。我么来看一下ZooKeeper是如何实现的。

    7.3 ZooKeeper解决方案

    (1) Master启动

    在引入了Zookeeper以后我们启动了两个主节点,"主节点-A"和"主节点-B"他们启动以后,都向ZooKeeper去注册一个节点。我们假设"主节点-A"锁

    注册地节点是"master-00001","主节点-B"注册的节点是"master-00002",注册完以后进行选举,编号最小的节点将在选举中获胜获得锁成为主节点

    ,也就是我们的"主节点-A"将会获得锁成为主节点,然后"主节点-B"将被阻塞成为一个备用节点。那么,通过这种方式就完成了对两个Master进程的

    调度。

    图7.6 ZooKeeper Master选举

    (2) Master故障

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

    替代"主节点-A"成为主节点。

    图7.7 ZooKeeper Master选举

    (3) Master 恢复

    图7.8 ZooKeeper Master选举

    如果主节点恢复了,他会再次向ZooKeeper注册一个节点,这时候他注册的节点将会是"master-00003",ZooKeeper会感知节点的变化再次发动选举,这

    时候"主节点-B"在选举中会再次获胜继续担任"主节点","主节点-A"会担任备用节点。

  • 相关阅读:
    基于 html5的 jquery 轮播插件 flickerplate
    grafana配置
    grafana-zabbix部署和使用
    nxlog windows安装部署
    InfluxDB、grafana、collect部署监控(centos6.8)
    InfluxDB基本概念和操作
    InfluxDB1.2.4部署(centos6.8)
    grafana worldPing插件
    prometheus + grafana部署RabbitMQ监控
    prometheus + grafana安装部署(centos6.8)
  • 原文地址:https://www.cnblogs.com/yaboya/p/9133321.html
Copyright © 2011-2022 走看看