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很快的切换到另外一台机器。
###配置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对几台机器的时间很重要,时间必须同步
下一篇: 自定义Mesh动态绘制
推荐阅读
-
HDFS HA 架构分析
-
Spark架构原理-Checkpoint原理剖析和源码分析
-
今日头条技术架构分析 博客分类: 程序员项目管理互联网技术 软件架构今日头条技术架构程序员
-
ELK 日志分析系统 博客分类: ELK架构 ELK日志架构
-
pystun 和 py2exe 以及 NAT类型检测 博客分类: Python分析-设计-架构 stunpystunpy2exewindowscx_freeze
-
【Kubeflow】KFServing的架构分析
-
Android视图控件架构分析之View、ViewGroup
-
Android视图控件架构分析之View、ViewGroup
-
java连接hdfs ha和调用mapreduce jar示例
-
java连接hdfs ha和调用mapreduce jar示例