hadoop2.0 HA的主備自動切換

在《hadoop2.0 QJM方式的HA的配置》一文中介紹了HA的配置,是通過手工進行主備切換的。本文在這基礎上,繼續介紹HA的主備自動切換(automatic failover)的配置。自動切換是通過配置zookeeper來實現的,關於zookeeper的安裝和配置,在這裏不做介紹了,大家可以參考網上的資料。

1 準備  

假定已經有一個zookeeper的集羣,3臺機器如下:

  • zookeeper1

  • zookeeper2

  • zookeeper3

兩個namenode節點如下:

  • namenode1

  • namenode2

2 配置  

只涉及到core-site.xml和hdfs-site.xml兩個配置文件,其他配置可以文件參考《hadoop2.0的安裝和基本配置》一文。

2.1 core-site.xml  

需要增加ha.zookeeper.quorum參數,加上zookeeper的服務地址

完整配置如下:

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://mycluster</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/home/tmp/hadoop2.0</value>
        </property>
        <property>
                <name>ha.zookeeper.quorum</name>
                <value>zookeeper1:2181,zookeeper2:2181,zookeeper3:2181</value>
        </property>
</configuration>

2.2 hdfs-site.xml  

<configuration>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>/home/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>/home/dfs/data</value>
        </property>
        <property>
                <name>dfs.permissions</name>
                <value>false</value>
        </property>
        <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>namenode1:8020</value>
        </property>
        <property>
                <name>dfs.namenode.rpc-address.mycluster.nn2</name>
                <value>namenode2:8020</value>
        </property>
        <property>
                <name>dfs.namenode.http-address.mycluster.nn1</name>
                <value>namenode1:50070</value>
        </property>
        <property>
                <name>dfs.namenode.http-address.mycluster.nn2</name>
                <value>namenode2:50070</value>
        </property>
        <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://journalnode1:8485;journalnode2:8485;journalnode3:8485/mycluster</value>
        </property>
        <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>/home/dfs/journal</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>shell(/bin/true)</value>
        </property>
        <property>
                <name>dfs.ha.automatic-failover.enabled</name>
                <value>true</value>
        </property>
</configuration>
  • dfs.ha.automatic-failover.enabled

需要設置爲true,啓動自動切換。

  • dfs.ha.fencing.methods

這裏我們把fencing方法設置爲shell,一是爲了方便測試,二是採用QJM方式的HA本身就有fencing功能,不需要用這個參數中的fencing功能,詳解請參考《hadoop2.0 QJM方式的HA的配置》一文。你用sshfence的方法也是可以的,不過要注意ssh連接的問題和一些權限的問題。

3 在zookeeper中初始化  

$HADOOP_HOME/bin/hdfs zkfc -formatZK

運行這個命令後,會在zookeeper上創建一個/hadoop-ha/mycluster/的znode,用來存放automatic failover的數據。

4 啓動zkfc(zookeeper failover controller)  

需要在namenode1和namenode2上都啓動zkfc daemon進程。

$HADOOP_HOME/sbin/hadoop-daemon.sh start zkfc

5 啓動HDFS  

可以參考《hadoop2.2.0 的安裝和基本配置》和《hadoop2.0 QJM方式的HA的配置》這兩篇文章。

在兩個namenode都啓動之後,會發現,其中一個namenode會自動切換成active狀態,不需要手工切換。

6 測試  

現在可以享受我們的勝利成果了。我們把active namenode停掉後,會看到standby namenode自動切換成active狀態了。

7 QJM方式HA automatic failover的結構圖

QJM方式HA的結構涉及到active namenode,standby namenode,journalnode,datanode,zookeeper,zkfc,client,這裏通過一個圖描述他們之間的關係。

wKiom1NcVi_RWDZiAAJXRRkSiQU224.jpg

8 實戰tips  

  • zookeeper可以在hadoop集羣中選幾臺機器同時作爲zookeeper節點,給HA私用。

  • 在實踐中建議採用手工切換的方式,這樣更可靠,也方便查找問題。


參考資料  

http://hadoop.apache.org/docs/r2.2.0/hadoop-yarn/hadoop-yarn-site/HDFSHighAvailabilityWithQJM.html


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