05.Hadoop:利用zookeeper模擬實(shí)現(xiàn)HA高可用

本節(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


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

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