1. 程式人生 > >HA搭建和部署

HA搭建和部署

HA叢集安裝部署
1 執行環境
1.1 軟體環境
四個節點
OS:64位RHEL5及以上或者64位CentOS6.0及以上
JVM:預裝64位JDK 1.8及以上版本
1.2 瀏覽器要求
Firefox 39.0.0版本及以上或者Google Chrome 54.0.2840.8版本及以上。
BEH-Manager-4.1.2安裝包於官方網站下載:http://beh.pezy.cn/
2 安裝準備
2.1準備虛擬機器
準備四個節點的虛擬機器
2.2 修改主機名
所有節點分別操作,在各個節點執行以下操作來修改主機名,使叢集下的主機有格式一個統一的主機名,以便後續的操作和維護。
使用root使用者修改主機名

vim /etc/sysconfig/network

檔案內容修改為:

hadoop001

(hadoop001為想改的主機名,分別修改自己的)

在對應主機上執行以下命令,使主機名生效:

hostname hadoop***

注:主機名(hadoop0**)與主機相對應。
2.3 關閉防火牆
通過setup命令關閉防火牆

注:要使用root使用者

2.4 修改主機名列表
使用root使用者修改/etc/hosts (所有節點都操作,且內容相同)

vim /etc/hosts

新增以下內容:

192.168.9.10  hadoop001
192.168.9.11  hadoop002
192.168.9.12  hadoop003
192.168.9.13  hadoop004
……

2.5 配置時間同步
2.5.1配置自動時鐘同步
該項同時需要在所有節點配置。

使用Linux命令配置

[[email protected] ~]$ crontab -e

該命令是vi編輯命令,按i進入插入模式,按Esc,然後鍵入:wq儲存退出
鍵入下面的一行程式碼,輸入i,進入插入模式(星號之間和前後都有空格)

0 1 * * * /usr/sbin/ntpdate cn.pool.ntp.org

2.5.2手動同步時間
直接在Terminal執行下面的命令:

[[email protected] ~]$ /usr/sbin/ntpdate cn.pool.ntp.org

2.6 配置免祕鑰登入
lan使用者登入hadoop001節點,執行以下指令生成一對金鑰(hadoop使用者下)

ssh-keygen –t rsa

回車——回車——回車
登入hadoop002節點生成金鑰,並傳給hadoop001

ssh-keygen –t rsa
scp /home/lan/.ssh/id_rsa.pub [email protected]:/home/lan /.ssh/id_rsa.pub002

登入hadoop003節點生成金鑰,並傳給hadoop001

ssh-keygen –t rsa
scp /home/lan/.ssh/id_rsa.pub [email protected]:/home/lan /.ssh/id_rsa.pub003

登入hadoop004節點生成金鑰,並傳給hadoop001

ssh-keygen –t rsa
scp /home/lan/.ssh/id_rsa.pub [email protected]:/home/lan /.ssh/id_rsa.pub00

4
登入hadoop001節點,組合所有公鑰

cd ~/.ssh
cat id_rsa.pub >> authorized_keys
cat id_rsa.pub002 >> authorized_keys
cat id_rsa.pub003 >> authorized_keys
cat id_rsa.pub004 >> authorized_keys
chmod 600 authorized_keys

注:要修改檔案許可權。
分發金鑰檔案:在hadoop001上操作

scp /home/lan/.ssh/authorized_keys [email protected]:~/.ssh/
scp /home/lan/.ssh/authorized_keys [email protected]:~/.ssh/
scp /home/lan/.ssh/authorized_keys [email protected]:~/.ssh/

注:以上所有登陸節點、傳輸檔案過程都需要輸入對應節點lan使用者的登入金鑰。
到此,免密成功,所有節點可以相互之間免密登入。
測試ssh hadoop002
2.7 安裝jdk

注:因為大資料所有元件都是在JVM環境中執行,所以在安裝其他元件之前必須安裝首先JDK。
jdk版本推薦安裝1.8

上傳至伺服器lan使用者下:/home/lan

解壓, 將JDK檔案解壓,放到/usr/java目錄下,使用root使用者

mkdir /usr/java/
mv /home/lan/jdk-8u101-linux-x64.tar.gz /usr/java/
cd /usr/java/
tar -zxvf jdk-8u101-linux-x64.gz

配置環境變數,使用lan使用者

vim ~/.bash_profile

新增以下內容

export JAVA_HOME=/usr/java/jdk1.8.0_101
export PATH=$JAVA_HOME/bin:$PATH

生效配置檔案

source ~/.bash_profile

測試

java -version

其他節點同上
3 安裝其他元件
3.1 安裝zookeeper
注:以下所有安裝預設是在hadoop001上執行!
1.解壓並移動軟體包(在所有節點執行)
將zookeeper-3.4.6.tar.gz 解壓縮,

