溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

ZooKeeper的安裝配置教程

發(fā)布時間:2020-06-10 17:30:46 來源:億速云 閱讀:590 作者:元一 欄目:大數(shù)據(jù)

1、環(huán)境準(zhǔn)備

簡介

ZooKeeper是一個分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個開源的實現(xiàn),是Hadoop和Hbase的重要組件。它是一個為分布式應(yīng)用提供一致性服務(wù)的軟件,提供的功能包括:配置維護、域名服務(wù)、分布式同步、組服務(wù)等。

ZooKeeper的目標(biāo)就是封裝好復(fù)雜易出錯的關(guān)鍵服務(wù),將簡單易用的接口和性能高效、功能穩(wěn)定的系統(tǒng)提供給用戶。

ZooKeeper包含一個簡單的原語集,提供Java和C的接口。

ZooKeeper代碼版本中,提供了分布式獨享鎖、選舉、隊列的接口,代碼在$zookeeper_home\src\recipes。其中分布鎖和隊列有Java和C兩個版本,選舉只有Java版本。

原理

ZooKeeper是以Fast Paxos算法為基礎(chǔ)的,Paxos 算法存在活鎖的問題,即當(dāng)有多個proposer交錯提交時,有可能互相排斥導(dǎo)致沒有一個proposer能提交成功,而Fast Paxos作了一些優(yōu)化,通過選舉產(chǎn)生一個leader (領(lǐng)導(dǎo)者),只有l(wèi)eader才能提交proposer,具體算法可見Fast Paxos。因此,要想弄懂ZooKeeper首先得對Fast Paxos有所了解。

ZooKeeper的基本運轉(zhuǎn)流程:

1、選舉Leader。

2、同步數(shù)據(jù)。

3、選舉Leader過程中算法有很多,但要達到的選舉標(biāo)準(zhǔn)是一致的。

4、Leader要具有最高的執(zhí)行ID,類似root權(quán)限。

5、集群中大多數(shù)的機器得到響應(yīng)并接受選出的Leader。

1.1下載zooKeeper

   查閱hadoop2.7.3的文檔我們可以看到hadoop2.7.3在搭建高可用的時候使用的是zookeeper-3.4.2版本,所以我們也按照hadoop官網(wǎng)的提示,接下來我們安裝zookeeper-3.4.2版本.進入官網(wǎng)下載ZooKeeper3.4.2版本
   官網(wǎng)地址:https://zookeeper.apache.org/
ZooKeeper的安裝配置教程
點擊Download
ZooKeeper的安裝配置教程
ZooKeeper的安裝配置教程

ZooKeeper的安裝配置教程

1.3安裝zooKeeper

#1.把zookeeper的壓縮安裝包解壓到/opt/bigdata/目錄下
[root@node1 ~]# tar -xzvf zookeeper-3.4.2.tar.gz -C /opt/bigdata/ #輸入完命令后回車
#2.切換到bigdata目錄下
[root@node1 ~]# cd /opt/bigdata/
#3.按照安裝hadoop的方式,將zookeeper的安裝目錄的所屬組修改為hadoop:hadoop
#修改zookeeper安裝目錄的所屬用戶和組為hadoop:hadoop
[root@node1 bigdata]# chown -R hadoop:hadoop zookeeper-3.4.2/
#4.修改zookeeper安裝目錄的讀寫權(quán)限
[root@node1 bigdata]# chmod -R 755 zookeeper-3.4.2/

1.4配置zooKeeper環(huán)境變量

#1.切換到hadoop用戶目錄下
[root@node1 bigdata]# su - hadoop
Last login: Thu Jul 18 16:07:39 CST 2019 on pts/0
[hadoop@node1 ~]$ cd /opt/bigdata/zookeeper-3.4.2/
[hadoop@node1 zookeeper-3.4.2]$ cd ..
[hadoop@node1 bigdata]$ cd ~
#2.修改hadoop用戶下的環(huán)境變量配置文件
[hadoop@node1 ~]$ vi .bash_profile
# Get the aliases and functions
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
JAVA_HOME=/usr/java/jdk1.8.0_211-amd64
HADOOP_HOME=/opt/bigdata/hadoop-2.7.3
SPARK_HOME=/opt/spark-2.4.3-bin-hadoop2.7
M2_HOME=/opt/apache-maven-3.0.5
#3.新增zookeeper的環(huán)境變量ZOOKEEPER_HOME
ZOOKEEPER_HOME=/opt/bigdata/zookeeper-3.4.2/
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$M2_HOME/bin
#4.將zookeeper的環(huán)境變量ZOOKEEPER_HOME加入到path中
PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin:$ZOOKEEPER_HOME/bin
export JAVA_HOME
export HADOOP_HOME
export M2_HOME
export SPARK_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HDFS_CONF_DIR=$HADOOP_HOME/etc/hadoop
#5.導(dǎo)出zookeeper環(huán)境變量
export ZOOKEEPER_HOME
#6.保存修改內(nèi)容
:wq! #記得回車
#7.使得環(huán)境變量生效
[hadoop@node1 ~]$ source .bash_profile
#8.輸入zk然后按鍵盤左側(cè)的Tab鍵
[hadoop@node1 ~]$ zk
#有如下的提示,表名zookeeper的配置完成
zkCleanup.sh   zkCli.cmd    zkCli.sh    zkEnv.cmd     zkEnv.sh     zkServer.cmd     zkServer.sh
[hadoop@node1 ~]$ zk

