20190711-高可用HA集群環(huán)境搭建

本文搭建了一個由4個節(jié)點(diǎn)(node1、node2、node3、node4)構(gòu)成的Hadoop-ha&zk集群.

HDFS 2.0 HA

主備NameNode

解決單點(diǎn)故障

主NameNode對外提供服務(wù),備NameNode同步主NameNode元數(shù)據(jù),以待切換

所有DataNode同時向兩個NameNode匯報數(shù)據(jù)塊信息

兩種切換選擇

手動切換:通過命令實現(xiàn)主備之間的切換,可以用HDFS升級等場合

自動切換:基于Zookeeper實現(xiàn)

基于Zookeeper自動切換方案

ZooKeeper Failover Controller:監(jiān)控NameNode健康狀態(tài),

并向Zookeeper注冊NameNode

NameNode掛掉后,ZKFC為NameNode競爭鎖,獲得ZKFC 鎖的NameNode變?yōu)閍ctive

1、基礎(chǔ)集群的搭建

2、集群網(wǎng)絡(luò)配置

? ? 開啟虛擬機(jī),修改配置文件 輸入如下命令

ls? -l? /etc/sysconfig/network-scripts/ifcfg-ens33

vi /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE=Ethernet

PROXY_METHOD=none

BROWSER_ONLY=no

BOOTPROTO=static

DEFROUTE=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=yes

IPV6_AUTOCONF=yes

IPV6_DEFROUTE=yes

IPV6_FAILURE_FATAL=no

IPV6_ADDR_GEN_MODE=stable-privacy

NAME=ens33

UUID=2fd4e3fc-509d-47b2-a833-e55f360a4661

DEVICE=ens33

ONBOOT=yes

IPADDR=192.168.4.110

NETMASK=255.255.255.0

GATEWAY=192.168.4.100

DNS1=8.8.8.8

DNS2=8.8.8.4

需要修改的地方有:

BOOTPROTO=static#dhcp改為static(修改)

ONBOOT=yes#開機(jī)啟用本配置,一般在最后一行(修改)

IPADDR=192.168.4.110 #靜態(tài)IP(增加)

GATEWAY=192.168.4.100 #默認(rèn)網(wǎng)關(guān),虛擬機(jī)安裝的話,通常是2,也就是VMnet8的網(wǎng)關(guān)設(shè)置(增加)

NETMASK=255.255.255.0#子網(wǎng)掩碼(增加)

#DNS1=8.8.8.8

重啟網(wǎng)卡

service network restart

3、集群SSH免密登陸設(shè)置

3.1  創(chuàng)建hadoop用戶

為三個節(jié)點(diǎn)分別創(chuàng)建相同的用戶hadoop,并在以后的操作均在此用戶下操作,操作如下:

#useradd -m hadoop

#passwd hadoop

為hadoop添加sudo權(quán)限,切換到root用戶

#visudo

在該行root ALL=(ALL) ALL下添加hadoop ALL=(ALL) ALL保存后退出,并切換回hadoop用戶

#su hadoop

注意事項:四個節(jié)點(diǎn)的用戶名必須相同,不然以后會對后面ssh及hadoop集群搭建產(chǎn)生巨大影響

3.2  hosts文件設(shè)置

為了不直接使用IP,可以通過設(shè)置hosts文件達(dá)到ssh ?node1這樣的的效果(四個節(jié)點(diǎn)設(shè)置相同)

$sudo vim /etc/hosts

在文件尾部添加如下行,保存后退出:

192.168.4.110  node1

192.168.4.120  node2

192.168.4.130  node3

192.168.4.140  node4

#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

#::1? ? ? ? localhost localhost.localdomain localhost6 localhost6.localdomain6

注意事項:不要在127.0.0.1后面添加主機(jī)名,如果加了master,會造成后面hadoop的一個很坑的問題,在slave節(jié)點(diǎn)應(yīng)該解析出masterIP的時候解析出127.0.0.1,造成hadoop搭建完全正確,但是系統(tǒng)顯示可用節(jié)點(diǎn)一直為0。

3.3  hostname修改

centos7默認(rèn)的hostname是localhost,為了方便將每個節(jié)點(diǎn)hostname分別修改為node1、node2、node3、node4(以下以node1節(jié)點(diǎn)為例)。

$sudo hostnamectl set-hostname node1

重啟terminal,然后查看:$hostname

3.3  ssh設(shè)置

