Hadoop(HA)集群+Zookeeper實現(xiàn)高可用集群

Hadoop集群+Zookeeper實現(xiàn)高可用集群

設備的列表信息

節(jié)點類型 IP hosts(主機名)
NameNode 192.168.56.106 master
NameNode 192.168.56.107 standby-master
DataNode,JournalNode 192.168.56.108 slave1
DataNode,JournalNode 192.168.56.109 slave2
DataNode,JournalNode 192.168.56.110 slave3

一共配備的5臺的設備疏叨,master充當(active)角色证膨,standby-master充當(standby)角色妄壶,當master出現(xiàn)單點故障的時候霞扬,standby-master就會頂上去充當(active)角色來維持整個集群的運作佑笋。

搭建Ha集群依賴環(huán)境

環(huán)境名稱 版本號
CentOS 7
Jdk jdk-8u131
Hadoop 2.6.5
zookeeper 3.4.10

把jdk翼闹、Hadoop、zookeeper解壓到/use/local/目錄下
編輯 /etc/profile文件分別加入jdk蒋纬、Hadoop的環(huán)境變量

vim /etc/profile

加入以下環(huán)境變量:

JAVA_HOME=/usr/local/jdk1.8.0_131/
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME
export PATH
export CLASSPATH

export PATH=$PATH:/usr/local/hadoop-2.6.5/bin:/usr/local/hadoop-2.6.5/sbin
profile環(huán)境變量

編輯hadoop-2.6.5/etc/hadoop/hadoop-env.sh文件加入Java環(huán)境變量


Hadoop的Java環(huán)境變量

這是我本次搭建用到的系統(tǒng)版本猎荠。

配備zookeeper集群

我會在slave1、slave2蜀备、slave3這三臺機器上添zookeeper集群关摇,把JournalNode節(jié)點交給zookeeper做調度。
解壓后進入/zookeeper-3.4.10/conf/目錄
拷貝 cp zoo_sample.cfg 改名成 zoo.cfg
拷貝 cp zoo_sample.cfg zoo.cfg

在zoo.cfg文件添加以下配置:
dataDir=/home/zookeeper/data
dataLogDir=/home/zookeeper/logs
clientPort=2181
server.1=slave1:2888:3888
server.2=slave2:2888:3888
server.3=slave3:2888:3888
配置myid:

我這里有3臺zk集群機器碾阁,每臺機器都需要在/home/zookeeper/data 目錄下創(chuàng)建一個myid的文件输虱、并且要寫上自己對應的服務id號,比如我在slave1這臺機器對應的service.id是1 那么我在myid就會寫上1脂凶,slave2的service.id是2 就會寫上2.. 以此類推宪睹。

cd /home/zookeeper/data/
vim myid (寫上服務的id號保存退出)

編寫開機啟動腳本(為了方便啟動愁茁,不用每次手動啟動zk集群,如果覺得麻煩可以忽略該步驟)

寫了一個腳本設置zookepper開機啟動
在/etc/rc.d/init.d/目錄下添加一個文件叫zookeeper

命令:touch zookeeper

寫入以下配置横堡,JAVA_HOME是你jdk的安裝位置埋市,ZOO_LOG_DIR是zookeeper存放日志的位置,ZOOKEEPER_HOME是zookeeper的安裝位置命贴。


#!/bin/bash
#chkconfig: 2345 10 90
#description: service zookeeper
export   JAVA_HOME=/usr/local/jdk1.8.0_131
export   ZOO_LOG_DIR=/home/zookeeper/datalog
ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.10
su root  ${ZOOKEEPER_HOME}/bin/zkServer.sh "$1"

為新建的zookeeper文件添加可執(zhí)行權限

命令:chmod +x /etc/rc.d/init.d/zookeeper

添加zookeeper到開機啟動

命令:chkconfig --add zookeeper

重啟你的的zk集群
檢查你的zookeeper集群確保沒問題

命令:/usr/local/zookeeper-3.4.10/bin/zkServer.sh status

啟動zookeeper集群

以上已經(jīng)配置好zookeeper集群

