第一种实现方式基于zk的选举方式实现
实现思想|:2个Namenode分别独立运行在2个物理节点上,对外提供服务的为主Namenode,即为Active Namenode,处于热备状态的为Standby Namenode ,当Active Namenode所在的机器宕机之后,Standby具备什么样的条件才能接受之前Active Namenode的工作呢?我主要总结2点
a:Standby Namenode拥有之前Active namenode的对外提供的所有服务信息,这就需要ZK维护一组守护进程journal node,,处于工作状态的Active node需要将自己对外提供的所有服务信息写在一半以上的journode node的目录里(这些信息被记为editlog) 处于热备状态的 Standby namenode会随时监听journalode的工作目录,只要有所更新改变,热备状态下的Standby node会读取这些信息。并更新自己内部的名命空间,此时Standy namenode和Active namenode都拥有对外提供的服务信息
b:所有的Datanode都要向主Namenode和热备Namenode进行心跳报告,使得2个namenode都了解datanode的健康状态以及数据存放在哪个Datanode上.
总上所述,基于zk实现的Ha的机制,具备以上条件,就是一个真正意义上的HA
第二种实现方式,基于facebook的Avator node实现
实现思想:基于这种方式是需要进行人工的切换来实现,Avator node是对namenode的进行的封装,处于工作状态的是primary avator,处于热备状态的是standby avator,其中primary avator相当于Active node,standby avator是对namenode和secondary node进行的封装,2者共享同一个editlog工作目录,使得2个namenode都拥有相同的对外提供服且datanode都向2个封装的namenode报告心跳报告,当primary avator所在的机器挂掉之后,管理人员可以手动切换standby avator对外提供服务
上一篇: java培训JavaWeb之Servlet技术体系
下一篇: 前端培训面试题-移动端适配1px的问题