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 | DN | JN | ZK | ZKFC |
---|---|---|---|---|---|
node01 | 1 | 1 | 1 | ||
node02 | 1 | 1 | 1 | 1 | 1 |
node03 | 1 | 1 | 1 | ||
node04 | 1 | 1 |
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)(二)