天天看點

配置高可用(名稱節點高可用)

本文詳細配置名稱節點的高可用,什麼是高可用可參考官方文檔
說在前面
  • 工作環境:VMware® Workstation 12 Pro 12.5.6 build-5528349
  • linux版本:CentOS-7-x86_64-Minimal-1611.iso
  • JDK版本:jdk-8u65-linux-x64.tar.gz
  • Hadoop版本:hadoop-2.7.6.tar.gz
關于高可用
  • 滿足 24 * 365
    一年365天不間斷運作
  • 滿足 99.999% (5個9)
    一年最多當機 365 * 24 * 0.0001 = 1 小時
生産環境介紹
本文配置供需要5台主機,具體情況如下
  • 兩個名稱節點(s201, s205)
s201:192.168.32.201    //NameNode
s201:192.168.32.205    //NameNode
           
  • 三個資料節點
s202:192.168.32.202    //DataNode
s203:192.168.32.203    //DataNode
s204:192.168.32.204    //DataNode
           
詳細配置如下

1. 新增資料節點主機(s205),配置ssh

  • 生成秘鑰對,然後将公鑰發給其他主機(s201, s202, s203, s204)
$>ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

$>cd ~/.ssh
$>cat id_rsa.pub >> authorized_keys
$>chmod 644 authorized_keys

//重命名
$>mv id_rsa.pub id_rsa.pub.s205.0

$>scp id_rsa.pub.s205.0 [email protected]:/home/centosmin0/.ssh/authorized_keys
$>scp id_rsa.pub.s205.0 [email protected]:/home/centosmin0/.ssh/authorized_keys
$>scp id_rsa.pub.s205.0 [email protected]:/home/centosmin0/.ssh/authorized_keys
$>scp id_rsa.pub.s205.0 [email protected]:/home/centosmin0/.ssh/authorized_keys
           
  • 将s201主機的公鑰發送給主機s205
$>scp id_rsa.pub [email protected]:/home/centosmin0/.ssh/authorized_keys
           

2. 配置高可用生産環境

  • 從原生産環境(full)中複制出高可用生産環境(ha):
$> cp -r /soft/hadoop/etc/full ha
           
  • 将原生産環境(full)的符号連結指向高可用生産環境(ha):
xcall.sh "ln -sfT /soft/hadoop/etc/ha /soft/hadoop/etc/hadoop"
           
  • 使用批處理腳本分發給其他主機

3. 配置core-site.xml和hdfs-site.xml檔案(s201)

  • core-site.xml
<!-- 配置hdfs檔案系統名稱服務 -->
<property>
		<name>fs.defaultFS</name>
		<value>hdfs://mycluster</value>
</property>
           
  • hdfs-site.xml
<!-- 配置nameservice -->
<property>
	<name>dfs.nameservices</name>
	<value>mycluster</value>
</property>

<!-- myucluster下的名稱節點兩個id -->
<property>
	<name>dfs.ha.namenodes.mycluster</name>
	<value>nn1,nn2</value>
</property>

<!-- 配置每個nn的rpc位址 -->
<property>
	<name>dfs.namenode.rpc-address.mycluster.nn1</name>
	<value>s201:8020</value>
</property>
<property>
	<name>dfs.namenode.rpc-address.mycluster.nn2</name>
	<value>s205:8020</value>
</property>

<!-- 配置webui端口 -->
<property>
	<name>dfs.namenode.http-address.mycluster.nn1</name>
	<value>s201:50070</value>
</property>
<property>
	<name>dfs.namenode.http-address.mycluster.nn2</name>
	<value>s205:50070</value>
</property>

<!-- 名稱節點共享編輯目錄 -->
<property>
	<name>dfs.namenode.shared.edits.dir</name>
	<value>qjournal://s202:8485;s203:8485;s204:8485/mycluster</value>
</property>

<!-- java類,client使用它判斷哪個節點是激活态 -->
<property>
	<name>dfs.client.failover.proxy.provider.mycluster</name>
	<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

<!-- 腳本清單或者java類,在容災情況下保護激活态的nn -->
<property>
	<name>dfs.ha.fencing.methods</name>
	<value>sshfence</value>
</property>
<property>
	<name>dfs.ha.fencing.ssh.private-key-files</name>
	<value>/home/centosmin0/.ssh/id_rsa</value>
</property>
	
<!-- 配置JN存放edit的本地路徑 -->
<property>
	<name>dfs.journalnode.edits.dir</name>
	<value>/home/centosmin0/hadoop/journal</value>
</property>
           
  • 将檔案呢分發給其他主機(s202, s203, s204, s205, s206)

4. 部署細節

  • 在jn節點(每個資料節點就素一個jn節點)啟動jn程序(s202, s203, s204)
$>hadoop-daemon.sh start journalnode
           
配置高可用(名稱節點高可用)
  • 啟動jn之後,在兩個NN(名稱節點)之間進行disk中繼資料同步
    1. 如果是全新叢集,先format檔案系統,隻需要在一個nn上執行
    [s201]
    $>hadoop namenode -format
               
    1. 如果将非HA叢集轉換成HA叢集,複制原NN的metadata到另一個NN

      步驟一:清除原來的dfs

      [s201]

      $>scp -r /home/centos/hadoop/dfs [email protected]:/home/centos/hadoop/
                 
      步驟二:在新的NN(未格式化的NN)上運作以下指令(s205),實作待命狀态引導(注意:需要啟動s201的名稱節點,提示是否格式化,選擇N)
    ```
     $>hdfs namenode -bootstrapStandby
     ```
      
         ![image](http://pcx55bat1.bkt.clouddn.com/ha2.png)
               
    步驟三:在一個NN上執行以下指令,完成edit日志到jn節點的傳輸
    $>hdfs namenode -initializeSharedEdits
               
    步驟四:啟動所有節點
               
    [s201]
    	$>hadoop-daemon.sh start namenode		//啟動名稱節點
    	$>hadoop-daemons.sh start datanode		//啟動所有資料節點
    
    	[s205]
    	$>hadoop-daemon.sh start namenode		//啟動名稱節點
      ```
    ![image](http://pcx55bat1.bkt.clouddn.com/ha3.png)
       
        
               
  • HA管理
$>hdfs haadmin -transitionToActive nn1				//切成激活态
$>hdfs haadmin -transitionToStandby nn1				//切成待命态
$>hdfs haadmin -transitionToActive --forceactive nn2//強行激活
$>hdfs haadmin -failover nn1 nn2					//模拟容災示範,從nn1切換到nn2
           

webui下成功狀态:

s201:active狀态(激活狀态)

配置高可用(名稱節點高可用)

s205:standby狀态(待命狀态)

配置高可用(名稱節點高可用)

待命狀态下無法通路檔案系統:

配置高可用(名稱節點高可用)

繼續閱讀