ZKFailoverController( zkfc)介绍
来源:互联网 发布:百度人工智能世界第一 编辑:程序博客网 时间:2024/06/05 07:14
转自:http://blog.csdn.net/tzwjava/article/details/40742795
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. 系统架构
如上图所示,通常情况下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的主类是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后,它必须确保自己能够提供一致性的服务(数据一致性),否则它需要主动退出选举。
如果一个Active因HealthMonitor监控到状态异常,这里会作出判断,先通过Fenceing功能关闭它(确保关闭或者不能提供服务),然后在ZK上删除它对应ZNode。
发送上述事件后,在另外一台机器上的ZKFC中的ActiveStandbyElector 会收到事件,并重新进行选举(尝试创建特定ZNode),它将获得成功并更改NN中状态,从而实现Active节点的变更。
- ZKFailoverController( zkfc)介绍
- ZKFailoverController( zkfc)介绍
- HDFS HA ZKFC 分析
- HDFS ZKFC手记
- Hadoop NameNode的ZKFC机制
- HDFS ZKFC自动切换原理分析
- ZKFC(Zookeeper Failover Controller)原理【详细版】
- ZKFC(Zookeeper Failover Controller)原理【详细版】
- HDFS ZKFC实现NameNode自动切换原理
- Hadoop-2.7.0中HDFS NameNode HA实现之DFSZKFailoverController、ZKFailoverController(一)
- HDFS-HA的配置-----自动Failover(ZKFC)
- zookeeper-3.4.6格式化问题 hdfs zkfc -formatZk报错
- 两个resourcemanager都处于standby,zkfc无法切换resourcemanager
- Hadoop完全分布式HA配置hdfs zkfc -formatZK错误
- zkfc报错:java.net.NoRouteToHostException: No route to host
- Hadoop2初始安装时,执行hdfs zkfc -formatZK日志
- HA功能中ZKFC对NN状态的控制
- HA搭建 zkfc启动不起来原因及解决办法
- jQuery学习笔记——流水账part2
- RCNN用到的SelectiveSearch的理解笔记
- 记录
- okHttp的简单封装使用
- 加密软件的未来发展方向 自动备份功能应该成为一种标准
- ZKFailoverController( zkfc)介绍
- Python爬虫利器:BeautifulSoup库
- php中多维数组排序
- JS为什么有时候要做两次encodeURI
- JDK8-时间API(十)
- 挑战程序竞赛系列(15):2.6快速幂运算
- 使用neo4j shell命令行工具时遭遇“connection refused” error的解决方法(草稿版)
- MongoDB--架构搭建(主从、副本集)之主从
- join连接表时是先join还是先where