HDFS原理分析之HA机制:avatarnode原理
一、问题描述
由于namenode 是HDFS的大脑,而这个大脑又是单点,如果大脑出现故障,则整个分布式存储系统就瘫痪了。HA(High Available)机制就是用来解决这样一个问题的。碰到这么个问题,首先本能的想到的就是冗余备份,备份的方式有很多种,前辈们设计的有元数据备份方案,secondary namenode以及avatarnode等方案。而这些方案中最有优势的自然是能够让HDFS以最短的时间完成故障切换的方案。也就是我们今天要讨论的avatarnode。
二、基本结构
primary:负责正常业务namenode,也就是为client提供元数据查询和操作。
standby:热备的namenode,完全备份primary的元数据,并对primary做checkpoint(一种元数据持久化机制,后面会介绍到)。
NFS:网络文件服务器,primary会将日志实时同步一份到该服务器,来保证primary出故障时备份元数据的完整性。
三、数据持久化机制——checkpoint
primary管理着所有的元数据,通常元数据都保存在内存里,这样对元数据的访问能够高效。但是有个隐患,就是如果primary节点宕机了,或者掉电了,那么所有的元数据就一去不复返了。如果我们能够把元数据在内存里保存一份,同时在硬盘上也保存一份,那么即使掉电也能将数据再恢复过来。
checkpoint机制就是将元数据实时在硬盘上保存一份的机制。
首先介绍几个关键概念:
edits:日志文件,记录引发元数据改变的操作。
fsimage:元数据的镜像文件,可以理解为元数据保存在磁盘上的一个副本。
问题1:fsimage代表的是某一时刻的元数据镜像,元数据在不断改变,那么这个镜像是如何实时更新的呢?
问题2:如何在保证primary namenode正常对外服务的情况下生成fsimage?
checkpoint步骤如下:
第一步:secondary namenode请求namenode停止使用edits,暂时记录在edits.new文件中
第二步:secondary namenode从namenode复制fsimage、edits到本地
第三步:secondary namenode合并fsimage、edits为fsimage.ckpt
第四步:secondary namenode发送fsimage.ckpt到namenode
第五步:namenode用新的fsimage覆盖旧的fsimage,用新的edits覆盖旧的edits
第六步:更新checkpoint时间
到这里fsimage更新完毕,即保证了primary正常服务,也完成了fsimage的更新
四、avatarnode元数据的一致性
checkpoint只是保证了元数据的持久化,但是如果primary出现故障,修复后还是要花大量的时间来加载fsimage,如何让standby在内存中就和primary保持元数据同步,就是一个高可用的HDFS需要解决的问题。
namenode的元数据其实包括两个部分:
第一部分:目录树,目录树管理着HDFS中存储的所有的文件信息。
第二部分:块数据和datanode的对应关系
只要能够保证以上两部分的数据一致了,那么元数据的一致性问题就解决了。
第一部分:primary将日志实时同步到NFS上,而standby可以实时读取NFS上的日志,通过日志回放,可以解决目录树信息一致的问题。
第二部分:快数据和datanode的对应关系,是所有datanode想namenode汇报总结出来的,那么让所有的datanode向两个namenode汇报,就可以解决块数据和datanode的对应关系一致性问题。
问题:新引入的NFS会带来新的单点问题。据facebook工程师统计,这个单点故障率非常之低,他们在四年中之碰到一次。
到这里avatarnode原理基本讲完,但是实际应用中还存在几个问题:
1、HDFS是如何快速检测到primary出现故障的?
2、standby是如何迅速从备用机切换到primary的?
HDFS原理分析之HA机制:avatarnode原理的更多相关文章
- SpringBoot原理—分析SpringBoot启动机制(starter机制)
一:前言使用过springboot的同学应该已经知道,springboot通过默认配置了很多框架的使用方式帮我们大大简化了项目初始搭建以及开发过程.本文的目的就是一步步分析springboot的启动过 ...
- Spring 事件监听机制及原理分析
简介 在JAVA体系中,有支持实现事件监听机制,在Spring 中也专门提供了一套事件机制的接口,方便我们实现.比如我们可以实现当用户注册后,给他发送一封邮件告诉他注册成功的一些信息,比如用户订阅的主 ...
- Junit 注解 类加载器 .动态代理 jdbc 连接池 DButils 事务 Arraylist Linklist hashset 异常 哈希表的数据结构,存储过程 Map Object String Stringbufere File类 文件过滤器_原理分析 flush方法和close方法 序列号冲突问题
Junit 注解 3).其它注意事项: 1).@Test运行的方法,不能有形参: 2).@Test运行的方法,不能有返回值: 3).@Test运行的方法,不能是静态方法: 4).在一个类中,可以同时定 ...
- (转)Android 系统 root 破解原理分析
现在Android系统的root破解基本上成为大家的必备技能!网上也有很多中一键破解的软件,使root破解越来越容易.但是你思考过root破解的 原理吗?root破解的本质是什么呢?难道是利用了Lin ...
- 消息队列NetMQ 原理分析1-Context和ZObject
前言 介绍 NetMQ是ZeroMQ的C#移植版本,它是对标准socket接口的扩展.它提供了一种异步消息队列,多消息模式,消息过滤(订阅),对多种传输协议的无缝访问. 当前有2个版本正在维护,版本3 ...
- 消息队列NetMQ 原理分析2-IO线程和完成端口
消息队列NetMQ 原理分析2-IO线程和完成端口 前言 介绍 目的 IO线程 初始化IO线程 Proactor 启动Procator线程轮询 处理socket 获取超时时间 从完成端口获取处理完的状 ...
- 消息队列NetMQ 原理分析3-命令产生/处理和回收线程
消息队列NetMQ 原理分析3-命令产生/处理和回收线程 前言 介绍 目的 命令 命令结构 命令产生 命令处理 创建Socket(SocketBase) 创建连接 创建绑定 回收线程 释放Socket ...
- 消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe
消息队列NetMQ 原理分析4-Socket.Session.Option和Pipe 前言 介绍 目的 Socket 接口实现 内部结构 Session Option Pipe YPipe Msg Y ...
- 消息队列NetMQ 原理分析5-StreamEngine、Encord和Decord
消息队列NetMQ 原理分析5-StreamEngine,Encord和Decord 前言 介绍 目的 StreamEngine 发送数据 接收数据 流程分析 Encoder V2Encoder V1 ...
随机推荐
- PostgreSQL pg_hba.conf 文件简析
作者:高张远瞩(HiLoveS) 博客:http://www.cnblogs.com/hiloves/ 转载请保留该信息 最近试用PostgreSQL 9.04,将pg_hba.conf配置的一些心得 ...
- 30分钟掌握Dart语言
在Dart中,一切都是对象,一切对象都是class的实例,哪怕是数字类型.方法甚至null都是对象,所有的对象都是继承自Object 虽然Dart是强类型语言,但变量类型是可选的因为Dart可以自动推 ...
- windows系统下,安装多个版本的jdk,java -version
问题描述: 开始安装了 jdk8 后来装了jdk9,可以为项目配置不同的jdk,相安无事: 今天发现软件需要jdk8的环境,结果我的java -version始终是jdk9.0.1: 解决办法:使ja ...
- Project facet Java version 1.8 is not supported.
Eclipse中添加项目到Servers中时提示“Project facet Java version 1.8 is not supported.” 解决方案:方法一:选中项目,右键roperties ...
- linux-Centos7安装mysql5.7.19
1.下载mysql 网址: https://dev.mysql.com/downloads/mysql/ 2.选择源码包,通用版点击下载 直接下载就可以了,不用登录 3.解压编译 先安装相关依赖包 y ...
- msys git 安装配置、git命令行使用
安装 .安装msys git客户端程序 .打开git bash,命令ssh-keygen –C “admin@test.cn “ –t rsa .复制C:\Users\felix\.ssh\id_rs ...
- 【zznu-夏季队内积分赛3-G】2333
题目描述 “别人总说我瓜,其实我一点也不瓜,大多数时候我都机智的一批“ 宝儿姐考察你一道很简单的题目.给你一个数字串,你能判断有多少个连续子串能整除3吗? 输入 多实例输入,以EOF结尾,每行一个数字 ...
- 一、html <!doctype>标签
一.html <!doctype>标签 定义和用法 <!DOCTYPE> 声明必须是 HTML 文档的第一行,位于 <html> 标签之前. <!DOCTYP ...
- kibana安装
kibana,ELK中的K,主要为ES提供界面化操作,据说还是比较炫的,今天安装5.5.2版本进行尝试一把. 安装过程不难,简单的配置了一下端口和IP即可,难度不大. config下的kibana.y ...
- Git 之 问题集锦
准备:远程仓库名:origin 远程分支:master.tt 本地分支:master.test 1. error: src refspec *** does not match an ...