HA工作机制
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工作机制的更多相关文章
- HA工作机制及namenode向QJM写数据流程
HA工作机制 (配置HA高可用传送门:https://www.cnblogs.com/zhqin/p/11904317.html) HA:高可用(7*24小时不中断服务) 主要的HA是针对集群的mas ...
- 1 weekend110的NN元数据管理机制 + NN工作机制 + DN工作原理
第一天的笔记,是伪分布hadoop集群搭建, 后面是hadoop Ha的分布式集群搭建 第一天,是HDFS的shell操作 NN工作机制 里面是二进制 DN工作原理 上传完了之后,在hdfs的虚拟路径 ...
- OpenStack云平台的网络模式及其工作机制
网络,是OpenStack的部署中最容易出问题的,也是其结构中难以理清的部分.经常收到关于OneStack部署网络方面问题和OpenStack网络结构问题的邮件.下面根据自己的理解,谈一谈OpenSt ...
- Hadoop的namenode的管理机制,工作机制和datanode的工作原理
HDFS前言: 1) 设计思想 分而治之:将大文件.大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析: 2)在大数据系统中作用: 为各类分布式运算框架(如:mapr ...
- HDFS-HA高可用工作机制
1.HDFS-HA概述 1)所谓HA(high available),即高可用(7*24小时不中断服务). 2)实现高可用最关键的策略是消除单点故障.HA严格来说应该分成各个组件的HA机制:HDFS的 ...
- android 6.0 高通平台sensor 工作机制及流程(原创)
最近工作上有碰到sensor的相关问题,正好分析下其流程作个笔记. 这个笔记分三个部分: sensor硬件和驱动的工作机制 sensor 上层app如何使用 从驱动到上层app这中间的流程是如何 Se ...
- Java IO工作机制分析
Java的IO类都在java.io包下,这些类大致可分为以下4种: 基于字节操作的 I/O 接口:InputStream 和 OutputStream 基于字符操作的 I/O 接口:Writer 和 ...
- malloc 函数工作机制(转)
malloc()工作机制 malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表.调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块.然后,将 ...
- springMVC工作机制和框架搭建配置说明
先说一下springMVC的工作机制 1.springmvc把 所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理工作. 2.Dispatcher ...
随机推荐
- 使用GitHub发布自己的静态网站
可参考GitHub官方文档 https://pages.github.com/ https://help.github.com/ 1.在本地新建一个文件夹.然后在文件夹中用git初始化文件夹 git ...
- python初学者-使用for循环做一个九九乘法表
for i in range(1, 10): for j in range(1, i + 1): print(j, '*', i, '=', i * j, end=" ") #en ...
- Atcoder abc187 F Close Group(动态规划)
Atcoder abc187 F Close Group 题目 给出一张n个点,m条边的无向图,问删除任意数量的边后,留下来的最少数量的团的个数(\(n \le 18\) ) 题解 核心:枚举状态+动 ...
- 2.2.1 Sqoop1的基本架构
当用户通过shell命令提交迁移作业后,Sqoop会从关系型数据库中读取元信息,并根据并发度和数据表大小将数据划分成若干分片,每片交给一个Map Task处理,这样多个Map Task同时读取数据库中 ...
- 使用postman添加cookie失败和cookie消失问题
例如 groupId=2; path=/; domain=.www.baidu.com; HttpOnly; Expires=Tue, 16 Jul 2019 03:42:12 GMT; 添加失败和c ...
- Java并发包源码学习系列:CLH同步队列及同步资源获取与释放
目录 本篇学习目标 CLH队列的结构 资源获取 入队Node addWaiter(Node mode) 不断尝试Node enq(final Node node) boolean acquireQue ...
- spring boot 邮件服务
引入依赖 添加spring-boot-starter-mail包引用 <dependency> <groupId>org.springframework.boot</gr ...
- 计算机考研真题 ZOJ问题
题目描述 对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC. 是否AC的规则如下: 1. zoj能AC: 2. 若字符串形式为xzojx,则也能AC,其中x可以是N个'o' 或 ...
- 容器编排系统K8s之APIService资源
前文我们聊到了k8s上crd资源的使用和相关说明,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14267400.html:今天我们来了解下k8s的第二种扩展 ...
- SpringBoot配置文件(2)
六.配置文件加载 SpringBoot 启动会扫描以下位置的application.properties或者application.yml文件作为SpringBoot的默认配置文件 file:./co ...