HA工作机制

HA:高可用(7*24小时不中断服务)
主要的HA是针对集群的master节点的,即namenode和resourcemanager,毕竟DataNode挂掉之后影响 不是特别大,重启就好了。

HDFS的HA

HDFS HA功能通过配置Active/Standby两个NameNodes实现在集群中对NameNode的热备来解决上述问题。如果出现故障,如机器崩溃或机器需要升级维护,这时可通过此种方式将NameNode很快的切换到另外一台机器。

两个namenode,暂且将其标记为active和standby,active为当前工作的机器,standby为替补,直接让二者之间直接通过网络通讯同步数据不太稳定,因为网络一旦断了,另一边节点就数据不完整。因此找到一个可靠的第三方,两个namenode都可以访问,因此效率高。

这样Active一直往这个第三方写数据,standby从这个第三方读数据就可以了。

我们想要实现的就是,如果active挂掉了,自动通知standby来顶替ative去运行。那么这个时候又需要一个可靠的第三方来负责通知,即ZooKeeper。

首先active在ZooKeeper中注册一个临时节点,另一个名称节点(standby)在ZooKeeper中看到ZooKeeper中有active的这个临时节点后,知道自己不能再是active节点了,所以现在他自己的角色就是standby,但是它会在ZooKeeper中注册监听,它会时刻监听着active这个节点,一旦active节点挂掉,ZooKeeper中注册的active就会消失,由于standby注册了监听,所以ZooKeeper会在第一时间通知standby节点,“告知”其active节点挂掉了。然后standby节点就“上位”成为active主namenode节点。

其中active其实并不是直接和ZooKeeper沟通,而是通过一个新进程——ZooKeeper客户端:ZooKeeper Failover controller(Zkfc)来进行沟通。Zkfc负责把主节点namenode的数据(状态信息)写入到ZooKeeper中。

那直接让namenode和ZooKeeper直接通信就好,为什么要加个Zkfc来负责namenode与ZooKeeper的通信呢?因为HA高可用是在hadoop2.x之后出现的,这个时候Hadoop代码经过多年的迭代,有着较高的健壮性,而如果让namenode直接和ZooKeeper通信,需要去修改hadoop的代码,这样会降低hadoop代码的健壮性,所以为了不破坏hadoop代码的健壮性,在hadoop2.x的时代,就单独写了个进程:ZooKeeper Failover controller(Zkfc),但是这个进程本质上就是把原来打算让namenode自己完成的事情单独写成了一个进程,所以Zkfc这个进程是和namenode绑定的,换句话说就是,有namenode的地方就有Zkfc。Zkfc维持着active这个namenode和ZooKeeper之间的会话。另一边standby同理,也是通过另一个Zkfc来维持着standby和ZooKeeper之间的通信。

具体工作过程为:

如果Zkfc检测到active挂掉,Zkfc会把ZooKeeper中的临时节点释放掉,另外一边standby的Zkfc进程从ZooKeeper服务端接收到active挂掉的通知后,首先强行杀死之前的active节点(ssh kill -9 namenode节点号或者调用用户自定义的脚本),以防脑裂,然后将standby节点变为active节点。

说完ZooKeeper的通知机制之后,那么,active和standby读写数据的第三方是什么呢?

Quorum Journal Manager

大多数日志管理

其管理的就是hadoop的元数据,即edits.log

QJM也是一个集群,该集群也是单数台机器,写数据的时候也进行投票,其管理的是edits.log这个元数据。

和ZooKeeper集群类似,QJM集群中只要有一半以上的机器就不会挂。

namenode向QJM写数据的流程:

来一条写请求,然后写到edits里面,然后active会把edits写到

QJM集群里面,QJM这边同意写入,active才会将edits写入,(这里注意:QJM为了提高效率,只要超过半数的机器同意即可写入,这样以来QJM集群中不必所有机器都要求同步。)如果没有HA的时候,hadoop集群中2nn帮助namenode整合Fsimage,如果有了HA之后,就不需要2nn了,standby节点在监听active节点的同时,standby实时将active写入QJM集群中的edits读出到自己的内存中,这样保证了active一旦挂掉,standby这个节点可以随时顶上去接替active继续工作,然后standby定期把内存中的edits合成Fsimage,然后发送给active,所以说standby这个节点比2nn功能更强大,可以代替2nn。

