NameNode的HA机制
1 HA机制
NameNode维护了HDFS所有的元数据信息,当该节点所在服务器宕机或服务不可用时,整个HDFS都将处于不可用状态,那么怎么才能避免这个NameNode节点宕机呢?一个容易想到的解决方案是部署两台NameNode节点,形成主备模式(active/standby模式),这样一旦active节点宕机,standby节点立即切换到active模式。事实上HA机制就是采取的这种方案。但实现该机制,需要解决以下问题:
1)为什么选择主备模式,而不是主主模式(active/active模式)?也即让两个NameNode节点都响应客户端的请求,但前提是两个NameNode都需要保存致的元数据
2)怎么同步两个NameNode节点的元数据?响应客户端请求的是active节点保存了最新的元数据 ,元数据分为两部分:一是刚写入新的元数据 (edits),二是合并后的较旧的(fsimage)。HA机制解决同步问题的方法是将active节点新写入的edits元数据放在zookeeper集群上(zookeeper集群主要功能是实现少量数据的分布式同步管理),standby节点在active节点正常情况下只需要将zookeeper集群上edits文件同步到自己的fsimage中就可以。Hadoop框架为这个集群专门写了个分布式应用qjournal(依赖zookeeper实现),实现qjournal的节点称为JournalNode。
3)怎么感知Active节点是否宕机,并将standby节点快速切换到active状态?解决方案是专门在NameNode节点上启动一下监控进程,时刻监控NameNode的状态。对于处在active状态的NameNode,如果发现不正常就向zookeeper集群中写入一些数据。对于处在standby状态的namenode,监控进程从zookeeper集群中读数据,从而感知到active节点是否正常。如果发现异常,监控进程负责将standby状态切换到active状态。这个监控进程在hadoop中叫做ZKFC(依赖zookeeper实现)。
4)如何在状态切换时避免brain split(脑裂)?解决方案:standby NameNode感知到主节点出现异常后不会立即切换状态,ZKFC会首先通过ssh远程杀死active节点的NameNode进程(kill -9 进程号)。如果在一段时间内没有收到执行成功的回执,standby节点会执行一个自定义脚本,尽量保证不会出现脑裂问题。这个机制在Hadoop中称为fencing(包括ssh发送kill指令,执行自定义脚本两道保障),如下图:
2 HA架构
- ZKFC
主要作用:作为一个ZK集群的客户端,用来监控NN的状态信息。
ZKFC即ZKFailoverController,作为独立进程存在,负责控制NameNode的主备切换,ZKFC会监测NameNode的健康状况,当发现Active NameNode出现异常时会通过Zookeeper集群进行一次主备选举,完成Active和Standby状态的切换;
- HealthMonitor
定时调用NameNode的HAServiceProtocol RPC接口(monitorHealth和getServiceStatus),监控NameNode的健康状态并向ZKFC反馈
- ActiveStandbyElector
接收ZKFC的选举请求,通过Zookeeper自动完成主备选举,选举完成后回调ZKFC的主备切换方法对NameNode进行Active和Standby状态的切换;
- JournalNode集群
共享存储系统,负责存储HDFS的元数据,Active NameNode(写入)和Standby NameNode(读取)通过共享存储系统实现元数据同步,在主备切换过程中,新的Active NameNode必须确保元数据同步完成才能对外提供服务。
- Standby NameNode拥有之前Active NameNode的对外提供的所有服务信息,这就需要ZK维护一组守护进程JournalNode,处于工作状态的Active NameNode需要将自己对外提供的所有服务信息写在一半以上的JournalNode的目录里(这些信息被记为editlog),处于热备状态的Standby NameNode会随时监听JournalNode的工作目录,只要有所更新改变,热备状态下的Standby NameNode会读取这些信息,并更新自己内部的命名空间,此时Standby NameNode和Active NameNode都拥有对外提供的服务信息
- 所有的DataNode都要向主NameNode和热备NameNode进行心跳报告,使得2个NameNode都了解DataNode的健康状态以及数据存放在哪个DataNode上。
NameNode的HA机制相关推荐
- 解决HDFS NameNode启动时Loading edits时间超长的问题(NameNode数据同步机制介绍)
背景 有个好久好久没怎么维护的Hadoop集群,一直在提供服务,也做了HA,由于某些原因要对HDFS做重启,重启前检查了遍服务,发现另一个NameNode已经挂了有一段时间了. 重启过程倒是没啥问题, ...
- Hadoop的HA机制
Hadoop的HA机制 前言:正式引入HA机制是从hadoop2.0开始,之前的版本中没有HA机制 1.1HA的运作机制 (1)hadoop-HA集群运作机制介绍 所谓HA,即高可用(7*24小时不中 ...
- 一脸懵逼学习Hadoop-HA机制(以及HA机制的配置文件,测试)
一脸懵逼学习Hadoop-HA机制(以及HA机制的配置文件,测试) 1:能否让两个NameNode都正常影响客户端请求? 应该让两个NameNode节点在某个时间只能有一个节点正常影响客户端请求,相应 ...
- 什么是Hadoop的HA机制?
Hadoop的HA机制 前言:正式引入HA机制是从hadoop2.0开始,之前的版本中没有HA机制 1.1 HA的运作机制 (1)hadoop-HA集群运作机制介绍 所谓HA,即高可用(7*24小时不 ...
- hadoop namenode管理元数据机制
一.简要namenode管理元数据机制: 二.详细namenode管理元数据机制: 三.secondary namenode 合并edits和fsimage: 四.namenode存储元数据细节: 五 ...
- 【Flink】 Flink JobManager HA 机制的扩展与实现
1.概述 转载:Flink 源码阅读笔记(21)- Flink JobManager HA 机制的扩展与实现 在 Flink 1.12 中,Flink on Kubernetes 的 Native 部 ...
- namenode的ha配置,亲测
namenode的ha配置 一.Namenode HA部署: 目标: 防止单个Namenode宕机以后,整个HDFS集群无法访问 规划: bigdata01.com bigdata02.com big ...
- Hadoop的HA机制原理解析,与HA高可用集群环境搭建
2019独角兽企业重金招聘Python工程师标准>>> Hadoop的HA工作机制示意图 下面我们开始搭建这一套高可用集群环境 hadoop2.0已经发布了稳定版本了,增加了很多特性 ...
- Hadoop HA 机制学习:HA是怎么运作,QJM又是怎么发挥功效的
一.Hadoop 系统架构 1.1 Hadoop1.x和Hadoop2.x 架构 在介绍HA之前,我们先来看下Hadoop的系统架构,这对于理解HA是至关重要的.Hadoop 1.x之前,其官方架构如 ...
最新文章
- Windows 技术篇 - 退出s模式解决surface无法安装和使用第三方应用问题:于安全和性能的考虑,此Windows模式只运行经Microsoft验证的应用
- python的核心数据类型_Python核心数据类型-集合
- 实现多租户系统的一点思考
- mac php oracle11g,Oracle11G函数整理
- 【整理】更改MSSQL默认字符集
- 写一篇Hook Driver.
- JavaScript 自定义对象 及 new()原理与实现 如何完整地手写实现new
- 自动驾驶 5-3 前馈速度控制 Feedforward Speed Control
- python语言程序设计教程课后答案刘卫国_Visual FoxPro程序设计教程(主编:刘卫国 第三版)1-5课后答案...
- 卸载重装Netmeeting
- 【转】RTF格式分析
- oracle裁员原因_Oracle中国良心裁员:首批900人,赔偿N+6
- Android R 设置壁纸流程和 Launcher 闪烁问题
- 第九章 姜小白大难不死登君位 公子纠迟来一步梦成空
- sms 短信通平台 发送短信
- 简述DDNS和DNS区别
- 晶体硅太阳能电池产线性能跟踪项目
- 安装sql server 2008 报错“检查 Microsoft Visual Studio 2008 的早期版本”失败的问题解
- 【Linux】syscall系统调用原理及实现
- 相对基址加变址寻址方式
热门文章
- fm2018 ajax,FM2018妖人推荐攻略_足球经理2018最有潜力妖人名单
- softmax回归(Softmax Regression)
- Pytorch笔记:线性回归、softmax回归
- python波形图librosa_对python中Librosa的mfcc步骤详解
- Unity读取和写入json中文乱码\转码\UTF-8编码
- 数学建模学习(66):支持向量机 (SVM)案例实战
- 面试知识java基础(查漏补缺笔记)
- QT 绘制贝塞尔曲线,并且获得曲线上的点的坐标
- tkMybatis的Example使用
- 职场经理人拍马屁必读