[RM HA3] Zookeeper在RM HA的应用

RM HA(ResourceManager  HighAvailability)中使用Zookeeper的地方在ZKRMStateStore和ZKFailoverController,ZKRMStateStore继承于抽象类RMStateStore,从名字上可以看出RMStateStore是存储RM状态的存储器,ZKRMStateStore是其中的一种实现——使用Zookeeper存储RM状态。抽象类ZKFailoverController通过Zookeeper实现Master的Auto Failover,社区最新版本2.3只用在HDFS上控制Namanode的Auto Failover,RM还没有Auto Failover功能, CLoudera5已经实现了Namanode,Jobtracker和RM的Auto Failover。

本文简要介绍了Zookeeper在RM HA的应用。

问题1,Zookeeper存储哪些RM状态信息,如何存储?

RM HA第一个需要解决的问题是存储RM的状态信息,需要存储的信息包括app的状态,作业的TOKEN等。Zookeeper存储RM状态的目录格式如下所示:

* ROOT_DIR_PATH

* |--- VERSION_INFO

* |--- RM_ZK_FENCING_LOCK

* |--- RM_APP_ROOT

* |     |----- (#ApplicationId1)

* |     |        |----- (#ApplicationAttemptIds)

* |     |

* |     |----- (#ApplicationId2)

* |     |       |----- (#ApplicationAttemptIds)

* |     ....

* |

* |--- RM_DT_SECRET_MANAGER_ROOT

*        |----- RM_DT_SEQUENTIAL_NUMBER_ZNODE_NAME

*        |----- RM_DELEGATION_TOKENS_ROOT_ZNODE_NAME

*        |       |----- Token_1

*        |       |----- Token_2

*        |       ....

*        |

*        |----- RM_DT_MASTER_KEYS_ROOT_ZNODE_NAME

*        |      |----- Key_1

*        |      |----- Key_2

*                ....

可以看到,存储的信息主要包Application和SECRET_MANAGER(安全与权限相关)的信息。

问题2,如何实现Fencing(隔离)?

RM HA另一个需要解决的问题是如何防止两个RM(或一个RM的多个线程)同时对一个Zookeeper上的文件操作(包括读写,创建,删除等),这时就需要增加Fencing机制来保证。

由于RM HA使用的Zookeeper的权限控制实现Fencing,所以首先需要了解Zookeeper的权限控制方法。简单的说,在Zookeeper上创建目录的时候,需要指定用户和相应的权限,例如创建一个目录时可以指定只有自己能对这个目录读写,其他用户只有读的权限。

首先,ZKRMStateStore初始化的时候会创建ROOT_DIR_PATH,并指定该目录只有自己有读写权限,其他用户只有读权限。其次,在每一个ApplicationID目录进行操作的时,都需要现创建一个LOCK文件,创建成功后才开始实际的操作,操作结束后删除LOCK文件。如果创建LOCK文件抛出权限异常,说明这个目录是其他RM(RM HA环境下至少存在两个RM)创建的,这时候RM会强制让自己转换为standby;如果抛出其他的异常,则说明RM的多个线程可能同时对一个目录操作,这是不允许的,这时候RM会强制自己停止工作并退出进程。

问题3,ZKFailoverController如何实现RM的Auto Failover

ZKFailoverController中维护着 ActiveStandbyElector 和HealthMonitor , ActiveStandbyElector主要工作是。

1. 初始化时在 ZK 上创建一个Lock 文件,

2. Standby RM运行过程中监控 ZM 上的Lock 文件是否存在。

HealthMonitor的主要工作是检查自己(RM)的健康状态,通过 HAServiceStatus提供的 getServiceStatus() 和monitorHealth() 方法,如果自己健康的,则会试图创建 Lock 文件,按照结果成为 active或 standby 。

[RM HA3] Zookeeper在RM HA的应用的更多相关文章

  1. Zookeeper 三台主机 Ha集群的搭建

    前期准备1.修改Linux主机名 2.修改IP 3.修改主机名和IP的映射关系 /etc/hosts ######注意######如果你们公司是租用的服务器或是使用的云主机(如华为用主机.阿里云主机等 ...

  2. 【Zookeeper】利用zookeeper搭建Hdoop HA高可用

    HA概述 所谓HA(high available),即高可用(7*24小时不中断服务). 实现高可用最关键的策略是消除单点故障.HA严格来说应该分成各个组件的HA机制:HDFS的HA和YARN的HA. ...

  3. xargs rm -rf 与 -exec rm

    # find ./ -exec rm {} \; # find ./ | xargs rm -rf 两者都可以把find命令查找到的结果删除,其区别简单的说是前者是把find发现的结果一次性传给exe ...

  4. Apache版本的Hadoop HA集群启动详细步骤【包括Zookeeper、HDFS HA、YARN HA、HBase HA】(图文详解)

    不多说,直接上干货! 1.先每台机器的zookeeper启动(bigdata-pro01.kfk.com.bigdata-pro02.kfk.com.bigdata-pro03.kfk.com) 2. ...

  5. 部署hadoop2.7.2 集群 基于zookeeper配置HDFS HA+Federation

    转自:http://www.2cto.com/os/201605/510489.html hadoop1的核心组成是两部分,即HDFS和MapReduce.在hadoop2中变为HDFS和Yarn.新 ...

  6. rm -f + 文件名+* 与 rm -f + 文件名* 的不同效果,大坑呀。

    rm -f catalina.2018-10-22.*    与*号间无空格 rm -f catalina.2018-10-22. *    :多了空格:

  7. 3.16 使用Zookeeper对HDFS HA配置自动故障转移及测试

    一.说明 从上一节可看出,虽然搭建好了HA架构,但是只能手动进行active与standby的切换: 接下来看一下用zookeeper进行自动故障转移: # 在启动HA之后,两个NameNode都是s ...

  8. [RM HA 2] Hadoop 2.0 ResourceManager HA原理

    继上篇文章验证Cloudera RM HA功能后,现在开始分析Cloudera RM HA的原理. 设计目标 主要目的是为了解决两种问题 计划外的机器挂掉 计划内的如软件和硬件升级等. 架构 流程:两 ...

  9. 3.19 YARN HA架构及(RM/NM) Restart讲解

    一.ResourceManager HA ResourceManager(RM)负责跟踪集群中的资源,以及调度应用程序(例如,MapReduce作业). 在Hadoop 2.4之前,ResourceM ...

随机推荐

  1. UITabelView 高级(自定义Cell)

    自定义一个Cell 当我们要显示复杂数据的时候,例如要做一个扣扣聊天界面,或是新闻列表,系统的行已经不能满足我们的要求,这个时候我们可以通过自定义这个行,让他显示更多复杂结构的样式. 自定义cell就 ...

  2. C# 字符串详细使用

    转自 http://www.cnblogs.com/candywyq/archive/2007/07/24/830021.html 1.Convert.ToInt32与Int32.Parse的恩恩怨怨 ...

  3. 二、verilogHDL行为描述建模

    1.综合器: 能把行为级的verilog模块自动转换为门级结构的工具叫做综合器(synthsis tool) 2.verilog网表(verilog netlist): 电路结构可以用门级verilo ...

  4. 16.如何设置Quartus II Programmer,保护pof不被读出

    Program时,把security bit勾上,点击start 这样examine时就不能正确的读出pof 读出来的pof 除文件头外,其余的内容全为0 怎么样,大家试试!

  5. homework-01 "最大子数组之和"的解决过程

    看到这个题目,我首先想到就是暴力解决 求出所有的子数组的和,取出最大值即可 但其中是可以有优化的 如 子数组[3:6]可以用[3:5]+[6]来计算 即可以将前面的计算结果保留下来,减少后面的重复计算 ...

  6. Linux下强制修改root密码方法(图)

    如果Linux操作系统的root密码,那怎么办呢?方法很多,下面再给大家介绍一种. [1] 进入以下画面后,按下e按钮,进入编辑模式: [2]进入以下的画面后,选择如下所示的选项,再次按下e按钮: 然 ...

  7. 【转】matlab采样函数

    dyaddown 功能:对时间序列进行二元采样,每隔一个元素提取一个元素,得到一个降采样时间序列. 格式: 1.y = dyaddown(x, EVENODD) 当EVENODD=0时,从x中第二个元 ...

  8. 文件操作的openmode

    C中文件的openmode如下: r 只读 为输入打开一个文本文件 w 只写 为输出打开一个文本文件 a 追加 向文本文件尾添加数据 rb 只读 为输入打开一个二进制文件 wb 只写 为输出打开一个二 ...

  9. 针对《来用》的NABC分析

    项目名:<来用> 特点:拥有以往win7在内的众多小游戏 NABC分析 N(need需求): 之所以有这个想法是因为,在WIN7,XP系统中往往有很多众所周知的小游戏(比如扫雷),但是在w ...

  10. CSS3 filter10种特效整理

    -webkit-filter是css3的一个属性,Webkit率先支持了这几个功能,感觉效果很不错.一共有10种最基本的特效,下来这个DEMO很好的展示了这些效果: <!DOCTYPE html ...