設(shè)置node1節(jié)點(diǎn)和node2、node3、node4節(jié)點(diǎn)之間的雙向ssh免密通信,下面以node1節(jié)點(diǎn)ssh免密登陸其它節(jié)點(diǎn)設(shè)置為例,進(jìn)行ssh設(shè)置介紹(以下操作均在node1機(jī)器上操作):

[在node1節(jié)點(diǎn)設(shè)置完后,登錄node2、node3、node4節(jié)點(diǎn)分別進(jìn)行設(shè)置]

首先生成node1的rsa密鑰:$ssh-keygen -t rsa

設(shè)置全部采用默認(rèn)值進(jìn)行回車

將生成的rsa追加寫入授權(quán)文件:$cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

給授權(quán)文件權(quán)限:$chmod 600? ~/.ssh/authorized_keys

進(jìn)行本機(jī)ssh測試:$ssh node1正常免密登陸后所有的ssh第一次都需要密碼,此后都不需要密碼

將node1上的authorized_keys傳到node2

sudo scp ~/.ssh/id_rsa.pub hadoop@node2:~/

登陸到node2操作:$ssh node2輸入密碼登陸

$cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

修改authorized_keys權(quán)限:$chmod 600? ~/.ssh/authorized_keys

退出node2:$exit

進(jìn)行免密ssh登陸測試:$ssh node2

4、java安裝

目的:hadoop是基于Java的,所以要安裝配置Java環(huán)境(三個節(jié)點(diǎn)均需要操作,以下以node1節(jié)點(diǎn)為例)

下載并安裝:$sudo yum install java-1.8.0-openjdk? java-1.8.0-openjdk-devel

驗證是否安裝完成:$java -version

配置環(huán)境變量,修改~/.bashrc文件,添加行: export JAVA_HOME=/usr/lib/jvm/java-1.8.0

使環(huán)境變量生效:$source ~/.bashrc

5、Hadoop安裝配置

目的:獲得正確配置的完全分布式Hadoop集群(以下操作均在node1主機(jī)下操作)

安裝前 四臺節(jié)點(diǎn)都需要需要關(guān)閉防火墻和selinux

$sudo systemctl stop firewalld.service

$sudo systemctl disable firewalld.service

5.1  Hadoop安裝

首先在node1節(jié)點(diǎn)進(jìn)行hadoop安裝配置,之后使用scp傳到node2、node3、node4。

下載Hadoop二進(jìn)制源碼至node1,下載地址,并將其解壓在~/ 主目錄下

$tar -xvf ~/hadoop-2.5.2.tar -C ~/

