09_ZooKeeper二

 

ZooKeeper分布式协调框架二

目录

ZooKeeper分布式协调框架

一、HDFS HA方案(20分钟)

1.1 ZooKeeper监听器

1.2、HDFS HA原理(难点 15分钟)

1、HDFS HA方案流程

2、namenode主备选举过程:

3、ZKFC的主备切换方法

4、如何防止脑裂

二、ZooKeeper原子广播协议(Zab)

2.1、 ZooKeeper之安其内—恢复模式(选主)(重点 )

1、 ZooKeeper集群架构

2、leader选举原则与公式

3、全新集群leader选举

4、非全新集群leader选举

5、 ZooKeeper服务器个数

2.2、ZooKeeper之攘其外—广播模式(同步)(重点 )

1、读操作

2、写操作

4、分布式锁

2.3、ZooKeeper状态同步

三、ZAB算法(难点考点 )

3.1 仲裁quorum

3.2 网络分区、脑裂

3.3 ZAB算法

 


一、HDFS HA方案(20分钟)

1.1 ZooKeeper监听器

  • 关于ZooKeeper监听器有三个重要的逻辑:

    • 注册:客户端向ZooKeeper集群注册监听器

    • 监听事件:监听器负责监听特定的事件

    • 回调函数:当监听器监听到事件的发生后,调用注册监听器时定义的回调函数

 类比举例

  • 为了便于理解,举例:旅客住店无房可住的情况

    • 一哥们去酒店办理入住,但是被告知目前无空房

    • 这哥们告诉客服:你给我记住了,帮我留意一下有没有空出的房间,如果有,及时通知我(类似注册监听器,监听特定事件

    • 将近12点,有房客退房,有空闲的房间(事件

    • 客服发现有空房(监听到事件

    • 及时通知这哥们

    • 这哥们收到通知后,做一些事,比如马上从附近酒吧赶回酒店(调用回调函数

     

1.2、HDFS HA原理(难点 15分钟)

  • 在Hadoop 1.x版本,HDFS集群的NameNode一直存在单点故障问题:

    • 集群只存在一个NameNode节点,它维护了HDFS所有的元数据信息

    • 当该节点所在服务器宕机或者服务不可用,整个HDFS集群处于不可用状态

  • Hadoop 2.x版本提出了高可用 (High Availability, HA) 解决方案

关键逻辑:

①监听器:注册、监听事件、回调函数

②共享存储:JournalNode

HDFS HA方案,主要分两部分:

①元数据同步

②主备切换

  • 1、HDFS HA方案流程

  • ① 元数据同步

    • 在同一个HDFS集群,运行两个互为主备的NameNode节点。

    • 一台为主Namenode节点,处于Active状态,一台为备NameNode节点,处于Standby状态。

    • 其中只有Active NameNode对外提供读写服务,Standby NameNode会根据Active NameNode的状态变化,在必要时切换成Active状态。

    • JournalNode集群

      • 在主备切换过程中,新的Active NameNode必须确保与原Active NamNode元数据同步完成,才能对外提供服务

      • 所以用JournalNode集群作为共享存储系统

      • 当客户端对HDFS做操作,会在Active NameNode中edits.log文件中作日志记录,同时日志记录也会写入JournalNode集群;负责存储HDFS新产生的元数据

      • 当有新数据写入JournalNode集群时,Standby NameNode能监听到此情况,将新数据同步过来

      • Active NameNode(写入)和Standby NameNode(读取)实现元数据同步

      • 另外,所有datanode会向两个主备namenode做block report

  • ② 主备切换

  • ZKFC涉及角色

    • 每个NameNode节点上各有一个ZKFC进程

    • ZKFC即ZKFailoverController,作为独立进程存在,负责控制NameNode的主备切换

    • ZKFC会监控NameNode的健康状况,当发现Active NameNode异常时,通过Zookeeper集群进行namenode主备选举,完成Active和Standby状态的切换

      • ZKFC在启动时,同时会初始化HealthMonitor和ActiveStandbyElector服务

      • ZKFC同时会向HealthMonitor和ActiveStandbyElector注册相应的回调方法(如上图的①回调、②回调)

      • HealthMonitor定时调用NameNode的HAServiceProtocol RPC接口(monitorHealth和getServiceStatus),监控NameNode的健康状态并向ZKFC反馈

      • ActiveStandbyElector接收ZKFC的选举请求,通过Zookeeper自动完成namenode主备选举

      • 选举完成后回调ZKFC的主备切换方法对NameNode进行Active和Standby状态的切换

 

  • 2、namenode主备选举过程

    • 两个ZKFC通过各自ActiveStandbyElector发起NameNode的主备选举,这个过程利用Zookeeper的写一致性临时节点机制实现

      • 当发起一次主备选举时,ActiveStandbyElector会尝试在Zookeeper创建临时节点/hadoop-ha/${dfs.nameservices}/A

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值