Hadoop2.x高可用架构

Hadoop2.x

Hadoop高可用的架构

Hadoop2.x高可用架构_第1张图片

对于Hadoop高可用架构节点介绍

Hadoop2.x高可用架构_第2张图片

NN服务器会出现脑裂(brain-split)情况

什么是脑裂

在hadoop2.x版本中,如果存在两个NameNode节点同时服务,这种情况称之为“脑裂”

为什么会出现脑裂

脑裂出现原因一般发生在主备NamoNode切换,由于网络延迟、设备故障等,备用的StandbyNameNode【备用节点】认为ActiveNameNode【主节点】失效,此时StandbyNameNode会转换为活跃状态【主节点】,这时候如果原来的主节点自己恢复正常,这时候会出现两个主节点同时工作的情况

脑裂的场景

NameNode 可能会出现这种情况,NameNode 在垃圾回收(GC)时,可能会在长时间内整个系统无响应
zkfc客户端也就无法向 zk 写入心跳信息,这样的话可能会导致临时节点掉线,备 NameNode会切换到 Active 状态
这种情况可能会导致整个集群会有同时有两个Active NameNode

解决方案

  1. 在两个NameNode节点服务器中,都会有一个进程【ZKFC】监听当前NN服务器的健康状况
  2. 在集群启动后,使用第三方组件【这里使用Zookeeper】帮助选举主节点【ANN】,竞选完ANN后,会在Zookerper集群中创建选举成功后ANN信息,一个zookeeper临时节点(主节点服务器挂掉,临时节点就不存在),和一个正zookerper正常节点(在正常关闭ANN,正常节点也会关闭,如果是异常关闭ANN,正常节点存在)
  3. 切换主备节点方式
    3.1. 当备用节点【SNN】发现zookerper中,ANN的临时节点和正常节点都不存在,自己可以放心切换为新的ANN主节点
    3.2. 当SNN发现Zookerper中,原来ANN的临时节点不存在,正常节点存在的时候,如果直接切换自己为新的ANN可能出现脑裂
  4. 针对这两种情况,怎么切换主备服务器
    4.1 首先就使用RPC远程调用ANN服务器的ActiveBreadCrumb方法,尝试将原来的ANN切换为SNN
    4.2. 如果RPC远程调用失败,会执行预定义的隔离措施
  5. 隔离措施
    5.1. sshfence: 通过SSH(登陆信息在zookerper节点中存放,可以获取到)登陆到目标机器上,执行命令fuser将对应进城杀死
    5.2. shellfence:执行用户自定义的shell脚本讲对应的进城隔离
  6. 处理完毕原来的ANN服务器后,SNN就会调用becomoActive成为主节点,对外提供服务
  7. 新的ANN服务器也会在zookeeper中创建自己的临时节点和正常节点
    Hadoop2.x高可用架构_第3张图片

如果发生脑裂的,防止多条指令的情况

在每次选举之后,ANN都会产生一个新的序列号【可以理解为自增id】然后这个序列号会发送给DN
在每次NN服务器发送指令的时候,如果发生脑裂,多个NN服务器发送指令,DN服务器一最新的指令为准

联邦机制

什么是联邦机制

可以同时让多个NameNode参与数据的管理【这是水平拓展】

为什么使用联邦机制

== 单个NN节点使用存在局限性==

  • Namespace(命名空间)的限制
    - NameNode所能存储的对象(文件+块)数目受到NameNode所在JVM的heap size的限制。
    - 50G的heap能够存储20亿(200million)个对象,这20亿个对象支持4000个DataNode,
  • 12PB的存储
    - DataNode从4T增长到36T,集群的尺寸增长到8000个DataNode。存储的需求从12PB增长到大于100PB。
  • 性能的瓶颈
    - 整个HDFS文件系统的吞吐量受限于单个Namenode的吞吐量
  • 隔离问题
    - HDFS上的一个实验程序就很有可能影响整个HDFS上运行的程序
  • 集群的可用性
    - Namenode的宕机无疑会导致整个集群不可用。
  • Namespace和Block Management的紧密耦合
  • 纵向扩展目前的Namenode不可行
    - 将Namenode的Heap空间扩大到512GB启动花费的时间太长
    - Namenode在Full GC时,如果发生错误将会导致整个集群宕机

联邦机制架构

1:每个NameNode【这里使用高可用架构,存在主备节点】管理指定的文件内容
2:每个NameNode都管理维护一个NameSpace(命名空间池)
3:所有的DN服务器都都共享给全部NameSpace
Hadoop2.x高可用架构_第4张图片

  • 块池Block Pool
    - Block pool(块池)就是属于单个命名空间的一组block(块)管理区域
    - 每一个datanode为所有的block pool存储
    - Datanode是一个物理概念,而block pool是一个重新将block划分的逻辑概念
    - 一个Namenode失效不会影响其下的datanode为其他Namenode的服务
    - datanode与Namenode建立联系并开始会话后自动建立Block pool
  • Namespace Volume(命名空间卷)
    - 一个Namespace和它的Block Pool合在一起称作Namespace Volume
    - Namespace Volume是一个独立完整的管理单元。当一个Namenode/Namespace被删除,与之相对应的Block Pool也也被删除。
  • 通过多个namenode/namespace把元数据的存储和管理分散到多个节点中
    - 降低单个NN节点数据压力,计算压力
  • namenode/namespace可以通过增加机器来进行水平扩展
    - 可以让更多的节点参与到运算
    - namespace命名空间,通过这种方式确定要处理数据的路径
  • 我们可以通过namenode和namespace组合使用
    - 所有的nn共享dn
    - 但是每一个namespace会单独管理自己的块
    - 会创建一个管理块的机制:blocks pool

你可能感兴趣的:(java,Qauth2,计算机)