$mv ~/hadoop-2.5.2/* ~/hadoop/

5.2  Hadoop的node節(jié)點(diǎn)配置

配置hadoop的配置文件core-site.xml  hdfs-site.xml  mapred-site.xml  yarn-site.xml  slaves(都在~/hadoop/etc/hadoop文件夾下)

$cd ~/hadoop/etc/hadoop

$vim core-site.xml其他文件相同,以下為配置文件內(nèi)容:

1.core-site.xml

<property>

? <name>fs.defaultFS</name>

? <value>hdfs://mycluster</value>

</property>

<property>

? <name>ha.zookeeper.quorum</name>

? <value>node1:2181,node2:2181,node3:2181</value>

</property>

2.hdfs-site.xml

<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>node1:8020</value>

</property>

<property>

? <name>dfs.namenode.rpc-address.mycluster.nn2</name>

? <value>node2:8020</value>

</property>

<property>

? <name>dfs.namenode.http-address.mycluster.nn1</name>

? <value>node1:50070</value>????

</property>

<property>

? <name>dfs.namenode.http-address.mycluster.nn2</name>

? <value>node2:50070</value>

</property>

<property>

? <name>dfs.namenode.shared.edits.dir</name>

? <value>qjournal://node1:8485;node2:8485;node3: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>~/.ssh/id_rsa</value>

</property>

<property>

? <name>dfs.ha.automatic-failover.enabled</name>

? <value>true</value>

</property>



5.3  Hadoop的其他節(jié)點(diǎn)配置

此步驟的所有操作仍然是在node1節(jié)點(diǎn)上操作,以node1節(jié)點(diǎn)在node2節(jié)點(diǎn)上配置為例

復(fù)制hadoop文件至node2:$scp -r ~/hadoop hadoop@slave2:~/

5.4  Hadoop環(huán)境變量配置

配置環(huán)境變量,修改~/.bashrc文件,添加行(每個節(jié)點(diǎn)都需要此步操作,以node1節(jié)點(diǎn)為例):

#hadoop environment vars

export HADOOP_HOME=/home/hadoop/hadoop

export HADOOP_INSTALL=$HADOOP_HOME

export HADOOP_MAPRED_HOME=$HADOOP_HOME

export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HADOOP_HOME

export YARN_HOME=$HADOOP_HOME

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

使環(huán)境變量生效:$source ~/.bashrc


6.0  Zookeeper安裝配置

配置環(huán)境變量,修改~/.bashrc文件,添加行(每個節(jié)點(diǎn)都需要此步操作,以node1節(jié)點(diǎn)為例):

zookeeper安裝目錄 ?/home/hadoop/zookeeper

修改conf/zoo.cfg

dataDir=/home/hadoop/zookeeper/zk

server.1=0.0.0.0:2888:3888 ?(注意:本機(jī)地址要配置成0.0.0.0,node2)

server.2=node3:2888:3888

server.3=node4:2888:3888

創(chuàng)建目錄: mkdir ?/home/hadoop/zookeeper/zk

創(chuàng)建文件: ?echo 1 >> myid ? ? //數(shù)字根據(jù)節(jié)點(diǎn)規(guī)劃 ,以node2為例


拷貝多臺節(jié)點(diǎn)

Scp –r 拷貝 目錄

修改myid

6.1  Zookeeper環(huán)境變量配置

export HADOOP_HOME=/home/hadoop/hadoop

export HADOOP_INSTALL=$HADOOP_HOME

export HADOOP_MAPRED_HOME=$HADOOP_HOME

export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HADOOP_HOME

export YARN_HOME=$HADOOP_HOME

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

export ZK_HOME=/home/hadoop/zookeeper

export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$ZK_HOME/bin:$ZK_HOME/sbin


拷貝多臺節(jié)點(diǎn)

scp ~/.bashrc ?node2:~

scp ~/.bashrc node3:~

scp ~/.bashrc node4:~

使環(huán)境變量生效:$source ~/.bashrc

6.2  啟動Zookeeper集群(node2、node3、node4)

同時啟動三臺機(jī)器 :zkServer.sh start

查看zookeeper服務(wù):zkServer.sh status

從節(jié)點(diǎn)狀態(tài):ZooKeeper JMX enabled by default

Using config: /home/hadoop/zookeeper/bin/../conf/zoo.cfg

Mode: follower

主節(jié)點(diǎn)狀態(tài):ZooKeeper JMX enabled by default

Using config: /home/hadoop/zookeeper/bin/../conf/zoo.cfg

Mode: leader

6.3  啟動journalnode服務(wù)(node1、node2、node3)

? hadoop-daemon.sh start journalnode

成功啟動后:執(zhí)行jps命令查看服務(wù)

9565 JournalNode

8558 QuorumPeerMain

9599 Jps

注意:需要先啟動 journalnode服務(wù) 然后再進(jìn)行hadoop格式化


6.4 ?最后一步

配置文件:集群中要同步?。?!

啟動zookeeper集群

zkServer.sh start? ||? zkServer.sh status

hadoop-daemon.sh start journalnode ? [在node1、node2、node3上執(zhí)行]

第一臺NN:

hdfs namenode –format ?[在node1、node2上執(zhí)行]

hadoop-daemon.sh start namenode [在node1上執(zhí)行]

另一臺NN:

hdfs namenode –bootstrapStandby ?[在node上2執(zhí)行]

hadoop-daemon.sh start namenode ?[在node2上執(zhí)行]

stop-dfs.sh ??|| ? ?start-dfs.sh ? [在node1上重啟集群]

最后一步格式化zkfc

先在node2節(jié)點(diǎn)啟動? ? zkCli.sh

然后在node1節(jié)點(diǎn)格式化zkfc: ? ? hdfs ?zkfc ? –formatZK

在node2節(jié)點(diǎn)查看集群詳情: ls ?/

[zk: localhost:2181(CONNECTED) 0] ?ls /

[zookeeper, hadoop-ha]

[zk: localhost:2181(CONNECTED) 1] ls /hadoop-ha/mycluster

[ActiveBreadCrumb, ActiveStandbyElectorLock]

[zk: localhost:2181(CONNECTED) 2] get /hadoop-ha/mycluster

cZxid = 0x400000004

ctime = Sat Jul 13 09:02:24 EDT 2019

mZxid = 0x400000004

mtime = Sat Jul 13 09:02:24 EDT 2019

pZxid = 0x40000003d

cversion = 30

dataVersion = 0

aclVersion = 0

ephemeralOwner = 0x0

dataLength = 0

numChildren = 2

[zk: localhost:2181(CONNECTED) 3]

注意 :第二次以后啟動只需要

1.啟動zk

2.start-dfs.sh


Web瀏覽器查看集群管理界面

node1:50070

node2:50070

問題紀(jì)錄:

1.多次格式化集群會出現(xiàn)問題 ,解決辦法是手工將四個節(jié)點(diǎn)的name、data文件下文件清空

????/home/hadoop/hadoop/hdfs/ha/dfs/name/XXX

????/home/hadoop/hadoop/hdfs/ha/dfs/data/XXX

然后在node1、node2、node3啟動 ??hadoop-daemon.sh start journalnode

然后在node1、node2節(jié)點(diǎn)重新格式化namenode ? [hdfs namenode –format]

如果還有問題,刪除以下目錄緩存文件或者重啟四臺機(jī)器

/tmp/hadoop/dfs/journalnode/mycluster



如果以上辦法都不行則根據(jù)報錯信息收工修改

view /home/hadoop/hadoop/logs/hadoop-hadoop-namenode-node1.log

This node has namespaceId '1252632511 and clusterId 'CID-614ab438-d36e-4e37-8c20-a631ee8a1783' but the requesting node expected '276561900' and 'CID-8fd68be0-6c4d-4cde-a171-34397ce9cd83'

/tmp/hadoop/dfs/journalnode/mycluster/current/VERSION 中的?namespaceID、clusterID

#Sat Jul 13 08:22:37 EDT 2019

namespaceID=276561900

clusterID=CID-8fd68be0-6c4d-4cde-a171-34397ce9cd83

cTime=0

storageType=JOURNAL_NODE

layoutVersion=-57

~

~



2.配置zookeeper時出現(xiàn)問題 ,原因是zookeeper文件組權(quán)限及文件擁有者

sudo chmod -R ?777 ?/home/hadoop/zookeeper ? [改變文件權(quán)限]

sudo chown hadoop:hadoop ?/home/hadoop/zookeeper [改變文件擁有者]


3.在格式化node1節(jié)點(diǎn)zkfc時出現(xiàn)連接拒絕問題

?hdfs zkfc ?–formatZK

原因是需要先在node2、node3、node4節(jié)點(diǎn)啟動zk服務(wù)??zkServer.sh ?start,然后在node2節(jié)點(diǎn)運(yùn)行zkCli.sh,最后在node1節(jié)點(diǎn)格式化zkfc?

4. 啟動namenode 、datanode、或journalnode若有報錯

則到該目錄下查看相應(yīng)的錯誤日志?/home/hadoop/hadoop/logs

zookeeper錯誤日志 在當(dāng)前執(zhí)行zk命令的目錄下查看?zookeeper.out

5.ha環(huán)境配置好后,以后只需要啟動zk和start-dfs.sh服務(wù)即可

? ?在node2、node3、node4機(jī)器啟動zk服務(wù) ?[zkServer.sh start]

? ?在node1 機(jī)器啟動hdfs服務(wù) ?start-dfs.sh

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 軟件環(huán)境: 主機(jī)配置: 一共m1, m2, m3這五部機(jī), 每部主機(jī)的用戶名都為centos 前期準(zhǔn)備 1.配置主...
    咸魚翻身記閱讀 1,176評論 0 5
  • Hadoop HA集群搭建文檔.............................................
    鐘敏_1788閱讀 1,590評論 0 0
  • 一:注意事項和準(zhǔn)備工作 1.1 準(zhǔn)備3臺Linux,可以ubuntu或者centOS ,本機(jī)設(shè)備性能不高,建議用...
    有一束陽光叫溫暖閱讀 475評論 0 2
  • 官方文檔翻譯,官方鏈接。翻譯水平有限,且以學(xué)習(xí)為主,請諒解和提意見。轉(zhuǎn)載請注明出處!??! 接著上一篇發(fā)布的文章繼續(xù)...
    mikeliuy閱讀 1,149評論 1 3
  • 線程池:指管理一組同構(gòu)工作線程的資源池。線程池與工作隊列(Work Queue)密切相關(guān),其中在工作隊列中保存了所...
    Bardon_X閱讀 453評論 0 0

友情鏈接更多精彩內(nèi)容