1. 程式人生 > >HDFS高可用(HA)配置

HDFS高可用(HA)配置

關於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