HA集羣的簡介以及怎麼搭建一個HA集羣

1、背景

     在Hadoop 2.0.0之前,NameNode是HDFS集羣中的單點故障(SPOF)。每個羣集都有一個NameNode,如果該機器或進程變得不可用,整個羣集將無法使用,直到NameNode重新啓動或在單獨的計算機上啓動。

這在兩個主要方面影響了HDFS集羣的總體可用性:

  • 對於計劃外事件(例如計算機崩潰),在操作員重新啓動NameNode之前,羣集將不可用。

  • 計劃維護事件(如NameNode計算機上的軟件或硬件升級)將導致羣集停機時間窗口。

2、原因

      普通的完全分佈式集羣只有一個主節點,它的namenode存在單節點故障,如果namenode一旦出現故障,整個集羣將處於癱瘓狀態。爲了解決這個問題便出現了HA集羣,HA又稱爲hdfs的高可用性。

高可用性的簡介:
    a.只有兩臺獨立的計算機配置爲NameNode,其中一個NameNode處於活動狀態(active),另外一個Namenode只是充當從屬服務器(Standby)
    b.在集羣中配置一組"journalnode",記錄活躍Namenode的編輯信息,同時傳給備份Namenode,並防止"腦裂情景"的發生(JournalNodes只允許一個NameNode一次成爲一個writer)
    c.datanode要向兩個Namenode進行心態反饋

3、硬件需求

        ---->一個主節點master

        ----->三個及三個以上的從節點slave1、slave2、slave3

4、配置文件(注:我的主節點是master,要在salve1上配置namenode)

(1)在< hdfs-site.xml> 中

a.配置名稱服務的暱稱(也就是另外一個namenode的名稱)
    <property>
    <name>dfs.nameservices</name> 
    <value>mycluster</value>
    </property>

b.爲名稱服務配置相應的ID唯一標識符:用逗號分開,注意:目前,每個名稱服務最多隻能配置兩個NameNode。
    <property>
    <name>dfs.ha.namenodes.mycluster</name>
    <value>nn1,nn2</value>
    </property>

c.爲名稱服務的唯一標識符,配置獨立完整的rpc地址
    <property>
    <name>dfs.namenode.rpc-address.mycluster.nn1</name>
    <value>master1:9000</value>
    </property>
    <property>
    <name>dfs.namenode.rpc-address.mycluster.nn2</name>
    <value>slave1:9000</value>
    </property>

d.配置webui的訪問地址
    <property>
      <name>dfs.namenode.http-address.mycluster.nn1</name>
      <value>master1:50070</value>
    </property>
    <property>
      <name>dfs.namenode.http-address.mycluster.nn2</name>
      <value>slave1:50070</value>
    </property>

f.指定journalnode守護進程所在的機器,及其指定目錄(即重用名稱服務的值)
    <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://master1:8485;slave2:8485;slave3:8485/mycluster</value>
    </property>

g.配置client用於聯繫ActiveNamenode的java類型
    <property>
    <name>dfs.client.failover.proxy.provider.mycluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>

h.配置防護方式:sshfence,讓journalnode守護進程防止腦裂的產生,還必須配置無密碼登陸
     <property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
    </property>

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

(2)在<core-site.xml>中

a.配置默認的namenode的請求路徑
    <property>
      <name>fs.defaultFS</name>
      <value>hdfs://mycluster</value>
    </property>

b.配置journalnode所產生的目錄的具體路徑(說明:mycluster目錄的位置)
    <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/home/hyxy/apps/hadoop/tmp</value>
    </property>

5、配置具體步驟

         a.配置文件完成後,首先啓動相應節點上的journalnode守護進程(因爲我要在slave1上配置namenode,所以我要在另外三個節點上先啓動journalnode)
     命令如下:
         hadoop-daemon.sh start journalnode

      b.同步元數據

         此時會有兩種情況:

                    情況1、如果是新搭建的集羣,選擇其中一個namonde所在的機器進行格式化。
                        ]$ hdfs namenode -format

                    情況2、將已經格式化的namenode的元數據同步到另外一個未格式化的namenode上,目的就是在另一個未格式化的機器上
          生成${hadoop.tmp.dir}/dfs/name,存儲最新的鏡像文件:步驟如下-->

                       --1.開啓格式化好的namenode(也就是開啓master的namenode)
                                hadoop-daemon.sh start namenode
                     --2.在未格式化的namenode上,運行如下命令,同步元數據(也就是在你的slave1上開啓)  
                               hdfs namenode -bootstrapStandby  

        c.將本地的元數據初始化到journalnode裏(在master中)

           --1.關閉namenode
               hahadoop-daemon.sh stop namenode
          --2.初始化,注意,journalnode必須是開啓的(n-1/2)
               hdfs namenode -initializeSharedEdits

      d.開啓HA集羣
         start-dfs.sh

         註釋:此時在master和slave1中都顯示是standby

     e.把一個namenode變成活躍節點(此時把master變成活躍節點)

           hdfs haadmin -transitionToActive nn1

6、測試

   a.查看兩個namenode的50070的狀態信息

  c. 上傳文件/創建目錄到HA

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章