tar -zxvf zookeeper-3.4.6.tar.gz

2.修改配置檔案(在hadoop001執行)
修改Zookeeper配置檔案/home/lan/zookeeper-3.4.6/conf/zoo_sample.cfg重名為zoo.cfg。
進入到conf目錄下,執行:

mv  zoo_sample.cfg  zoo.cfg

修改zoo.cfg,新增如下內容

server.1=hadoop001:2888:3888
server.2=hadoop002:2888:3888
server.3=hadoop004:2888:3888

3.建立相關目錄
建立/tmp/zookeeper目錄,並在此目錄下建立myid檔案。

mkdir /tmp/zookeeper
cd /tmp/zookeeper
vim myid

在檔案中寫入數字

1

4.分發zookeeper軟體包

scp -r /home/lan/zookeeper-3.4.6 [email protected]:~/
scp -r /home/lan/zookeeper-3.4.6 [email protected]:~/

5.修改myid檔案

ssh [email protected]
vim /tmp/zookeeper/myid

修改檔案中數字為2

2

ssh [email protected]
vim /tmp/zookeeper/myid

修改檔案中數字為3

3

注:重新登入終端環境變數生效。

6.啟動Zookeeper
在hadoop001,hadoop002,hadoop004上執行

bin/zkServer.sh start

檢視程序QuorumPeerMain是否啟動
jps
檢視zookeeper狀態

bin/zkServer.sh status

3.2 安裝hadoop
hadoop部分的配置分為兩部分hdfs和yarn。
3.2.1 HDFS
1.解壓並移動軟體包(在所有節點執行)
將/home/lan/hadoop-2.7.1.tar.gz解壓

tar -zxvf hadoop-2.7.1.tar.gz

2.修改配置檔案
修改core-site.xml(如果檔案不存在,但是core-site.xml.template檔案存在,則先修改檔名,執行mv core-site.xml.template core-site.xml)

vim /home/lan/hadoop-2.7.1/etc/hadoop/core-site.xml

修改為以下內容:

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://beh</value>
    <final>false</final>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/lan/hadoopdata</value>
    <final>false</final>
  </property>
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>hadoop001:2181,hadoop002:2181,hadoop004:2181</value>
    <final>false</final>
  </property>
</configuration>

修改hdfs-site.xml

vim /home/lan/hadoop-2.7.1/etc/hadoop/hdfs-site.xml

修改為以下內容:

<configuration>
  <property>
    <name>dfs.nameservices</name>
    <value>beh</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.ha.namenodes.beh</name>
    <value>nn1,nn2</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.beh.nn1</name>
    <value>hadoop001:9000</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.namenode.http-address.beh.nn1</name>
    <value>hadoop001:50070</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.beh.nn2</name>
    <value>hadoop002:9000</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.namenode.http-address.beh.nn2</name>
    <value>hadoop002:50070</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://hadoop001:8485;hadoop002:8485;hadoop004:8485/beh</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.ha.automatic-failover.enabled.beh</name>
    <value>true</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.client.failover.proxy.provider.beh</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.journalnode.edits .dir</name>
    <value>/home/lan/metadata/journal</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
    <final>false</final>
  </property>
  <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/home/lan/.ssh/id_rsa</value>
    <final>true</final>
  </property>
  <property>
    <name>dfs.replication</name>
    <value>2</value>
    <final>false</final>
  </property> 
<configuration>

修改slaves

vim /home/lan/hadoop-2.7.1/etc/hadoop/slaves

修改為以下內容:

hadoop003
hadoop004

3.2.2 YARN
修改mapred-site.xml

vim /home/lan/hadoop2.7.1/etc/hadoop/mapred-site.xml

修改為以下內容:

<configuration>
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop004:10020</value>
</property>
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop004:19888</value>
</property>
<property>
    <name>yarn.app.mapreduce.am.staging-dir</name>
<value>/home/lan/metadata/hadoop-yarn/staging</value>
</property>
</configuration>

修改yarn-site.xml

vim /home/lan/hadoop2.7.1/etc/hadoop/yarn-site.xml

修改為以下內容:

<?xml version=”1.0” encoding=”UTF-8”?>
<configuration>
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/home/lan/metadata/yarn</value>
</property>
<property>
    <name>yarn.nodemanager.log-dirs</name>
    <value>/home/lan/logs/yarn/userlogs</value>
</property>
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<property>
    <description>Where to aggregate logs</description>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>hdfs://beh/var/log/hadoop-yarn/apps</value>
</property>
<!-- Resource Manager Configs -->
<property>
<name>yarn.resourcemanager.connect.retry-interval.ms</name>
    <value>2000</value>
