欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HDFS HA 架构分析

程序员文章站 2024-03-22 16:10:10
...

###单点故障(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 架构分析

HDFS HA 架构分析

###配置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
<property>
  <name>dfs.nameservices</name>
  <value>ns1</value>
</property>

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

---------------------------------
<property>
  <name>dfs.ha.namenodes.ns1</name>
  <value>nn1,nn2</value>
</property>
###################配置NameNode的RPC 地址###########
<property>
  <name>dfs.namenode.rpc-address.ns1.nn1</name>
  <value>hadoop-senior01.xiangkun:8020</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.ns1.nn2</name>
  <value>hadoop-senior02.xiangkun:8020</value>
</property>

###################配置NameNode的http web 地址#######
<property>
  <name>dfs.namenode.http-address.ns1.nn1</name>
  <value>hadoop-senior01.xiangkun:50070</value>
</property>
<property>
  <name>dfs.namenode.http-address.ns1.nn2</name>
  <value>hadoop-senior02.xiangkun:50070</value>
</property>


#配置NameNode的share 的edit编辑日志地址(必须奇数个) 地址###
<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://hadoop-seinor01.xiangkun:8485;hadoop-seinor02.xiangkun:8485;hadoop-seinor03.xiangkun:8485/ns1</value>
</property>

###################配置NameNode的proxy代理客户端#######
<property>
  <name>dfs.client.failover.proxy.provider.mycluster</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

###################配置NameNode的defenc隔离(要求NameNode之间能通过SSH无密码登录)#######
<property>
  <name>dfs.ha.fencing.methods</name>
  <value>sshfence</value>
</property>

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

################配置前创建这个目录#################
<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/opt/app/hadoop-2.5.0/data/dfs/jn</value>
</property>

###############替换掉之前默认的fs.defaultFS#############
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://ns1</value>
</property>


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
 <property>
   <name>dfs.ha.automatic-failover.enabled</name>
   <value>true</value>
 </property>
core-site.xml
 <property>
   <name>ha.zookeeper.quorum</name>
   <value>hadoop-senior01.xiangkun:2181,hadoop-senior02.xiangkun:2181,hadoop-senior03.xiangkun:2181</value>
 </property>

###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 架构分析