設置SSH免密登陸

兩臺NameNode之間的協(xié)調需要SSH登陸來實現(xiàn)道宅,所以兩臺NameNode必須要配置好
進入master這臺機器的的根目錄

輸入命令:ssh-keygen -t rsa

出現(xiàn)提示可以不理會 直接按幾次回車鍵就行了,出現(xiàn)以下界面說明生成私鑰id_rsa和公鑰id_rsa.pub


生成的公鑰

把生成的公鑰id發(fā)送到 slave1胸蛛、slave2污茵、slave3、機器上

輸入命令: ssh-copy-id slave1

slave1會要求你輸入slave1這臺機器上的密碼


要求你輸入slave1密碼

密碼輸入正確后你會看到以下界面葬项,它說已經(jīng)添加了密鑰,它叫你嘗試登陸一下


叫你嘗試登陸一下slave1

添加其他的slave2泞当、slave3、slave4民珍、standby-master襟士、master也是同樣的操作。(一共5臺機器嚷量,包括目前本機)

在master完成以上操作之后陋桂,再到standby-master 重復以上的操作。(記得兩個NameNode都要進行操作蝶溶,重要的事再說一遍)嗜历。

配置Hadoop集群

配置core-site.xml
在core-site.xml加入以下配置
master是整個服務的標識、以及配備了zookeeper的配置信息

<configuration>

 <property>
      <name>fs.defaultFS</name>
      <value>hdfs://master</value>
 </property>
 <property>
      <name>hadoop.tmp.dir</name>
      <value>/home/hadoopData/hdfs/temp</value>
 </property>

 <property>
      <name>io.file.buffer.size</name>
      <value>4096</value>
 </property>

<!--zookeeper配置-->
 <property>
      <name>ha.zookeeper.quorum</name>
      <value>slave1:2181,slave2:2181,slave3:2181</value>
 </property>

</configuration>

配置hdfs-site.xml

<configuration>

<property>
   <name>dfs.namenode.name.dir</name>
   <value>/home/hadoopData/dfs/name</value>
 </property>
 <property>
   <name>dfs.datanode.data.dir</name>
   <value>/home/hadoopData/dfs/data</value>
 </property>
 <property>
   <name>dfs.replication</name>
   <value>3</value>
 </property>
 <property>
   <name>dfs.webhdfs.enabled</name>
   <value>true</value>
 </property>
 <property>
   <name>dfs.permissions.superusergroup</name>
   <value>staff</value>
 </property>
 <property>
   <name>dfs.permissions.enabled</name>
   <value>false</value>
 </property>

<!-- NanmeNode主備切換核心配置 -->
 <property>
        <name>dfs.nameservices</name>
        <value>master</value>
    </property>
    <property>
      <name>dfs.ha.namenodes.master</name>
      <value>nn1,nn2</value>
    </property>
    <property>
      <name>dfs.namenode.rpc-address.master.nn1</name>
      <value>master:9000</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.master.nn1</name>
        <value>master:50070</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.master.nn2</name>
        <value>standby-master:9000</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.master.nn2</name>
        <value>standby-master:50070</value>
    </property>



    <!-- 指定NameNode的元數(shù)據(jù)在JournalNode上的存放位置 -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://slave1:8485;slave2:8485;slave3:8485/master</value>
    </property>
    <!-- 指定JournalNode在本地磁盤存放數(shù)據(jù)的位置 -->
    <property>
          <name>dfs.journalnode.edits.dir</name>
          <value>/home/hadoopData/journal</value>
    </property>


    <!-- 開啟NameNode故障時自動切換 -->
    <property>
      <name>dfs.ha.automatic-failover.enabled</name>
      <value>true</value>
    </property>
    <property>
        <name>dfs.client.failover.proxy.provider.master</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>
    <!--ssh免登陸 -->
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
    </property>

    <property>
      <name>dfs.replication</name>
      <value>2</value>
    </property>
    <property>
      <name>dfs.webhdfs.enabled</name>
      <value>true</value>
    </property>

</configuration>