</property>
<property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
</property>
<property>
<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>
<property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>beh</value>
</property>
<property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
</property>

  <!--RM1 RM2 is different-->
<property>
    <name>yarn.resourcemanager.ha.id</name>
    <value>rm1</value>

如果是namenode2機器上,需要將該部分的rm1修改為rm2

</property>
<property>
    <name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
    <name>yarn.resourcemanager.recovery.enabled</name>
    <value>true</value>
</property>
<property>
    <name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
<name>yarn.resourcemanager.zk.state-store.address</name>
<value>hadoop001:2181,hadoop002:2181,hadoop004:2181</value>
</property>
<property>
<name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>
    <value>5000</value>
</property>
<!-- RM1 configs -->
<property>
    <name>yarn.resourcemanager.address.rm1</name>
    <value>hadoop001:23140</value>
</property>
<property>
    <name>yarn.resourcemanager.scheduler.address.rm1</name>
    <value>hadoop001:23130</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address.rm1</name>
    <value>hadoop001:23189</value>
</property>
<property>
    <name>yarn.resourcemanager.webapp.address.rm1</name>
    <value>hadoop001:23188</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
    <value>hadoop001:23125</value>
</property>
<property>
    <name>yarn.resourcemanager.admin.address.rm1</name>
    <value>hadoop001:23141</value>
</property>
<!-- RM2 configs -->
<property>
    <name>yarn.resourcemanager.address.rm2</name>
    <value>hadoop002:23140</value>
</property>
<property>
    <name>yarn.resourcemanager.scheduler.address.rm2</name>
    <value>hadoop002:23130</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address.rm2</name>
   <value>hadoop002:23189</value>
</property>
<property>
    <name>yarn.resourcemanager.webapp.address.rm2</name>
    <value>hadoop002:23188</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
    <value>hadoop002:23125</value>
</property>
<property>
    <name>yarn.resourcemanager.admin.address.rm2</name>
    <value>hadoop002:23141</value>
</property>
<!-- Node Manager Configs -->
<property>
    <name>mapreduce.shuffle.port</name>
    <value>23080</value>
</property>
<property>
    <name>yarn.resourcemanager.zk-address</name>
<value>hadoop001:2181,hadoop002:2181,hadoop004:2181</value>
</property>
</configuration>

修改環境變數

vim /home/lan/hadoop-2.7.1/etc/hadoop/hadoop-env.sh
vim /home/lan/hadoop-2.7.1/etc/hadoop/yarn-env.sh

修改為以下內容:

export JAVA_HOME=/usr/java/jdk1.8.0_101

3.2.3 分發配置檔案

scp -r /home/lan/hadoop2.7.1 [email protected]:~/
scp -r /home/lan/hadoop2.7.1 [email protected]:~/
scp -r /home/lan/hadoop2.7.1 [email protected]:~/

注:將以上配置複製到所有節點

3.2.4 啟動HDFS
啟動journalnode(程序名:JournalNode)

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

格式化zookeeper,在hadoop001上執行。

格式化之前需要確定,ZooKeeper必須已經啟動。
啟動Zookeeper: zkServer-sh start

hdfs zkfc -formatZK	

對hadoop1節點進行格式化和啟動啟動namenode(程序名:NameNode):

hdfs namenode -format

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

對hadoop2節點進行格式化和啟動

hdfs namenode -bootstrapStandby

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

在hadoop1和hadoop2上啟動zkfc服務(zkfc服務程序名:DFSZKFailoverController):此時hadoop1和hadoop2就會有一個節點變為active狀態

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

啟動datanode(程序名:DataNode):在hadoop1上執行

$HADOOP_HOME/sbin/hadoop-daemons.sh start datanode

3.2.5 驗證是否成功
開啟瀏覽器,訪問 hadoop1:50070 以及 hadoop2:50070,你將會看到兩個namenode一個是active而另一個是standby。
然後kill掉其中active的namenode程序,另一個standby的naemnode將會自動轉換為active狀態
hadoop001:50070

hadoop002:50070

3.2.6 啟動yarn
在hadoop1上啟動

(此指令碼將會啟動hadoop1上的resourcemanager及所有的nodemanager)

$HADOOP_HOME/sbin/start-yarn.sh

在hadoop2上啟動resourcemanagerl

$HADOOP_HOME/sbin/yarn-daemon.sh start resourcemanager

3.2.7 驗證是否配置成功
開啟瀏覽器,訪問hadoop1:23188或者hadoop2:23188,只有active的會開啟如下介面,standby的那個不會看到頁面。

然後kill掉active的resourcemanager另一個將會變為active的,說明resourcemanager HA是成功的