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
編輯hadoop-2.6.5/etc/hadoop/hadoop-env.sh文件加入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
以上已經(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這臺機器上的密碼
密碼輸入正確后你會看到以下界面葬项,它說已經(jīng)添加了密鑰,它叫你嘗試登陸一下
添加其他的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
同樣另外一臺standby-master同樣的操作每窖。
啟動Hadoop集群
在master上的操作
1.啟動journalnode
命令:hadoop-daemon.sh start journalnode
因為我在master中配了slaves這個文件,把slave1抹腿、slave2岛请、slave3都加了進來所以可以啟動它們,查看DataNode節(jié)點上的journalnode是否啟動成功
出現(xiàn)journalnode說明啟動成功了警绩。
2.格式化zookepper
命令: hdfs zkfc -formatZK
操作完畢出現(xiàn)以下內容:
3.格式化hdfs
命令: hadoop namenode -format
操作完畢出現(xiàn)以下內容:
4.啟動master的NameNode
命令: hadoop-daemon.sh start namenode
啟動完畢后切換到standby-master操作
在standby-master操作
在master的NameNode啟動之后崇败,我們進行對NameNode的數(shù)據(jù)同步
在standby-master輸入以下命令
命令:hdfs namenode -bootstrapStandby
出現(xiàn)以下信息:
啟動Hadoop集群
回到master啟動集群輸入以下命令
命令: start-dfs.sh
在游覽器輸入 http://192.168.56.106:50070/ 和 http://192.168.56.107:50070/
出現(xiàn)以下情況說明已經(jīng)成功了。
測試HA集群可用性
以上是master是active狀態(tài),我現(xiàn)在把它關閉后室,看看standby-master是否會自動升級為active狀態(tài)缩膝。
關閉master:
觀察standby-master:
可以看到standby-master已經(jīng)自動升級為active狀態(tài)說明整個HA集群搭建完成了。