1.5 修改zookeeper集群配置文件

   將目錄切換到zookeeper的安裝目錄下的conf目錄下復(fù)制zoo_sample.cfg文件為zoo.cfg

[hadoop@node1 ~]$ cd /opt/bigdata/zookeeper-3.4.2/conf/
[hadoop@node1 conf]$ ll
total 12
-rwxr-xr-x 1 hadoop hadoop 535 Dec 22 2011 configuration.xsl
-rwxr-xr-x 1 hadoop hadoop 2161 Dec 22 2011 log4j.properties
-rwxr-xr-x 1 hadoop hadoop 808 Dec 22 2011 zoo_sample.cfg
#1.復(fù)制zoo_sample.cfg模板配置文件為正式的配置文件zoo.cfg
[hadoop@node1 conf]$ cp zoo_sample.cfg zoo.cfg
[hadoop@node1 conf]$ ll
total 16
-rwxr-xr-x 1 hadoop hadoop 535 Dec 22 2011 configuration.xsl
-rwxr-xr-x 1 hadoop hadoop 2161 Dec 22 2011 log4j.properties
-rwxr-xr-x 1 hadoop hadoop 808 Jul 19 11:20 zoo.cfg
-rwxr-xr-x 1 hadoop hadoop 808 Dec 22 2011 zoo_sample.cfg
[hadoop@node1 conf]$

   修改dataDir的值為 dataDir=/var/lib/zookeeper,在文件的末尾添加如下配置:

server.1=node1:2888:3888 
server.2=node2:2888:3888 
server.3=node3:2888:3888

修改完配置文件記得保存

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/var/lib/zookeeper
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
開課吧
kaikeba.com
精選領(lǐng)域名師,只為人才賦能 6
1.6 創(chuàng)建myid文件
在節(jié)點node1,node2,node3對應(yīng)的/var/lib/zookeeper目錄下(dataDir配置的目錄/var/lib/zookeeper)創(chuàng)建myid文
件,幾個文件內(nèi)容依次為1,2,3
如下圖我們切換到root用戶,在/var/lib目錄下創(chuàng)建zookeeper目錄,因為hadoop用戶對/var/lib目錄沒有寫權(quán)限,
所以我們在創(chuàng)建zookeeper目錄時需要切換到root用戶(擁有最大權(quán)限)
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
#修改完配置文件記得保存

1.6 創(chuàng)建myid文件

在節(jié)點node1,node2,node3對應(yīng)的/var/lib/zookeeper目錄下(dataDir配置的錄/var/lib/zookeeper)創(chuàng)建myid文件,幾個文件內(nèi)容依次為1,2,3。切換到root用戶,在/var/lib目錄下創(chuàng)建zookeeper目錄,因為hadoop用戶對/var/lib目錄沒有寫權(quán)限,所以我們在創(chuàng)建zookeeper目錄時需要切換到

root用戶(擁有最大權(quán)限)
[hadoop@node1 conf]$ vi zoo.cfg
#1.切換到root用戶
[hadoop@node1 conf]$ su - root
Password:
Last login: Fri Jul 19 10:53:59 CST 2019 from 192.168.200.1 on pts/0
#2.創(chuàng)建zookeeper目錄
[root@node1 ~]# mkdir -p /var/lib/zookeeper
#3.進入到/var/lib/zookeeper/目錄
[root@node1 ~]# cd /var/lib/zookeeper/
You have new mail in /var/spool/mail/root
#4.創(chuàng)建myid配置文件
[root@node1 zookeeper]# touch myid
#5.編輯myid文件,輸入1,我們目前編輯的是node1的節(jié)點的myid文件,node2的myid內(nèi)容為2,node3的myid內(nèi)容為3
[root@node1 zookeeper]# vi myid
You have new mail in /var/spool/mail/root
#6.查看一下myid文件內(nèi)容為1
[root@node1 zookeeper]# cat myid
1
You have new mail in /var/spool/mail/root

