`
longzhun
  • 浏览: 372099 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ZKFailoverController( zkfc)介绍

 
阅读更多

1.基本原理

zk的基本特性:
(1) 可靠存储小量数据且提供强一致性
(2) ephemeral node, 在创建它的客户端关闭后,可以自动删除
(3) 对于node状态的变化,可以提供异步的通知(watcher)

zk在zkfc中可以提供的功能:
(1) Failure detector: 及时发现出故障的NN,并通知zkfc
(2) Active node locator: 帮助客户端定位哪个是Active的NN
(3) Mutual exclusion of active state: 保证某一时刻只有一个Active的NN

2. 模块

(1) ZKFailoverController(DFSZKFailoverController): 驱动整个ZKFC的运转,通过向HealthMonitor和ActiveStandbyElector注册回调函数的方式,subscribe HealthMonitor和ActiveStandbyElector的事件,并做相应的处理
(2) HealthMonitor: 定期check NN的健康状况,在NN健康状况发生变化时,通过回调函数把变化通知给ZKFailoverController
(3) ActiveStandbyElector: 管理NN在zookeeper上的状态,zookeeper上对应node的结点发生变化时,通过回调函数把变化通知给ZKFailoverController
(4) FailoverController: 提供做graceful failover的相关功能(dfs admin可以通过命令行工具手工发起failover) 

3. 系统架构

zkfc-arch

 

HA架构图


如上图所示,通常情况下Namenode和ZKFC同布署在同一台物理机器上, HealthMonitor, FailoverController, ActiveStandbyElector在同一个JVM进程中(即ZKFC), Namenode是一个单独的JVM进程。如上图所示,ZKFC在整个系统中有几个重要的作用:
(1) Monitor and try to take active lock: 向zookeeper抢锁,抢锁成功的zkfc,指导对应的NN成为active的NN; watch锁对应的znode,当前active NN的状态发生变化导致失锁时,及时抢锁,努力成为active NN
(2) Monitor NN liveness and health: 定期检查对应NN的状态, 当NN状态发生变化时,及时通过ZKFC做相应的处理
(3) Fences other NN when needed: 当前NN要成为active NN时,需要fence其它的NN,不能同时有多个active NN

4. 线程模型

ZKFC的线程模型总体上来讲比较简单的,它主要包括三类线程,一是主线程;一是HealthMonitor线程; 一是zookeeper客户端的线程。它们的主要工作方式是:
(1) 主线程在启动所有的服务后就开始循环等待
(2) HealthMonitor是一个单独的线程,它定期向NN发包,检查NN的健康状况
(3) 当NN的状态发生变化时,HealthMonitor线程会回调ZKFailoverController注册进来的回调函数,通知ZKFailoverController NN的状态发生了变化
(4) ZKFailoverController收到通知后,会调用ActiveStandbyElector的API,来管理在zookeeper上的结点的状态
(5) ActiveStandbyElector会调用zookeeper客户端API监控zookeeper上结点的状态,发生变化时,回调ZKFailoverController的回调函数,通知ZKFailoverController,做出相应的变化

5. 类关系图

zkfc_class

 

 

 

 

ZKFC的主类是org.apache.Hadoop.hdfs.tools.DFSZKFailoverController

  • formatZK

创建特定目录,作为后续写节点状态的父路径。如果该目录已经存在,清理原有目录为空目录。

  •  HealthMonitor

在一个独立线程中,通过RPC方式,周期性的调用HAServiceProtocol接口的monitorHealth方法,获取NN的状态。并把状态报告给ActiveStandbyElector 

  •  ActiveStandbyElector

ActiveStandbyElector 负责判断哪个NN可以成为Active。它通过ZK,看哪个能够成功的创建一个特定的ephemeral lock file (znode),哪个就是Active,其它的成为Standby。在一个节点被通知变成Active后,它必须确保自己能够提供一致性的服务(数据一致性),否则它需要主动退出选举。

如果一个ActiveHealthMonitor监控到状态异常,这里会作出判断,先通过Fenceing功能关闭它(确保关闭或者不能提供服务),然后在ZK上删除它对应ZNode

发送上述事件后,在另外一台机器上的ZKFC中的ActiveStandbyElector 会收到事件,并重新进行选举(尝试创建特定ZNode),它将获得成功并更改NN中状态,从而实现Active节点的变更。



6. 参考资料

(1) https://issues.apache.org/jira/secure/attachment/12521279/zkfc-design.pdf
(2) http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/

分享到:
评论

相关推荐

    【HDFS篇11】HA高可用1

    为了协调这两个NameNode的状态,HDFS HA引入了ZooKeeper和ZKFailoverController(ZKFC)组件。ZKFC是一个运行在每个NameNode节点上的服务,它负责监控NameNode的状态,并利用ZooKeeper进行状态标识和故障转移决策。...

    14_尚硅谷大数据之HDFS HA高可用1

    3)状态管理:ZKFailoverController (ZKFC)是一个关键组件,它监视NameNode状态,并利用ZooKeeper进行状态标识。ZooKeeper作为一个分布式协调服务,确保状态切换的正确性和一致性,防止“脑裂”(Brain Split)现象...

    Hadoop的HA简介&CAP理论的关系

    HDFS-HA利用ZKFailoverController(ZKFC)、HealthMonitor和ActiveStandbyElector三个关键组件来实现NameNode的主备切换。ZKFC是一个独立的进程,启动时会创建HealthMonitor和ActiveStandbyElector。HealthMonitor...

    大数据面试突击系列HDFS原理篇

    - **ZKFailoverController (ZKFC)**:每个NameNode都有一个ZKFC进程,监控并协助故障切换。ZKFC通过ZooKeeper进行协调,实现NameNode的自动故障切换。 - **ZooKeeper**:提供分布式协调服务,确保任何时候只有一个...

    大数据平台技术实践 四.HDFS原理和安装教程

    <property> <name>zookeeper.quorum</name> <value>zk1.hadoop:2181,zk2.hadoop:2181,zk3.hadoop:2181</value> <description>ZooKeeper集群的地址列表</description> </property>9.3.3 ZKFailoverController (ZKFC)...

    hadoop_HA版本的配置

    格式化ZKFailoverController (ZKFC),它是NameNode HA的组成部分,通过`hdfs zkfc -formatZK`命令完成。 8. **连接ZooKeeper并检查状态**: 使用`zkCli.sh`连接到ZooKeeper,并通过`ls /`命令检查其目录结构,...

    zookeeper-3.5.6-bin.zip

    3. **ZKFailoverController (ZKFC)**: 这是Hadoop HA中的一个组件,每个NameNode或ResourceManager都有一个对应的ZKFC进程,它与Zookeeper交互,监控节点状态,并在需要时触发故障转移。 4. **Chroot**: Zookeeper...

    Hadoop2.5.1的HA+Federation的详细配置

    - 在`hadoop-env.sh`中设置`HADOOP_ZKFC_CLASS`为`org.apache.hadoop.ha.ZKFailoverController`。 7. **初始化NameNode**: - 执行`hdfs namenode -bootstrapStandby`命令初始化备用NameNode。 - 使用`hdfs zkfc...

    hadoop 集群搭建

    本文将详细介绍如何在多台服务器上搭建 Hadoop 2.2 的完全分布式环境,包括必要的系统配置、组件安装以及服务启动等步骤。 #### 二、系统环境准备 1. **操作系统选择**:由于 Hadoop 支持多种操作系统平台,但考虑...

    HadoopHA集群部署、规划HadoopHA集群教学课件.pptx

    HDFS HA架构图显示,Active NameNode通过JournalNode与Standby NameNode同步元数据,Zookeeper集群的ZKFC(Zookeeper Failover Controller)用于检测和执行NameNode之间的切换。 类似的,YARN HA使用相同的原理,...

    自己总结的hadoop HA安装流程

    - 配置Zookeeper地址,`dfs.ha.zkfc.address=hostname1:8021,hostname2:8021`。 3. 配置yarn-site.xml: - 设置YARN的ResourceManager HA,`yarn.resourcemanager.cluster-id=hacluster`。 - 指定RM地址,如`...

    hadoop-3.1.0.zip,windows 编译后bin文件,windows Hadoop客户端环境

    6. **ZKFailoverController**:Zookeeper协调的Failover控制器(ZKFC)在3.1.0中更加成熟,帮助确保在Active/Standby模式下NameNode之间的平滑切换。 7. **安全性和认证**:Hadoop的安全模型在3.1.0中得到了加强,...

Global site tag (gtag.js) - Google Analytics