注意事項:
我這里一共拆分了3部分來說明抖所、以上的配置的文件分別有備注說明
在dfs.nameservices標簽中的value 和core-site.xml配置中的服務名要一致梨州,因為我起名叫master,所以我這里也叫master田轧。
dfs.namenode.shared.edits.dir標簽中存放的是你的zk集群的journalnode暴匠,后面記得加上你的服務名。

把這2份配置文件分別拷貝到5臺機器上傻粘。

安裝fuser

在你的兩臺NameNode都需要安裝fuser
進入你的 .ssh目錄(我的目錄是/root/.ssh)

安裝命令: yum provides "*/fuser"
安裝命令:yum -y install psmisc

安裝fuser

同樣另外一臺standby-master同樣的操作每窖。

啟動Hadoop集群

在master上的操作

1.啟動journalnode

命令:hadoop-daemon.sh start journalnode

因為我在master中配了slaves這個文件,把slave1抹腿、slave2岛请、slave3都加了進來所以可以啟動它們,查看DataNode節(jié)點上的journalnode是否啟動成功


查看journalnode是否啟動成功

出現(xiàn)journalnode說明啟動成功了警绩。

2.格式化zookepper

命令: hdfs zkfc -formatZK

操作完畢出現(xiàn)以下內容:


格式化zookepper

3.格式化hdfs

命令: hadoop namenode -format

操作完畢出現(xiàn)以下內容:


格式化hdfs

4.啟動master的NameNode

命令: hadoop-daemon.sh start namenode

啟動完畢后切換到standby-master操作

在standby-master操作

在master的NameNode啟動之后崇败,我們進行對NameNode的數(shù)據(jù)同步
在standby-master輸入以下命令

命令:hdfs namenode -bootstrapStandby

出現(xiàn)以下信息:


NameNode的數(shù)據(jù)同步

啟動Hadoop集群

回到master啟動集群輸入以下命令

命令: start-dfs.sh

在游覽器輸入 http://192.168.56.106:50070/ 和 http://192.168.56.107:50070/
出現(xiàn)以下情況說明已經(jīng)成功了。


啟動Hadoop集群

測試HA集群可用性

以上是master是active狀態(tài),我現(xiàn)在把它關閉后室,看看standby-master是否會自動升級為active狀態(tài)缩膝。
關閉master:


關閉master

觀察standby-master:


觀察standby-master

可以看到standby-master已經(jīng)自動升級為active狀態(tài)說明整個HA集群搭建完成了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末岸霹,一起剝皮案震驚了整個濱河市疾层,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贡避,老刑警劉巖痛黎,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異刮吧,居然都是意外死亡湖饱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門杀捻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來井厌,“玉大人,你說我怎么就攤上這事致讥〗銎停” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵垢袱,是天一觀的道長墓拜。 經(jīng)常有香客問我夹姥,道長蝙叛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮姚糊,結果婚禮上,老公的妹妹穿的比我還像新娘授舟。我一直安慰自己救恨,他們只是感情好,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布释树。 她就那樣靜靜地躺著肠槽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奢啥。 梳的紋絲不亂的頭發(fā)上秸仙,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機與錄音桩盲,去河邊找鬼寂纪。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的捞蛋。 我是一名探鬼主播孝冒,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拟杉!你這毒婦竟也來了庄涡?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤搬设,失蹤者是張志新(化名)和其女友劉穎穴店,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拿穴,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡迹鹅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了贞言。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斜棚。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖该窗,靈堂內的尸體忽然破棺而出弟蚀,到底是詐尸還是另有隱情,我是刑警寧澤酗失,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布义钉,位于F島的核電站,受9級特大地震影響规肴,放射性物質發(fā)生泄漏捶闸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一拖刃、第九天 我趴在偏房一處隱蔽的房頂上張望删壮。 院中可真熱鬧,春花似錦兑牡、人聲如沸央碟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽亿虽。三九已至,卻和暖如春苞也,著一層夾襖步出監(jiān)牢的瞬間洛勉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工如迟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留收毫,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像牛哺,于是被迫代替她去往敵國和親陋气。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345