1.7 修改myid目錄權(quán)限

#1.配置完成后記得修改zookeeper目錄的所屬組和讀寫權(quán)限
[root@node1 zookeeper]# cd ..
You have new mail in /var/spool/mail/root
#2.修改zookeeper目錄所屬組
[root@node1 lib]# chown -R hadoop:hadoop zookeeper/
#3.修改zookeeper目錄的讀寫權(quán)限為755
[root@node1 lib]# chmod -R 755 zookeeper/
[root@node1 lib]#

2、復(fù)制zookeeper

#1.復(fù)制/var/lib目錄下的zookeeper目錄到node2和node3的/var/lib目錄下
[root@node1 lib]# scp -r zookeeper node2:$PWD
[root@node1 lib]# scp -r zookeeper node3:$PWD
#2.復(fù)制zookeeper安裝目錄到node2和node3的安裝目錄下/opt/bigdata目錄下
[root@node1 lib]# scp -r /opt/bigdata/zookeeper-3.4.2/ node2:/opt/bigdata/
[root@node1 lib]# scp -r /opt/bigdata/zookeeper-3.4.2/ node3:/opt/bigdata/

3、修改node2和node3節(jié)點zookeeper的相關(guān)目錄權(quán)限

修改node2節(jié)點zookeeper 相關(guān)目錄權(quán)限

#1.修改zookeeper的myid配置目錄所屬組和讀寫權(quán)限
[root@node2 lib]# cd ~
[root@node2 ~]# chown -R hadoop:hadoop /var/lib/zookeeper
[root@node2 ~]# chmod -R 755 /var/lib/zookeeper
#2.修改zookeeper安裝目錄所屬組和讀寫權(quán)限
[root@node2 ~]# chown -R hadoop:hadoop /opt/bigdata/zookeeper-3.4.2/
You have new mail in /var/spool/mail/root
[root@node2 ~]# chmod -R 755 /opt/bigdata/zookeeper-3.4.2/
[root@node2 ~]#

修改node3節(jié)點zookeeper 相關(guān)目錄權(quán)限

#1.修改zookeeper的myid配置目錄所屬組和讀寫權(quán)限
[root@node3 bigdata]# cd ~
You have new mail in /var/spool/mail/root
[root@node3 ~]# chown -R hadoop:hadoop /var/lib/zookeeper
[root@node3 ~]# chmod -R 755 /var/lib/zookeeper
#2.修改zookeeper安裝目錄所屬組和讀寫權(quán)限
[root@node3 ~]# chown -R hadoop:hadoop /opt/bigdata/zookeeper-3.4.2/
You have new mail in /var/spool/mail/root
[root@node3 ~]# chmod -R 755 /opt/bigdata/zookeeper-3.4.2/
[root@node3 ~]#

4、修改node2和node3的myid文件內(nèi)容

修改node2節(jié)點zookeeper 的myid內(nèi)容為2:

[root@node2 ~]# vi /var/lib/zookeeper/myid
You have new mail in /var/spool/mail/root
[root@node2 ~]# cat /var/lib/zookeeper/myid
2
[root@node2 ~]#

修改node3節(jié)點zookeeper 的myid內(nèi)容為3

[root@node3 ~]# vi /var/lib/zookeeper/myid
You have new mail in /var/spool/mail/root
[root@node3 ~]# cat /var/lib/zookeeper/myid
3
[root@node3 ~]#

5、配置node2和node3的zookeeper環(huán)境變量

我們在node1節(jié)點上直接將hadoop用戶的環(huán)境變量配置文件遠程復(fù)制到node2和node3的hadoop用戶家目錄下

#1.如果當(dāng)前登錄用戶是root用戶,需要切換到hadoop用戶下,如果當(dāng)前用戶是hadoop用戶,請將目錄切換到hadoop用
戶的家目錄下,在進行環(huán)境變量文件的遠程復(fù)制.
[root@node1 lib]# su - hadoop
Last login: Fri Jul 19 11:08:44 CST 2019 on pts/0
[hadoop@node1 ~]$ scp .bash_profile node2:$PWD
.bash_profile 100% 681
64.8KB/s 00:00
[hadoop@node1 ~]$ scp .bash_profile node3:$PWD
.bash_profile 100% 681
156.8KB/s 00:00
[hadoop@node1 ~]$

5.1 使得node2和node3的環(huán)境變量生效

使得node2的hadoop的環(huán)境變量生效

