zoukankan      html  css  js  c++  java
  • HA高可用

    HA:高可用
    -----------------------------------------------------------
    1.Quorum Journal Manager:群体日志管理
      个数2n+1个,保证节点宕机次数为(n-1)/2;一般情况下,JNS在slave节点开启;
    2.HA的namenode个数:一定是两个:nn1和nn2;
    3.搭建HA步骤:
    0.创建软连接:指向hadoop_cluster_HA
    1.修改【hdfs-site.xml】
      <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
      </property>
      //指定两个namenode的唯一标识:注意一定是两个
      <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>
      </property>
      //修改namenode RPC访问端口
      <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>master:9000</value>
      </property>
      <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>slave1:9000</value>
      </property>
      //修改http-WEBUI访问端口
      <property>
        <name>dfs.namenode.http-address.mycluster.nn1</name>
        <value>master:50070</value>
      </property>
      <property>
        <name>dfs.namenode.http-address.mycluster.nn2</name>
        <value>slave1:50070</value>
      </property>
      //标识NameNodes写入/读取编辑的一组JNs的URI
      <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</value>
      </property>
      <property>
        <name>dfs.client.failover.proxy.provider.mycluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
      </property>

      <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
      </property>

      <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/exampleuser/.ssh/id_rsa</value>
      </property>

    2.修改【core-site.xml】
      <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value>
      </property>
      <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/home/hyxy/tmp/journal</value>
      </property>
    3.将所有的配置项分发至其他节点
      $>scp -r hadoop_cluater_ha hyxy@slave1:~/soft/hadoop/etc/
      $>scp -r hadoop_cluater_ha hyxy@slave2:~/soft/hadoop/etc/
    4.在【master:8485;slave1:8485;slave2:8485】三个节点上分别开启journalnode
      $>hadoop-daemon.sh start journalnode
      $>jps
    5.一旦启动了JournalNodes,就必须首先同步两个HA NameNodes的磁盘元数据。
      a.如果要设置新的HDFS集群,则应首先在其中一个NameNode上运行format命令
        $>hdfs namenode -format
        慎用!!!
      b.如果您已经格式化了NameNode,或者正在将启用了HA的群集转换为启用HA,
      在未格式化的NameNode上,则现在应该通过运行命令“ hdfs namenode -bootstrapStandby”将NameNode元数据目录的内容复制到另一个未格式化的NameNode上。
      运行此命令还将确保JournalNodes(由dfs.namenode.shared.edits.dir配置)包含足够的编辑事务,以便能够启动两个NameNode。
      确保JournalNodes开启,在nn2上执行以下命令;
        $>hadoop-daemon.sh start namenode(首先在nn1开启namenode进程)
        $>hdfs namenode -bootstrapStandby
      说明:将nn1节点的fsimage复制到nn2中【{HADOOP_TMP_DIR}/dfs/name】
      c.如果要将非HA NameNode转换为HA,则应运行命令“ hdfs namenode -initializeSharedEdits ”,该命令将使用来自本地NameNode编辑目录的编辑数据初始化JournalNodes。
      在nn1上,执行以下命令;
        $>hadoop-daemon.sh stop namenode(关闭namenode)
        $>hdfs namenode -initializeSharedEdits
    6.start-dfs.sh
    7.验证:分别打开WebUI,查看nn1和nn2的相关信息,均为standby(备用状态)
    8.HA 集群管理:
    用法:hdfs haadmin
    [ -transitionToActive <serviceId>] // 将给定NameNode的状态转换为Active
    [-transitionToStandby <serviceId>] // 将给定NameNode的状态转换为Standby
    [-failover [--forcefence] [--forceactive] <serviceId> <serviceId>]
    [-getServiceState <serviceId>]
    [-checkHealth <serviceId> ]
    [-help <command>]

    手动切换Active/Standby状态:
      $>hdfs haadmin -transitionToActive nn1
      $>hadoop fs -put tt.txt
      $>hdfs haadmin -transitionToStandby nn1
      $>hdfs haadmin -transitionToActive nn2
      $>hadoop fs -put tt1.txt


    自动容灾
    -----------------------------------------------
    1.完成自动容灾,需在HDFS部署环境中增加两个组件:
      a.Zookeeper 集群
      b.ZKFC:zookeeper FailoverController process
    2.Zookeeper作用:
      Apache ZooKeeper是一种高可用性服务,用于维护少量协调数据,通知客户端该数据的更改以及监视客户端的故障。自动HDFS故障转移的实现依赖于ZooKeeper来实现以下功能:
      a.故障检测:集群中的每个NameNode计算机都在ZooKeeper中维护一个持久会话。如果计算机崩溃,ZooKeeper会话将过期,通知另一个NameNode应该触发故障转移。
      b.active活跃节点的选举:ZooKeeper提供了一种简单的机制,可以将节点专门选为活动节点。如果当前活动的NameNode崩溃,则另一个节点可能在ZooKeeper中采用特殊的独占锁,指示它应该成为下一个活动的。
    3.ZKFailoverController(ZKFC)作用:
      a.它是一个ZooKeeper客户端,它还监视和管理NameNode的状态。
      b.运行NameNode的每台机器也运行ZKFC,ZKFC负责:
      运行状况监视:ZKFC定期使用运行状况检查命令对其本地NameNode进行ping操作。只要NameNode及时响应健康状态,ZKFC就会认为该节点是健康的。如果节点已崩溃,冻结或以其他方式进入不健康状态,则运行状况监视器会将其标记为运行状况不佳。
      ZooKeeper会话管理:当本地NameNode运行正常时,ZKFC在ZooKeeper中保持会话打开。如果本地NameNode处于活动状态,它还拥有一个特殊的“锁定”znode。此锁使用  ZooKeeper对“临时”节点的支持; 如果会话到期,锁定节点将自动删除。
      选举制度:如果本地NameNode是健康的,并且ZKFC发现没有其他节点当前持有锁znode,它将自己尝试获取锁。如果成功,那么它“赢得了选举”,并负责运行故障转移以使其本地NameNode处于活动状态。故障转移过程类似于上述手动故障转移:首先,必要时对先前的活动进行隔离,然后本地NameNode转换为活动状态。
    4.安装zookeeper
      a.下载zookeeper3.4.6.tar.gz
      b.解压至【/home/hyxy/soft】
      c.创建软连接:$>ln -s zookeeper3.4.6/ zookeeper
      d.配置环境变量:在~/.bash_profile中追加
        export ZOOKEEPER_HOME=/home/hyxy/soft/zookeeper
        export PATH=$ZOOKEEPER_HOME/bin:$PATH
      e.修改【{ZOOKEEPER_HOME}/conf/zoo.cfg】zoo.cfg需cp
        tickTime=2000
        initLimit=10
        syncLimit=5
        dataDir=/home/hyxy/tmp/zookeeper
        clientPort=2181
      f.开启zookeeper Server
        $>zkServer.sh start
        $>jps
          5914 QuorumPeerMain //QuorumPeerMain:zookeeper Server的守护进程
          5931 Jps
      g.客户端连接:
        $>zkCli.sh
          5988 ZooKeeperMain //ZooKeeperMain:zookeeper client的守护进程
      h.关机Zookeeper Server
        $>zkServer.sh stop

     

     

     

  • 相关阅读:
    Java多线程之监控Java线程池运行状态
    JS自学笔记02
    JS自学笔记01
    JAVA自学笔记09
    前端自学笔记07
    前端自学笔记06
    前端自学笔记05
    前端自学笔记04
    前端自学笔记03
    前端自学笔记02
  • 原文地址:https://www.cnblogs.com/lyr999736/p/9381709.html
Copyright © 2011-2022 走看看