本節(jié)主要內(nèi)容:
利用zookeeper模擬實(shí)現(xiàn)HA高可用
1.系統(tǒng)環(huán)境:
OS:CentOS Linux release 7.5.1804 (Core)
CPU:2核心
Memory:1GB
運(yùn)行用戶:root
JDK版本:1.8.0_252
Hadoop版本:cdh5.16.2
2.集群各節(jié)點(diǎn)角色規(guī)劃為:
172.26.37.245 node1.hadoop.com---->namenode,zookeeper,journalnode,hadoop-hdfs-zkfc
172.26.37.246 node2.hadoop.com---->datanode,zookeeper,journalnode
172.26.37.247? node3.hadoop.com---->datanode
172.26.37.248? node4.hadoop.com---->namenode,zookeeper,journalnode,hadoop-hdfs-zkfc
172.26.37.248? node4.hadoop.com---->SecondaryNameNode取消
一.安裝
node1.hadoop.com主機(jī)
? ? ? ? # yum -y install zookeeper-server hadoop-hdfs-journalnode hadoop-hdfs-zkfc
node2.hadoop.com主機(jī)
? ? ? ? # yum -y install zookeeper-server hadoop-hdfs-journalnode
node4.hadoop.com主機(jī)
? ? ? ? # yum -y install zookeeper-server hadoop-hdfs-journalnode hadoop-hdfs-zkfc hadoop-hdfs-namenode
二.配置文件
1./etc/hadoop/conf/core-site.xml變更(所有節(jié)點(diǎn))
? ? ? ? # cp -p /etc/hadoop/conf/core-site.xml /etc/hadoop/conf/core-site.xml.20200617
? ? ? ? # vi /etc/hadoop/conf/core-site.xml
變更為以下內(nèi)容
<configuration>
? ? <property>
? ? ? ? <name>fs.defaultFS</name>
? ? ? ? <value>hdfs://cluster1</value>
? ? ? ? <!--創(chuàng)建集群地址-->?
? ? </property>
? ? <property>
? ? ? ? <name>hadoop.tmp.dir</name>
? ? ? ? <value>/home/hadoop/tmp</value>?
? ? ? ? <!--聲明hadoop的緩存文件目錄-->
? ? </property>
? ? <property>
? ? ? ? <name>ha.zookeeper.quorum</name>
? ? ? ???<value>node1.hadoop.com:2181,node2.hadoop.com:2181,node4.hadoop.com:2181</value>
? ? ? ? <!--聲明那些主機(jī)部署zookeeper-->
? ? </property>
</configuration>
2./etc/hadoop/conf/hdfs-site.xml變更(所有節(jié)點(diǎn))
? ? ? ? # cp -p /etc/hadoop/conf/hdfs-site.xml /etc/hadoop/conf/hdfs-site.xml.20200617
? ? ? ? # vi /etc/hadoop/conf/hdfs-site.xml
<configuration>
? ? <property>
? ? ? ? <name>dfs.nameservices</name>
? ? ? ? <value>cluster1</value>
? ? ? ? <!--自定義HDFS服務(wù)名-->
? ? </property>
? ? <property>
? ? ? ? <name>dfs.ha.namenodes.cluster1</name>
? ? ? ? <value>node1,node4</value>
? ? ? ? <!--參與到HA的namemode節(jié)點(diǎn)名稱;注意:這里自定義起名,后面后這些節(jié)點(diǎn)的解析-->
? ? </property>
? ? <property>
? ? ? ? <name>dfs.namenode.rpc-address.cluster1.node1</name>
? ? ? ? <!--這里是對(duì)node1這個(gè)節(jié)點(diǎn)的名稱解析,同時(shí)指明rpc的端口-->
? ? ? ? <value>node1.hadoop.com:9000</value>
? ? </property>
? ? <property>
? ? ? ? <name>dfs.namenode.http-address.cluster1.node1</name>
? ? ? ? <!--這里是對(duì)node1這個(gè)節(jié)點(diǎn)的名稱解析,同時(shí)http管理地址的端口-->
? ? ? ? <value>node1.hadoop.com:50070</value>
? ? </property>
? ? <property>
? ? ? ? <name>dfs.namenode.rpc-address.cluster1.node4</name>
? ? ? ? <value>node4.hadoop.com:9000</value>
? ? </property>
? ? <property>
? ? ? ? <name>dfs.namenode.http-address.cluster1.node4</name>
? ? ? ? <value>node4.hadoop.com:50070</value>
? ? </property>
? ? <property>
? ? ? ? <name>dfs.ha.automatic-failover.enabled</name>
? ? ? ? <!--HA當(dāng)中的失敗自動(dòng)轉(zhuǎn)移,默認(rèn)是關(guān)閉的,手動(dòng)打開(kāi)-->
? ? <value>true</value>
? ? </property>
? ? <property>
? ? ? ? <name>dfs.namenode.shared.edits.dir</name>
? ? ? ? <value>qjournal://node1.hadoop.com:8485;node2.hadoop.com:8485;node4.hadoop.com:8485/cluster1</value>
? ? ? ? <!-- 指定NameNode的元數(shù)據(jù)在JournalNode上的存放位置 -->
? ? </property>
? ? <property>
? ? ? ? <name>dfs.client.failover.proxy.provider.cluster1</name>
? ? ? ? <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
? ? ? ? <!-- 實(shí)現(xiàn)故障切換調(diào)用的類(lèi) -->
? ? </property>
? ? <property>
? ? ? ? <name>dfs.journalnode.edits.dir</name>
? ? ? ? <value>/home/hadoop/data/journaldata/jn</value>
? ? ? ? <!-- 指定JournalNode集群在對(duì)nameNode的目錄進(jìn)行共享時(shí),存儲(chǔ)數(shù)據(jù)的磁盤(pán)路徑 -->
? ? </property>
? ? <property>
? ? ? ? <name>dfs.ha.fencing.methods</name>
? ? ? ? <value>shell(/bin/true)
? ? ? ? ? ? ? sshfence
? ? ? ? </value>
? ? ? ? <!-- 配置隔離機(jī)制方法,多個(gè)機(jī)制用換行分割,即每個(gè)機(jī)制暫用一行-->?
? ? </property>
? ? <property>
? ? ? ? <name>dfs.ha.fencing.ssh.private-key-files</name>
? ? ? ? <value>/home/hadoop/.ssh/id_rsa</value>
? ? ? ? <!-- 使用sshfence隔離機(jī)制時(shí)需要ssh免登陸 -->
? ? </property>
? ? <property>
? ? ? ? <name>dfs.ha.fencing.ssh.connect-timeout</name>
? ? ? ? <value>10000</value>
? ? ? ? <!--配置sshfence隔離機(jī)制超時(shí)時(shí)間-->
? ? </property>
? ? <property>
? ? ? ? <name>dfs.namenode.handler.count</name>
? ? ? ? <value>100</value>
? ? </property>
? ? <property>
? ? ? ? <name>dfs.namenode.name.dir</name>
? ? ? ? <value>file:///data/hdfs/name</value>
? ? </property>
? ? <property>
? ? ? ? <name>dfs.datanode.name.dir</name>
? ? ? ? <value>file:///data/hdfs/data</value>
? ? </property>
</configuration>
3./etc/zookeeper/conf/zoo.cfg(node1.2.4節(jié)點(diǎn))
? ? ? ? # cp -p /etc/zookeeper/conf/zoo.cfg /etc/zookeeper/conf/zoo.cfg.org
? ? ? ? # vi /etc/zookeeper/conf/zoo.cfg
追加以下內(nèi)容
server.1=node1.hadoop.com:2888:3888
server.2=node2.hadoop.com:2888:3888
server.3=node4.hadoop.com:2888:3888
<!--聲明ha系統(tǒng)中,安裝了zookeeper的主機(jī)和端口-->
? ? ? ? 每臺(tái)主機(jī)寫(xiě)入對(duì)應(yīng)的myid
node1
# echo "1" >/var/lib/zookeeper/myid
node2
# echo "2" >/var/lib/zookeeper/myid
node4
# echo "3" >/var/lib/zookeeper/myid
node1,針對(duì)上面的server.1;其他主機(jī)分別為2,3
三.啟動(dòng)服務(wù)
0.處理好datanode節(jié)點(diǎn)和原namenode節(jié)點(diǎn)服務(wù);接前環(huán)境,關(guān)閉Node1的namenode服務(wù)
? ? ? ? # service hadoop-hdfs-namenode? stop
1.啟動(dòng)所有節(jié)點(diǎn)的zookeeper(node1.2.4)
? ? ? ? # cd /var/lib/zookeeper
? ? ? ? #?mkdir version-2
? ? ? ? # chown -R zookeeper:zookeeper /var/lib/zookeeper
? ? ? ? # chmod -R 755 /var/lib/zookeeper
? ? ? ? # service zookeeper-server start
? ? ? ? # service zookeeper-server status
2.啟動(dòng)所有節(jié)點(diǎn)的journode(node1.2.4)
/home/hadoop/data/journaldata/jn 先創(chuàng)建
? ? ? ? # mkdir -p /home/hadoop/data/journaldata/jn
? ? ? ? #?chown -R hdfs:hdfs /home/hadoop/data/journaldata/jn
? ? ? ? # service hadoop-hdfs-journalnode? start
? ? ? ? # service hadoop-hdfs-journalnode? status
3.在主節(jié)點(diǎn)node1上進(jìn)行數(shù)據(jù)格式化
? ? ? ? # sudo -u hdfs hdfs namenode -format? //namenode節(jié)點(diǎn)格式化
? ? ? ? # sudo -u hdfs hdfs zkfc -formatZK? ? //初始化高可用,
4.namenode節(jié)點(diǎn)上啟用namenode服務(wù)(node1.4)
? ? ? ? #?service hadoop-hdfs-namenode start
? ? ? ? # service hadoop-hdfs-namenode status
5.namenode節(jié)點(diǎn)上啟動(dòng)zkfc服務(wù)(node1.4)
? ? ? ? #?service hadoop-hdfs-zkfc start
? ? ? ? # service hadoop-hdfs-zkfc status
6.備份節(jié)點(diǎn)上執(zhí)行數(shù)據(jù)同步
? ? ? ? # sudo -u hdfs hdfs namenode -bootstrapStandby
7.數(shù)據(jù)同步后登陸不同namenode:50070
一個(gè)為active

一個(gè)為standby

如果為雙active或雙standby,請(qǐng)檢查配置及啟動(dòng)順序
8.node1關(guān)閉active節(jié)點(diǎn)的namenode服務(wù)
? ? ? ? # service hadoop-hdfs-namenode stop
? ? ? ? # service hadoop-hdfs-namenode status
備份主動(dòng)變?yōu)閍ctive

9.node1啟動(dòng)namenode服務(wù),狀態(tài)不會(huì)搶占為active,變?yōu)閟tanby
? ? ? ? # service hadoop-hdfs-namenode start
? ? ? ? # service hadoop-hdfs-namenode status
