zoukankan      html  css  js  c++  java
  • HDFS HA(High Availability)高可用性

    HDFS HA(High Availability)高可用性
    参考文献:

    官方文档

    全文翻译

    Hadoop组件之-HDFS(HA实现细节)


    这张图片的个人理解
    由于NameNode在Hadoop1只有一个节点,可能存在(SPOF)single point of file单节点故障。包括机器故障,软件硬件升级等。
    在Hadoop2砍死你使用两台机器配置为NameNode,在任何时候,只有一个处于Active状态。为了保证两个NameNode节点的数据统一性,1:datanode同时向两个NameNode发送心跳和块报告;2:NameNode中磁盘存储的文件主要有镜像文件和编辑日志,通过JournalNode日志节点保证edits文件的可靠性。如下图:

    ![](http://images2015.cnblogs.com/blog/1047249/201707/1047249-20170709182235228-2073804790.png)
    无ZKFC
    ![](http://images2015.cnblogs.com/blog/1047249/201707/1047249-20170710113906134-727438154.jpg)
    有ZKFC
    active的NameNode向JournalNode写如日志文件,standby的NameNode读取JournalNode中的数据,以达到编辑日志文件的同步。 通过Zookeeper的ZKFailoverContral来监控active的健康状态,一旦出现问题,安排Client访问第二个NameNode,从而实现熱备。

    需要配置的四个地方(遵循官方文档即可)

    1.share edits 
    	JournalNode
    2.NameNode
    	Active,Standby
    3.Client
    	Proxy代理(Zookper)
    4.fence(篱笆)
    	同一时刻仅有一个NameNode对外提供服务
    	隔离方式:
    		SSHfence:两个NameNode之间相互能够无密码登录
    

    hdfs-site.xml
    core-site.xml

    启动HA

    #1.在各个journalnode节点上启动journalNode服务
    $ sbin/hadoop-daemon.sh start journalnode
    #2.在nn1上对其进行格式化并启动
    $ bin/hdfs namenode -format
    $ sbin/hadoop-daemon.sh start namenode
    #3.在nn2上同步nn1上的源数据
    $ bin/hdfs namenode -bootstrapStandby
    #4.在nn2上启动NameNode节点
    $ sbin/hadoop-daemon.sh start namenode
    #此时,两个节点都是standby状态
    #5.将nn1节点的NameNode设置为activity
    $ bin/hdfs haadmin -transitionToActive nn1
    #获取状态
    $ bin/hdfs haadmin -getServiceState nn1
    #6.开启各个节点的DataNode
    $ sbin/hadoop-deamon.sh start datanode
    

    集群规划

    123 124 125
    NameNode NameNode
    ZKFC ZKFC
    JournalNode JournalNode JournalNode
    不需要SecondaryNameNode,因为不会出现重启情况
    

    Zookeeper用于自动故障转移

    配置依据官方文档即可

    启动带监控的HDFS HA服务器集群

    #1.关闭所有hdfs服务
    #2.启动ZK集群
    $ bin/zkServer.sh start
    #3.初始化HA在ZooKeeper中状态
    $ bin/hdfs zkfc -formatZK
    #4.启动HDFS文件系统,看到所有的NameNode节点上多了一个DFSZKFailoverController即zkfc启动成功
    可以通过kill -9 1234来验证
  • 相关阅读:
    构建调试Linux内核网络代码的环境MenuOS系统
    关于iOS开发证书的一些总结(很有用)
    iOS原型模式
    iOS不用调用,running time自动执行方法
    关于网络设计服务结构的一些理解
    iOS 6.0之后支持一个页面横屏的方法
    iOS返回一个前面没有0,小数点后保留两位的数字字符串
    CoreData总结
    分享一个复用代码块的博客
    分享一个可以打开沙盒的软件
  • 原文地址:https://www.cnblogs.com/cenzhongman/p/7142409.html
Copyright © 2011-2022 走看看