1. 程式人生 > >HA-高可用的HDFS搭建(hdfs+zookeeper)(一)

HA-高可用的HDFS搭建(hdfs+zookeeper)(一)

早期的Hadoop1.x版本,NN是HDFS叢集的單點故障點,每一個叢集只有一個NN,如果這個機器或程序不可用,整個叢集就無法使用。

為了解決這個問題在Hadoop2.x中藉助於中間特定的中間渠道解決單點故障點問題,官方文件中提供兩種解決方法: NFS和QJM


NFS:採用的是網路共享檔案模式

QJM:Quorum Journal Manager  是hdfs用來共享Action NameNode與Standby NameNode之間的edit logs

 Quorum Journal Manager (QJM) to share edit logs between the Active and Standby NameNodes

HA-hdfs的設計架構圖


  • 基本原理就是用2N+1臺 JN 儲存EditLog,每次寫資料操作有大多數(>=N+1)返回成功時即認為該次寫成功,資料不會丟失了。當然這個演算法所能容忍的是最多有N臺機器掛掉,如果多於N臺掛掉,這個演算法就失效了。這個原理是基於Paxos演算法
  • 在HA架構裡面SecondaryNameNode這個冷備角色已經不存在了,為了保持standby NN時時的與主Active NN的元資料保持一致,他們之間互動通過一系列守護的輕量級程序JournalNode
  • 任何修改操作在 Active NN上執行時,JN程序同時也會記錄修改log到至少半數以上的JN中,這時 Standby NN 監測到JN 裡面的同步log發生變化了會讀取 JN 裡面的修改log,然後同步到自己的的目錄映象樹裡面

關於原理的的知識暫時就不多說了

首先開始一步一步搭建吧

 簡單介紹概況:

Linux伺服器 4臺 node01 node02 node03 node04

各個節點分佈與使用

叢集節點分佈 
服務節點NN DNJNZKZKFC
node01111
node0211111
node03111
node0411

NN: namenode部署node01,node02

DN:datenode部署node02,node03node04

JN:journalnode 部署node02,node03node04

。。。就不依次介紹了

搭建前提要求:

 1. 最好配置有 ssh免金鑰(RSA)

 2. Zookeeper叢集環境(具體可以參考官網

  3. Hadoop安裝包


開始配置Hdfs的配置檔案

1. 解壓tar包

tar -xvf  hadoop-2.8.3.tar.gz 

2. 修改配置檔案

進入 解壓的檔案 的 etc/


 第一步:    

  修改hadoop-env.sh  的 JAVA_HOME的路徑(經常無法識別JAVA_HOME--所有直接指定路徑)

vim hadoop-env.sh   


第二步:

 修改   hdfs-site.xml  

 namenode服務名稱 
  <property>
     <name>dfs.nameservices</name>
     <value>hdfsServer</value>
   </property>
   
 namenode服務節點
  <property>
    <name>dfs.ha.namenodes.hdfsServer</name>
      <value>nn1,nn2</value>
  </property>
  
  namenode通訊RPC
   <property>
     <name>dfs.namenode.rpc-address.hdfsServer.nn1</name>
       <value>node01:8020</value>
    </property>

    <property>
        <name>dfs.namenode.rpc-address.hdfsServer.nn2</name>
        <value>node02:8020</value>
   </property>
   
   namenode通訊Http
   <property>
      <name>dfs.namenode.http-address.hdfsServer.nn1</name>
        <value>node01:50070</value>
        </property>
    <property>
        <name>dfs.namenode.http-address.hdfsServer.nn2</name>
        <value>node02:50070</value>
   </property>
JN   
    <property>
       <name>dfs.namenode.shared.edits.dir</name>
       <value>qjournal://node02:8485;node03:8485;node04:8485/hdfsServer</value>
    </property>

	 故障遷移
	 <property>
      <name>dfs.client.failover.proxy.provider.hdfsServer</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
	
	免金鑰
	<property>
           <name>dfs.ha.fencing.methods</name>
           <value>sshfence</value>
    </property>

    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
    </property>
 
	
	JN edits 檔案
	<property>
       <name>dfs.journalnode.edits.dir</name>
       <value>/root/hdpdata/journal/data</value>
     </property>

	啟動自動的故障遷移
<property>
   <name>dfs.ha.automatic-failover.enabled</name>
   <value>true</value>
 </property>


修改core-site.xml

 <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hdfsServer</value>
    </property>
	
	zookeeper叢集
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>node01:2181,node02:2181,node03:2181</value>
     </property>

注意:

完成上述配置後使用 scp -r  xxxx node02:$PWD  

將配置後的hadop配置檔案依次拷貝到不同的服務節點上

具體啟動方式見下篇文章 ---->  HA-高可用的HDFS搭建(hdfs+zookeeper)(二)