ZooKeeper分布式集群安裝


  我特意選擇了穩定版......

  奇數意思是說奇數和偶數對故障的容忍度是一致的....所以建議配置奇數個,並不是必須奇數...

一、master節點上安裝配置

1、下載並解壓ZooKeeper-3.4.6.tar.gz

tar -zxvf zookeeper-3.4.6.tar.gz

  這里路徑為 /home/fesh/zookeeper-3.4.6

2、設置the Java heap size  (個人感覺一般不需要配置)

  保守地use a maximum heap size of 3GB for a 4GB machine

3、$ZOOKEEPER_HOME/conf/zoo.cfg

cp zoo_sample.cfg zoo.cfg

   新建此配置文件,並設置內容

復制代碼
# 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=/home/fesh/data/zookeeper
# the port at which the clients will connect
clientPort=2181

 server.1=master:2888:3888
 server.2=slave1:2888:3888
 server.3=slave2:2888:3888

復制代碼

4、/home/fesh/data/zookeeper/myid

  在節點配置的dataDir指定的目錄下面,創建一個myid文件,里面內容為一個數字,用來標識當前主機,$ZOOKEEPER_HOME/conf/zoo.cfg文件中配置的server.X,則myid文件中就輸入這個數字X。(即在每個節點上新建並設置文件myid,其內容與zoo.cfg中的id相對應)這里master節點為 1

mkdir -p /home/fesh/data/zookeeper
cd /home/fesh/data/zookeeper
touch myid
echo "1" > myid

5、設置日志

conf/log4j.properties

 

# Define some default values that can be overridden by system properties
zookeeper.root.logger=INFO, CONSOLE

改為

# Define some default values that can be overridden by system properties  
zookeeper.root.logger=INFO, ROLLINGFILE

#
# Add ROLLINGFILE to rootLogger to get log file output
#    Log DEBUG level and above messages to a log file
log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender

改為---每天一個log日志文件,而不是在同一個log文件中遞增日志

#
# Add ROLLINGFILE to rootLogger to get log file output
#    Log DEBUG level and above messages to a log file
log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender

 

bin/zkEvn.sh

復制代碼
if [ "x${ZOO_LOG_DIR}" = "x" ]
then
    ZOO_LOG_DIR="."
fi

if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
    ZOO_LOG4J_PROP="INFO,CONSOLE"
fi
復制代碼

改為

復制代碼
if [ "x${ZOO_LOG_DIR}" = "x" ]
then
    ZOO_LOG_DIR="$ZOOBINDIR/../logs"
fi

if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
    ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
fi
復制代碼

 

二、從master節點分發文件到其他節點

1、在master節點的/home/fesh/目錄下

scp -r zookeeper-3.4.6 slave1:~/
scp -r zookeeper-3.4.6 slave2:~/
scp -r data slave1:~/
scp -r data slave2:~/

2、在slave1節點的/home/fesh/目錄下

vi ./data/zookeeper/myid

修改為 2

3、在slave2節點的/home/fesh/目錄下

vi ./data/zookeeper/myid

修改為 3

三、其他配置

1、在每個節點配置/etc/hosts (並保證每個節點/etc/hostname中分別為master、slave1、slave2) 主機 -IP地址映射

192.168.145.129    master
192.168.145.130    slave1
192.168.145.131    slave2

2、在每個節點配置環境變量/etc/profile

#Set ZOOKEEPER_HOME ENVIRONMENT
export ZOOKEEPER_HOME=/home/fesh/zookeeper-3.4.6
export PATH=$PATH:$ZOOKEEPER_HOME/bin

四、啟動

 在每個節點上$ZOOKEEPER_HOME目錄下,運行 (這里的啟動順序為 master >  slave1 >  slave2 )

bin/zkServer.sh start

並用命令查看啟動狀態

bin/zkServer.sh status

master節點

slave1節點

slave2節點

 

(注:之前我配置正確的,但是一直都是,每個節點上都啟動了,但就是互相連接不上,最后發現好像是防火牆的原因,啊啊啊!一定要先把防火牆關了!  sudo ufw disable )

五、結束語

5.1 日志報錯

  查看$ZOOKEEPER_HOME/zookeeper.out 日志,會發現開始會報錯,但當leader選出來之后 就沒有問題了。

  我啟動的順序是slave-01>slave-02>slave-03,由於ZooKeeper集群啟動的時候,每個結點都試圖去連接集群中的其它結點,先啟動的肯定連不上后面還沒啟動的,所以上面日志前面部分的異常是可以忽略的。通過后面部分可以看到,集群在選出一個Leader后,最后穩定了。

  其他結點可能也出現類似問題,屬於正常。

5.2 時鍾同步

  zookeeper等需要其他機器和master時間同步。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM