Hadoop2.6.5架構圖+集羣搭建---使用QJM實現HA

在Hadoop 2.0.0之前,NameNode在HDFS集羣中容易形成單點故障(SPOF)。每個羣集都只有一個NameNode,如果該機器或進程變得不可用,整個羣集將無法使用,直到NameNode重新啓動或在單獨的計算機上啓動
這在兩個主要方面影響了HDFS集羣的總體可用性:
1. 對於計劃外事件(例如計算機崩潰),在操作員重新啓動NameNode之前,羣集將不可用。
2. 計劃維護事件(如NameNode計算機上的軟件或硬件升級)將導致羣集停機。

HDFS高可用性功能通過提供在具有熱備用的主動/被動配置中的同一羣集中運行兩個冗餘NameNode的方法來解決上述問題。這允許在機器崩潰的情況下快速故障轉移到新的NameNode,或者爲了計劃維護而優雅地管理員啓動的故障轉移。

High Availability With QJM 架構圖

在這裏插入圖片描述


Active NameNode—Standby NameNode

在典型的HA羣集中,有兩臺獨立的計算機配置爲NameNode。在任何時間點,其中一個NameNode處於活動狀態,另一個處於待機狀態。Active NameNode負責集羣中的所有客戶端操作,而Standby只是充當從屬服務器,維持足夠的狀態以在必要時提供快速故障轉移。而且在HA羣集中,備用NameNode還會執行命名空間狀態的檢查點,因此無需在HA羣集中運行Secondary NameNode,CheckpointNode或BackupNode

Active NameNode—DataNode—Standby NameNode

爲了提供快速故障轉移,備用節點還必須具有關於羣集中塊的位置的最新信息。爲了實現這一點,DataNode配置了兩個NameNode的位置,並向兩者發送塊位置信息和心跳。

Active NameNode—JN—Standby NameNode

“JournalNodes”JN節點同步兩臺NameNode的日誌信息,使兩臺節點同步。一般又多臺機器,Active節點執行任何名稱空間修改時,它會將修改記錄持久地記錄到大多數這些JN中,這裏有過半機制,過半數的JN節點得到更新。JN的個數應該爲3、5、7這種單數,系統最多允許(N-1)/ 2個JN節點故障。待機節點能夠從JN讀取編輯,並且不斷觀察它們對編輯日誌的更改。當備用節點看到編輯時,它會將它們應用到自己的命名空間。如果發生故障轉移,Standby將確保在將自身升級爲Active狀態之前已讀取JounalNodes的所有編輯內容。這可確保在發生故障轉移之前完全同步命名空間狀態。
對於HA羣集的正確操作而言,一次只有一個NameNode處於活動狀態至關重要。因此JournalNodes只允許一個NameNode編輯。


配置細節

在這裏插入圖片描述
先做免祕鑰(namenode可以控制其他節點,zkfc可以控制namenode,zookeeper之間要免祕鑰),啓動zookeeper,順序啓動JN,格式化namenode,格式化zookeeper

zookeeper (環境變量+數據文件夾+節點ip+本機id)
#解壓zookeeper安裝包,將bin目錄添加到環境變量中。
#修改conf文件夾下的zoo.cfg文件,由zoo_sample.cfg複製得到
#添加
dataDir=/var/sxt/hadoop/zk

server.1=192.168.112.12:2888:3888
server.2=192.168.112.13:2888:3888
server.3=192.168.112.14:2888:3888
#保存退出
將本機的zookeeper序號存入zookeeper數據文件夾下的myid文件
[root@node02 conf]# mkdir -p /var/sxt/hadoop/zk
[root@node02 conf]# echo 1> /var/sxt/hadoop/zk/myid
#將編輯好的包scp到其他zookeeper節點中,並修改myid和環境變量
#啓動zookeeper(先關閉防火牆)
#啓動
zkServer.sh start
#查看狀態
zkServer.sh status
#半數以上的zookeeper節點啓動纔會真正啓動,且序號最大的先有一個成爲leader 其他的是follow Node
Hadoop
修改hdfs-site.xml(先去掉第二名稱節點的配置)
<!--邏輯到物理的映射,http監聽端口,JN設置,失敗轉換機制-->
<configuration>
    <!--副本數-->
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>

    <!--namenode的物理和邏輯映射-->
    <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>

    <!--JN節點配置-->
    <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_dsa</value>
    </property>
    <!--故障轉移開關-->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
</configuration>
修改 core-site.xml
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/var/sxt/hadoop/ha</value>
    </property>
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>node02:2181,node03:2181,node04:2181</value>
    </property>
</configuration>
修改slaves

將datanode節點寫入slaves,一個節點佔一行,注意不能有空行和空格

將修改的兩個配置文件scp給其他節點
[root@node01 hadoop]# scp core-site.xml hdfs-site.xml node02:`pwd`
core-site.xml         100% 1089   630.3KB/s   00:00    
hdfs-site.xml         100% 2187     2.0MB/s   00:00    
[root@node01 hadoop]# scp core-site.xml hdfs-site.xml node03:`pwd`
core-site.xml         100% 1089   115.4KB/s   00:00    
hdfs-site.xml         100% 2187     2.0MB/s   00:00    
[root@node01 hadoop]# scp core-site.xml hdfs-site.xml node04:`pwd`
core-site.xml         100% 1089   215.7KB/s   00:00    
hdfs-site.xml         100% 2187   997.5KB/s   00:00  
啓動
#啓動三臺JN
[root@node01 .ssh]# hadoop-daemon.sh start journalnode
starting journalnode, logging to /opt/sxt/hadoop-2.6.5/logs/hadoop-root-journalnode-node01.out
#格式化一臺想成爲active節點的nameNode
[root@node01 .ssh]# hdfs namenode -format
#啓動namenode
[root@node01 .ssh]# hadoop-daemon.sh start namenode
#在另一臺啓動Standby節點
hdfs namenode -bootstrapStandby
#格式化zookeeper
[root@node01 .ssh]# hdfs zkfc -formatZK
#啓動某zookeeper
[root@node04 .ssh]# zkCli.sh 
#啓動nameNode
[root@node01 .ssh]# start-dfs.sh 
Starting namenodes on [node01 node02]
node02: starting namenode, logging to /opt/sxt/hadoop-2.6.5/logs/hadoop-root-namenode-node02.out
node01: namenode running as process 94463. Stop it first.
node02: starting datanode, logging to /opt/sxt/hadoop-2.6.5/logs/hadoop-root-datanode-node02.out
node03: starting datanode, logging to /opt/sxt/hadoop-2.6.5/logs/hadoop-root-datanode-node03.out
node04: starting datanode, logging to /opt/sxt/hadoop-2.6.5/logs/hadoop-root-datanode-node04.out
Starting journal nodes [node01 node02 node03]
node01: journalnode running as process 94079. Stop it first.
node02: journalnode running as process 46571. Stop it first.
node03: journalnode running as process 45678. Stop it first.
Starting ZK Failover Controllers on NN hosts [node01 node02]
node01: starting zkfc, logging to /opt/sxt/hadoop-2.6.5/logs/hadoop-root-zkfc-node01.out
node02: starting zkfc, logging to /opt/sxt/hadoop-2.6.5/logs/hadoop-root-zkfc-node02.out

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