关于HDFS HA如何进行设计,请查看——>HDFS高可用(HA)设计,以下的配置也都是根据此文中的设计方式进行配置,所以为了更好的理解下面各个配置的含义,务必先阅读此文。
对各个节点进行划分:
选项 | 主机1 | 主机2 | 主机3 |
---|---|---|---|
NameNode | NameNode | ||
JournalNode | JournalNode | JournalNode | |
DataNode | DataNode | DataNode |
此处不再需要SecondaryNameNode,因为SecondaryNameNode的作用时合并镜像文件和日志文件,防止下次启动时读取数据的速度太慢,而配置高可用之后不需要再次启动。
这里的配置将基于之前已经配置过的hadoop分布式集群进行配置,集群搭建这里不再进行讨论,至于如何配置hadoop分布式集群,请查看——>Hadoop集群搭建——环境配置
配置HDFS HA
以下的配置也是根据官方文档进行的配置,您也可以直接查看官方文档
配置core-site.xml
<configuration>
<!--配置客户端的ns-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
<!--临时目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/bxp/Documents/install/hadoop-2.6.5-hdfsha/data/tmp</value>
</property>
<!--垃圾回收-->
<property>
<name>fs.trash.interval</name>
<value>420</value>
</property>
</configuration>
配置hdfs-site.xml
<configuration>
<!--nameservices,管理namenode的空间-->
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<!--配置nameservices所管理的namenode,即ns1管理的namenode为nn1,nn2-->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<!--配置两个namenode所在主机-->
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>hadoop-series.bxp.com:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>hadoop-series1.bxp.com:8020</value>
</property>
<!--配置两个namenode的web 50070端口-->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>hadoop-series.bxp.com:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>hadoop-series1.bxp.com:50070</value>
</property>
<!--jernalNode所在主机-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop-series.bxp.com:8485;hadoop-series1.bxp.com:8485;hadoop-series2.bxp.com:8485/ns1</value>
</property>
<!--配置客户端代理-->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--配置两个namenode之间的隔离方式-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!--此处是自己主机的ssh-key路径
注意:此处使用的是ssh隔离方式,必须提前配置两个namenode所在主机之间能够进行无密钥登陆,否则会失败
-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/bxp/.ssh/id_rsa</value>
</property>
<!--配置jernal日志文件存放在本地磁盘的那个目录下-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/bxp/Documents/install/hadoop-2.6.5-hdfsha/data/dfs/jn</value>
</property>
<!-- 副本数量不需要进行控制,默认就可以-->
<!--
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
-->
<!-- secondaryNamenode放在第hadoop-series2.bxp.com上-->
<!--
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop-series2.bxp.com:50070</value>
</property>
-->
</configuration>
启动HDFS HA集群
1、逐个启动journalnode
sbin/hadoop-daemon.sh start journalnode
2、格式化nn1,并启动nn1的namenod
bin/hdfs namenode -format
sbin/hadoop-daemon.sh start namenode
3、在nn2上执行如下命令从nn1上拷贝格式化生成的镜像文件,并启动nn2的namenode
bin/hdfs namenode -bootstrapStandby
sbin/hadoop-daemon.sh start namenode
4、逐个启动datanode
sbin/hadoop-daemon.sh start datanode
5、将nn1设置为Active NameNode
bin/hdfs haadmin -transitionToActive nn1
Zookeeper实现namenode间自动故障转移
启动后都是Standby,通过Zookeeper选举一个为Active。并通过zookeeper监控两个namenode。(ZKFC, FailoverController)
1、配置自动故障转移
hdfs-site.xml中增加如下配置
<!--下面时配置自动故障转移-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
core-site.xml中增加如下配置
<!--指定zookeeper所在主机-->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop-series.bxp.com:2181,hadoop-series1.bxp.com:2181,hadoop-series2.bxp.com:2181</value>
</property>
2、重新启动集群
(1)关闭所有的HDFS服务
(2)启动Zookeeper集群
zookeeper-3.5.0-alpha/bin/zkServer.sh start
(3)初始化HA在Zookeeper中状态
bin/hdfs zkfc -formatZK
初始化成功,会提示 Successfully created /hadoop-ha/ns1 in ZK.
通过zk客户端进行查看会发现确实创建了/hadoop-ha/ns1目录
zookeeper-3.5.0-alpha/bin/zkCli.sh
ls /hadoop-ha
(4)启动HDFS服务
在各个NameNode节点上启动DFSZK Failover Controller,现在哪个主机上启动,那个主机NameNode就是Active NameNode。
sbin/hadoop-daemon start zkfc
(5)验证自动故障转移配置成功。
将Active NameNode进程杀死,查看Standby是否会迅速转换成Active
kill -9 16299
将Active NameNode网络断开,查看Standby是否会迅速转换成Active
service network stop