HA工作机制的更多相关文章

  1. HA工作机制及namenode向QJM写数据流程

    HA工作机制 (配置HA高可用传送门:https://www.cnblogs.com/zhqin/p/11904317.html) HA:高可用(7*24小时不中断服务) 主要的HA是针对集群的mas ...

  2. 1 weekend110的NN元数据管理机制 + NN工作机制 + DN工作原理

    第一天的笔记,是伪分布hadoop集群搭建, 后面是hadoop Ha的分布式集群搭建 第一天,是HDFS的shell操作 NN工作机制 里面是二进制 DN工作原理 上传完了之后,在hdfs的虚拟路径 ...

  3. OpenStack云平台的网络模式及其工作机制

    网络,是OpenStack的部署中最容易出问题的,也是其结构中难以理清的部分.经常收到关于OneStack部署网络方面问题和OpenStack网络结构问题的邮件.下面根据自己的理解,谈一谈OpenSt ...

  4. Hadoop的namenode的管理机制,工作机制和datanode的工作原理

    HDFS前言: 1) 设计思想 分而治之:将大文件.大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析: 2)在大数据系统中作用: 为各类分布式运算框架(如:mapr ...

  5. HDFS-HA高可用工作机制

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

  6. android 6.0 高通平台sensor 工作机制及流程(原创)

    最近工作上有碰到sensor的相关问题,正好分析下其流程作个笔记. 这个笔记分三个部分: sensor硬件和驱动的工作机制 sensor 上层app如何使用 从驱动到上层app这中间的流程是如何 Se ...

  7. Java IO工作机制分析

    Java的IO类都在java.io包下,这些类大致可分为以下4种: 基于字节操作的 I/O 接口:InputStream 和 OutputStream 基于字符操作的 I/O 接口:Writer 和 ...

  8. malloc 函数工作机制(转)

    malloc()工作机制 malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表.调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块.然后,将 ...

  9. springMVC工作机制和框架搭建配置说明

    先说一下springMVC的工作机制 1.springmvc把 所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理工作. 2.Dispatcher ...

随机推荐

  1. 如何将离线计算业务的成本降低65%——弹性容器服务EKS「竞价实例」上线

    在容器化的应用场景中,大数据计算是其中很大并且业务应用在逐渐增加的一个热门领域,包括越来越多的人工智能企业,都在使用容器技术来支持业务中的大量计算任务.降低成本.提升资源利用率也是当前这部分用户非常期 ...

  2. 开发规范(二)如何写单元测试 By 阿里

  3. java中读取word文档里的内容

    package com.cn.peitest.excel.word; import java.io.FileInputStream; import java.io.FileOutputStream; ...

  4. 【代码周边】MongoDB与Mysql对比以及插入稳定性分析(指定主键的影响)

    在数据库存放的数据中,有一种特殊的键值叫做主键,它用于惟一地标识表中的某一条记录.也就是说,一个表不能有多个主键,并且主键不能为空值. 无论是MongoDB还是MySQL,都存在着主键的定义. 对于M ...

  5. Spring 之AOP AspectJ切入点语法详解

    记录一下,以后学习 https://blog.csdn.net/zhengchao1991/article/details/53391244

  6. stm32之can总线过滤器研究

    stm32的can总线的配置如下:       CAN_InitStructure.CAN_TTCM=DISABLE;//禁止时间触发通信模式      CAN_InitStructure.CAN_A ...

  7. vue3系列:vue3.0自定义全局弹层V3Layer|vue3.x pc桌面端弹窗组件

    基于Vue3.0开发PC桌面端自定义对话框组件V3Layer. 前两天有分享一个vue3.0移动端弹出层组件,今天分享的是最新开发的vue3.0版pc端弹窗组件. V3Layer 一款使用vue3.0 ...

  8. vue的绑定属性v-bind

    v-bind的简略介绍 v-bind用于绑定一个或多个属性值,或者向另一个组件传递props值.目前,个人所用之中,更多的是使用于图片的链接src,a标签中的链接href,还有样式以及类的一些绑定,以 ...

  9. String -- 从源码剖析String类

    几乎所有的 Java 面试都是以 String 开始的,String 源码属于所有源码中最基础.最简单的一个,对 String 源码的理解也反应了你的 Java 基础功底. String 是如何实现的 ...

  10. linux mysql source 导入大文件报错解决办法

    找到mysql的配置文件目录 my.cnf interactive_timeout = 120wait_timeout = 120max_allowed_packet = 500M 在导入过程中可能会 ...