高可用的完全分佈式搭建
HA HDFS結構圖
這種設計模式的特點:
①採用了兩個namenode,一個對外提供服務,一個同步備份namenode元數據以待切換,防止發生異常,導致namenode掛掉。
②所有的datenode同時向兩個NameNode彙報數據塊信息。
③JN集羣用於備份傳遞ANN的信息和文件
④兩個NN,啓動時一個會處於activity,一個會處於standby狀態
⑤處於standby狀態的節點,用於備份和完成edits.log文件的合併,併產生新的image,推送回處於actiity狀態的NN
兩種切換模式
①手動切換:通過命令實現主備之間的切換,可以用HDFS升級等場合
②自動切換:基於Zookeeper實現
Zookeeper自動切換方案
①ZooKeeper Failover Controller:監控NameNode健康狀態
②並向Zookeeper註冊NameNode
③NameNode掛掉後,ZKFC爲NameNode競爭鎖,獲得ZKFC 鎖的NameNode變爲active
JN權值分配
選舉規則:大於半數以上,則獲得選舉權
HA HDFS配置節點表
集羣搭建步驟
配置免密登錄
node01->node01
node01->node02
node01->node03
node01->node04
node02->node01
配置所有節點的JDK
修改hdfs-site.xml配置文件
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>node01:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>node02:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>node01:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>node02:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/var/sxt/hadoop/ha/jn</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</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>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
修改core-site.xml配置文件
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/abc/hadoop/cluster</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node02:2181,node03: 2181,node04:2181</value>
</property>
修改slaves配置文件
node02
node03
node04
將配置好的HDFS安裝包拷貝到node02 node03 node04
格式化NameNode(創建目錄以及文件)
① 在node01、node02、node03分別執行如下命令
hadoop-daemon.sh start journalnode
② 隨機選擇一臺NameNode執行:
hdfs namenode -format
hadoop-daemon.sh start namenode
③ 另外一臺NameNode節點執行:
hdfs namenode -bootstrapStandby
格式化ZKFC
hdfs zkfc -formatZK
關閉所有節點上的進程
stop-dfs.sh
啓動HDFS
start-dfs.sh
搭建zookeeper集羣
1,解壓
2,修改conf目錄下的zoo_sample.cfg的名稱,改爲zoo.cfg
mv zoo_sample.cfg zoo.cfg
3,修改zoo.cfg
dataDir=/var/zfg/zookeeper
server.1=node02:2888:3888
server.2=node03:2888:3888
server.3=node04:2888:3888
4,在dataDir目錄下創建一個myid文件,在這個文件中寫上當前節點ID號
5,將配置好的zookeeper安裝包拷貝到node03 node04
6,拷貝完畢後,在各自節點上創建myid號,ID號要依次遞增