HDFS HA 架构分析

###单点故障(single point of failure,SPOF)

  • Hadoop2.0之前,在HDFS集群中 NameNode 存在单点故障。对于只有一个NameNode的集群,若NameNode机器出现故障,则整个集群将无法使用,直到NameNode
    重新启动。
  • NameNode主要在以下两个发面影响HDFS集群
    -NameNode机器发生意外,如宕机,集群将无法使用,直到管理员重启
    -NameNode机器需要升级,包括软件、硬件升级,此时集群也将无法使用
  • HDFS HA 功能通过配置Active/Standby两个NameNodes实现在集群中对NameNode的热备来解决上述问题。如果出现故障,如机器崩溃或机器需要升级维护,这时可通过此种方式将NameNode很快的切换到另外一台机器。

HDFS HA 架构分析_第1张图片

HDFS HA 架构分析_第2张图片

###配置HA要点:

  • 编辑日志文件共享 share edits
    通过JournalNode进行配置

  • NameNode(Active,Standby)

  • Client访问NameNode通过代理Proxy完成

  • fence
    ActiveNameNode和StandbyNameNode的隔离
    同一时刻,仅仅有一个NameNode对外提供服务
    两个NameNode之间能够ssh无密码登录

 规划集群
	131			132 			133
  NameNode			NameNode
 
  JournalNode			JournalNode		JournalNode


  DataNode			DataNode		DataNode

三台机器分别备份etc/hadoop和date/tmp文件

备份hadoop: $ cp -r hadoop/ dist-hadoop

备份tmp :$mv tmp/ dist-tmp

$mkdir tmp

core-site.xml

  dfs.nameservices
  ns1


hdfs-site.xml
删除属性:
1.dfs.namenode.secondary.http-address
2.dfs.replication

---------------------------------

  dfs.ha.namenodes.ns1
  nn1,nn2

###################配置NameNode的RPC 地址###########

  dfs.namenode.rpc-address.ns1.nn1
  hadoop-senior01.xiangkun:8020


  dfs.namenode.rpc-address.ns1.nn2
  hadoop-senior02.xiangkun:8020


###################配置NameNode的http web 地址#######

  dfs.namenode.http-address.ns1.nn1
  hadoop-senior01.xiangkun:50070


  dfs.namenode.http-address.ns1.nn2
  hadoop-senior02.xiangkun:50070



#配置NameNode的share 的edit编辑日志地址(必须奇数个) 地址###

  dfs.namenode.shared.edits.dir
  qjournal://hadoop-seinor01.xiangkun:8485;hadoop-seinor02.xiangkun:8485;hadoop-seinor03.xiangkun:8485/ns1


###################配置NameNode的proxy代理客户端#######

  dfs.client.failover.proxy.provider.mycluster
  org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider


###################配置NameNode的defenc隔离(要求NameNode之间能通过SSH无密码登录)#######

  dfs.ha.fencing.methods
  sshfence



  dfs.ha.fencing.ssh.private-key-files
  /home/xiangkun/.ssh/id_rsa


################配置前创建这个目录#################

  dfs.journalnode.edits.dir
  /opt/app/hadoop-2.5.0/data/dfs/jn


###############替换掉之前默认的fs.defaultFS#############

  fs.defaultFS
  hdfs://ns1



QJM HA 启动(启动前,之前配置的core-site.xml/hdfs-site.xml要同步到其它机器上)

#####step 1: 在各个JournalNode节点上,输入以下命令启动journalnode服务:(三台机器都有,都要启动)
$sbin/hadoop-daemon.sh start journalnode
#####step2:在[nn1]上,对其进行格式化,并启动:
$bin/hdfs namenode -format
$bin/hadoop-daemon.sh start namenode
#####step3:在[nn2]上,同步nn1的元数据信息:
$bin/hdfs namenode -bootstrapStandby
#####step4:启动[nn2]:
$sbin/hadoop-deamon.sh start namenode
#####step5:将[nn1]切换为Active
$bin/hdfs haadmin -transitionToActive nn1
#####step6:在[nn1]上,启动所有datanode
$sbin/hadoop-deamons.sh start datanode

###HA 自动故障转移 Zookeeper

  • 启动以后都是Standby
    • 选举一个为Active
  • 监控
    - ZKFC
    FailoverController

规划集群
131 | 132 | 133
—|---|—
NameNode | NameNode||
—|---|—
ZKFC | ZKFC||
JournalNode | JournalNode | JournalNode
—|---|—
DataNode | DataNode | DataNode

hdfs-site.xml
 
   dfs.ha.automatic-failover.enabled
   true
 
core-site.xml
 
   ha.zookeeper.quorum
   hadoop-senior01.xiangkun:2181,hadoop-senior02.xiangkun:2181,hadoop-senior03.xiangkun:2181
 

###NN HA自动故障转移

  • 启动
  • 关闭所有HDFS服务 sbin/stop-dfs.sh
  • 启动Zookeeper集群 bin/zkServer.sh start
  • 初始化HA 在Zookeeper中状态 bin/hdfs zkfc -formatZK
  • 启动HDFS 服务 sbin/start-dfs.sh
  • 在各个NameNode节点上启动DFSZK Failover Controller,先在那个机器的NameNode就是Active NameNode
    sbin/hadoop-deamon.sh start zkfc
  • 验证
    • 将Active NameNode 进程kill,命令: kill -9 pid
    • 将Acitve NameNode机器断开网络,命令:service network stop

###NameNode管理命令

  • bin/hdfs namenode
    [-backup]
    [-checkpoint]
    [-importCheckpoint]
    [-format [-clusterid cid][-force][-nonInteractive]]
    [-upgrade]
    [-rollback]
    [-finalize]
    [-initializeSharedEdits]
    [-bootstrapStandby]
    [-recover[-force]]
  • bin/hdfs haadmin 切换两个

Zookeeper挂了,只是不能自动故障转移,不影响整个hdfs集群
Zookeeper对几台机器的时间很重要,时间必须同步

HDFS HA 架构分析_第3张图片

你可能感兴趣的:(大数据-hadoop)