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

 

 

 

猜你喜欢

转载自www.cnblogs.com/lyr999736/p/9381709.html