zookeeper通常以“復(fù)制模式”運(yùn)行于一個計(jì)算機(jī)集群上,這個計(jì)算機(jī)集群被稱為一個“集合體”厂置。zookeeper通過復(fù)制來實(shí)現(xiàn)高可用性菩掏,只要集合體中半數(shù)以上的機(jī)器處于可用狀態(tài),它就可以提供服務(wù)昵济。出于這個原因智绸,一個集合體通常包含奇數(shù)臺機(jī)器野揪。
安裝過程
本文選擇了在slave1,slave2和slave3三臺機(jī)器上安裝
將zookeeper解壓到/usr/local目錄下瞧栗,并配置環(huán)境變量
sudo nano /etc/profile
在最下面加上2行
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.6
export PATH=$ZOOKEEPER_HOME/bin:$PATH
然后在conf中新建zoo.cfg文件斯稳,輸入以下內(nèi)容:
# 客戶端心跳時間(毫秒)
tickTime=2000
# 允許心跳間隔的最大時間
initLimit=10
# 同步時限
syncLimit=5
# 數(shù)據(jù)存儲目錄
dataDir=/usr/local/zookeeper-3.4.6/data
# 數(shù)據(jù)日志存儲目錄
dataLogDir=/usr/local/zookeeper-3.4.6/data/log
# 端口號
clientPort=2181
# 集群節(jié)點(diǎn)和服務(wù)端口配置
server.1=hadoop-slave1:2888:3888
server.2=hadoop-slave2:2888:3888
server.3=hadoop-slave3:2888:3888
創(chuàng)建zookeeper的數(shù)據(jù)存儲目錄和日志存儲目錄
cd /usr/local/zookeeper-3.4.6
mkdir -p data/log
在data目錄中創(chuàng)建一個文件myid,輸入內(nèi)容為1
echo "1" >> data/myid
修改zookeeper的日志輸出路徑(注意CDH版與原生版配置文件不同)
sudo nano bin/zkEnv.sh
if [ "x${ZOO_LOG_DIR}" = "x" ]
then
ZOO_LOG_DIR="$ZOOKEEPER_HOME/logs"
fi
if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
fi
修改zookeeper的日志配置文件
sudo nano conf/log4j.properties
zookeeper.root.logger=INFO,ROLLINGFILE
log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender
創(chuàng)建日志目錄
sudo mkdir logs
將這個zookeeper-3.4.6的目錄復(fù)制到其他的兩個節(jié)點(diǎn)上迹恐,并修改他們的myid為2和3平挑。
然后使用bin目錄下的zkServer.sh start
分別啟動三個zookeeper,按1系草,2通熄,3的順序。使用jps
命令查看找都,若有QuorumPeerMain則說明服務(wù)正常啟動唇辨,沒有的話,使用zkServer.sh start-foreground
查看一下哪里出了問題能耻。
我在安裝過程中遇到的問題
- zookeeper啟動不了
使用sudo ./zkServer.sh start-foreground
運(yùn)行zookeeper赏枚,顯示line 131:exec java: not found
解決辦法:
改一下用戶權(quán)限即可(我覺得這是我掉進(jìn)的一個很有意義的坑。晓猛。饿幅。)cd /usr/local sudo chown –R hadoop-sna zookeeper-3.4.6 sudo chgrp –R hadoop-sna zookeeper-3.4.6
- 打開logs文件夾里面的zookeeper.log顯示connection refused錯誤
原因:一般來說這是配置的問題,我出現(xiàn)這個問題的主要原因是戒职,我在zoo.cfg中寫了三個server栗恩,但是只在server1上啟動zkServer.sh所以會出現(xiàn)connection refused。
事實(shí)上只在一個機(jī)器上啟動zookeeper時洪燥,使用zkServer.sh status
查看狀態(tài)時磕秤,會看到的錯誤,但是這并不是說明你的zookeeper有問題捧韵,只是那兩個還沒啟動好而已市咆,當(dāng)3臺機(jī)器的zookeeper都啟動后,3臺機(jī)器會自動進(jìn)行投票再来,選出一個leader兩個follower蒙兰,此時再用zkServer.sh status
查看狀態(tài)的時候就可以看到這臺機(jī)器是leader還是follower了。