HDFS高可用(HA)配置

本文详细介绍HDFS高可用(HA)集群的配置步骤,包括各节点角色分配、配置文件详解及启动流程,并介绍了如何利用Zookeeper实现自动故障转移。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于HDFS HA如何进行设计,请查看——>HDFS高可用(HA)设计,以下的配置也都是根据此文中的设计方式进行配置,所以为了更好的理解下面各个配置的含义,务必先阅读此文。

对各个节点进行划分:

选项主机1主机2主机3
NameNodeNameNode
JournalNodeJournalNodeJournalNode
DataNodeDataNodeDataNode

此处不再需要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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值