#注意:切換到hadoop用戶下
#1.使得環(huán)境變量生效
[hadoop@node2 ~]$ source .bash_profile
#2.輸入zk然后按鍵盤左側(cè)的Tab鍵
[hadoop@node2 ~]$ zk
#3.有如下命令和shell腳本的提示,說明zookeeper的環(huán)境變量配置成功.
zkCleanup.sh  zkCli.sh   zkEnv.sh   zkServer.sh
zkCli.cmd    zkEnv.cmd    zkServer.cmd
[hadoop@node2 ~]$ zk

使得node3的hadoop的環(huán)境變量生效

#注意:切換到hadoop用戶下
[root@node3 bigdata]# su - hadoop
Last login: Thu Jul 18 15:37:50 CST 2019 on :0
#1.使得環(huán)境變量生效
[hadoop@node3 ~]$ source .bash_profile
#2.輸入zk然后按鍵盤左側(cè)的Tab鍵
[hadoop@node3 ~]$ zk
#3.有如下命令和shell腳本的提示,說明zookeeper的環(huán)境變量配置成功.
zkCleanup.sh   zkCli.sh   zkEnv.sh    zkServer.sh
zkCli.cmd zkEnv.cmd zkServer.cmd
[hadoop@node3 ~]$ zk

6.啟動zookeeper集群

6.1 啟動zookeeper集群

啟動zookeeper集群需要手動分別依次在三臺機器上啟動,啟動前需要在三臺機器上都將用戶切換為hadoop用戶.
node1上啟動zookeeper

[hadoop@node1 ~]$ zkServer.sh start
JMX enabled by default
Using config: /opt/bigdata/zookeeper-3.4.2/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@node1 ~]$

node2上啟動zookeeper

[hadoop@node2 ~]$ zkServer.sh start
JMX enabled by default
Using config: /opt/bigdata/zookeeper-3.4.2/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@node2 ~]$

node3上啟動zookeeper

[hadoop@node3 ~]$ zkServer.sh start
JMX enabled by default
Using config: /opt/bigdata/zookeeper-3.4.2/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@node3 ~]$

6.2 查看zookeeper集群狀態(tài)

使用zkServer.sh status命令在三個節(jié)點分別執(zhí)行查看狀態(tài)
在node1上查看

[hadoop@node1 bin]$ zkServer.sh status
JMX enabled by default
Using config: /opt/bigdata/zookeeper-3.4.2/bin/../conf/zoo.cfg
Mode: follower
[hadoop@node1 bin]$

在node2上查看

[hadoop@node2 bin]$ zkServer.sh status
JMX enabled by default
Using config: /opt/bigdata/zookeeper-3.4.2/bin/../conf/zoo.cfg
Mode: follower
[hadoop@node2 bin]$

在node3上查看

[hadoop@node3 bin]$ zkServer.sh status
JMX enabled by default
Using config: /opt/bigdata/zookeeper-3.4.2/bin/../conf/zoo.cfg
Mode: leader
[hadoop@node3 bin]$

至此我們zookeeper集群安裝完成.

6.3 zooKeeper安裝遇到問題

由于按照hadoop2.7.3版本官方文檔中使用zookeeper-3.4.2版本,但是zookeeper-3.4.2版本比較低,我們在啟動zookeeper后,可以使用jps命令或者ps -ef|grep zookeeper命令查看zookeeper主進程的狀態(tài),但是我們發(fā)現(xiàn)是正常的,如果我們使用zkServer.sh status命令查看zookeeper的狀態(tài)卻顯示是異常的,不管啟動多少次都會得到同樣的結(jié)果。

[hadoop@node1 bin]$ zkServer.sh status
JMX enabled by default
Using config: /opt/bigdata/zookeeper-3.4.2/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
[hadoop@node2 bin]$ zkServer.sh status
JMX enabled by default
Using config: /opt/bigdata/zookeeper-3.4.2/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
[hadoop@node3 bin]$ zkServer.sh status
JMX enabled by default
Using config: /opt/bigdata/zookeeper-3.4.2/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.

分析主要有以下兩個原因造成:
1.centos7上沒有安裝nc工具.
2.zookeeper啟動腳本中的nc命令在不同的linux版本中使用了無效的參數(shù)導(dǎo)致獲取狀態(tài)異?;蛘攉@取的狀態(tài)為
空狀態(tài)導(dǎo)致的。
解決方法:
1.使用yum 在三個節(jié)點上分別安裝nc工具

yum install nc -y

2.修改zookeeper安裝目錄下的bin目錄下的zkServer.sh腳本文件內(nèi)容
ZooKeeper的安裝配置教程
修改完成后我們在使用zkServer.sh status就能看到zookeeper的狀態(tài)了

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI