HA高可用
HA:高可用
-----------------------------------------------------------
1.Quorum Journal Manager:群體日誌管理
個數2n+1個,保證節點宕機次數為(n-1)/2;一般情況下,JNS在slave節點開啟;
2.HA的namenode個數:一定是兩個:nn1和nn2;
3.搭建HA步驟:
0.創建軟連接:指向hadoop_cluster_HA
1.修改【hdfs-site.xml】
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
//指定兩個namenode的唯一標識:註意一定是兩個
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
//修改namenode RPC訪問端口
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>master:9000</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>slave1:9000</value>
</property>
//修改http-WEBUI訪問端口
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>master:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>slave1:50070</value>
</property>
//標識NameNodes寫入/讀取編輯的一組JNs的URI
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</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>/home/exampleuser/.ssh/id_rsa</value>
</property>
2.修改【core-site.xml】
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hyxy/tmp/journal</value>
</property>
3.將所有的配置項分發至其他節點
$>scp -r hadoop_cluater_ha hyxy@slave1:~/soft/hadoop/etc/
$>scp -r hadoop_cluater_ha hyxy@slave2:~/soft/hadoop/etc/
4.在【master:8485;slave1:8485;slave2:8485】三個節點上分別開啟journalnode
$>hadoop-daemon.sh start journalnode
$>jps
5.一旦啟動了JournalNodes,就必須首先同步兩個HA NameNodes的磁盤元數據。
a.如果要設置新的HDFS集群,則應首先在其中一個NameNode上運行format命令
$>hdfs namenode -format
慎用!!!
b.如果您已經格式化了NameNode,或者正在將啟用了HA的群集轉換為啟用HA,
在未格式化的NameNode上,則現在應該通過運行命令“ hdfs namenode -bootstrapStandby”將NameNode元數據目錄的內容復制到另一個未格式化的NameNode上。
運行此命令還將確保JournalNodes(由dfs.namenode.shared.edits.dir配置)包含足夠的編輯事務,以便能夠啟動兩個NameNode。
確保JournalNodes開啟,在nn2上執行以下命令;
$>hadoop-daemon.sh start namenode(首先在nn1開啟namenode進程)
$>hdfs namenode -bootstrapStandby
說明:將nn1節點的fsimage復制到nn2中【{HADOOP_TMP_DIR}/dfs/name】
c.如果要將非HA NameNode轉換為HA,則應運行命令“ hdfs namenode -initializeSharedEdits ”,該命令將使用來自本地NameNode編輯目錄的編輯數據初始化JournalNodes。
在nn1上,執行以下命令;
$>hadoop-daemon.sh stop namenode(關閉namenode)
$>hdfs namenode -initializeSharedEdits
6.start-dfs.sh
7.驗證:分別打開WebUI,查看nn1和nn2的相關信息,均為standby(備用狀態)
8.HA 集群管理:
用法:hdfs haadmin
[ -transitionToActive <serviceId>] // 將給定NameNode的狀態轉換為Active
[-transitionToStandby <serviceId>] // 將給定NameNode的狀態轉換為Standby
[-failover [--forcefence] [--forceactive] <serviceId> <serviceId>]
[-getServiceState <serviceId>]
[-checkHealth <serviceId> ]
[-help <command>]
手動切換Active/Standby狀態:
$>hdfs haadmin -transitionToActive nn1
$>hadoop fs -put tt.txt
$>hdfs haadmin -transitionToStandby nn1
$>hdfs haadmin -transitionToActive nn2
$>hadoop fs -put tt1.txt
自動容災
-----------------------------------------------
1.完成自動容災,需在HDFS部署環境中增加兩個組件:
a.Zookeeper 集群
b.ZKFC:zookeeper FailoverController process
2.Zookeeper作用:
Apache ZooKeeper是一種高可用性服務,用於維護少量協調數據,通知客戶端該數據的更改以及監視客戶端的故障。自動HDFS故障轉移的實現依賴於ZooKeeper來實現以下功能:
a.故障檢測:集群中的每個NameNode計算機都在ZooKeeper中維護一個持久會話。如果計算機崩潰,ZooKeeper會話將過期,通知另一個NameNode應該觸發故障轉移。
b.active活躍節點的選舉:ZooKeeper提供了一種簡單的機制,可以將節點專門選為活動節點。如果當前活動的NameNode崩潰,則另一個節點可能在ZooKeeper中采用特殊的獨占鎖,指示它應該成為下一個活動的。
3.ZKFailoverController(ZKFC)作用:
a.它是一個ZooKeeper客戶端,它還監視和管理NameNode的狀態。
b.運行NameNode的每臺機器也運行ZKFC,ZKFC負責:
運行狀況監視:ZKFC定期使用運行狀況檢查命令對其本地NameNode進行ping操作。只要NameNode及時響應健康狀態,ZKFC就會認為該節點是健康的。如果節點已崩潰,凍結或以其他方式進入不健康狀態,則運行狀況監視器會將其標記為運行狀況不佳。
ZooKeeper會話管理:當本地NameNode運行正常時,ZKFC在ZooKeeper中保持會話打開。如果本地NameNode處於活動狀態,它還擁有一個特殊的“鎖定”znode。此鎖使用 ZooKeeper對“臨時”節點的支持; 如果會話到期,鎖定節點將自動刪除。
選舉制度:如果本地NameNode是健康的,並且ZKFC發現沒有其他節點當前持有鎖znode,它將自己嘗試獲取鎖。如果成功,那麽它“贏得了選舉”,並負責運行故障轉移以使其本地NameNode處於活動狀態。故障轉移過程類似於上述手動故障轉移:首先,必要時對先前的活動進行隔離,然後本地NameNode轉換為活動狀態。
4.安裝zookeeper
a.下載zookeeper3.4.6.tar.gz
b.解壓至【/home/hyxy/soft】
c.創建軟連接:$>ln -s zookeeper3.4.6/ zookeeper
d.配置環境變量:在~/.bash_profile中追加
export ZOOKEEPER_HOME=/home/hyxy/soft/zookeeper
export PATH=$ZOOKEEPER_HOME/bin:$PATH
e.修改【{ZOOKEEPER_HOME}/conf/zoo.cfg】zoo.cfg需cp
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hyxy/tmp/zookeeper
clientPort=2181
f.開啟zookeeper Server
$>zkServer.sh start
$>jps
5914 QuorumPeerMain //QuorumPeerMain:zookeeper Server的守護進程
5931 Jps
g.客戶端連接:
$>zkCli.sh
5988 ZooKeeperMain //ZooKeeperMain:zookeeper client的守護進程
h.關機Zookeeper Server
$>zkServer.sh stop
HA高可用