zookeeper的三要素:html
一、一致,可以保證數據的一致性node
二、有頭,始終有一個leader,node/2+1個節點有效,就能正常工做apache
三、數據樹,樹狀結構且每一個樹必須有數據vim
操做系統:CentOS Linux release 7.2.1511 (Core)服務器
JDK版本:1.8.0_121tcp
具體安裝jdk的配置請參見本人的博客http://www.javashuo.com/article/p-wcvtxxkr-cm.html中關於jdk安裝部分的內容,本文假設jdk已經安裝好了ide
服務器 oop
192.168.1.101;性能
192.168.1.102;ui
192.168.1.103;
2. 下載zookeeper
下載地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/stable/
利用wget下載並解壓zookeeper3.4.12,當前在192.168.1.101機器上操做
cd /opt/software wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/stable/zookeeper-3.4.12.tar.gz #下載zookeeper3.4.12到當前目錄 tar -xzvf zookeeper-3.4.12.tar.gz -C /opt/software #解壓zookeeper到當前目錄 cd zookeeper-3.4.12 #進入zookeeper3.4.12目錄
3. 配置zookeeper3.4.12
mv /opt/software/zookeeper-3.4.12/conf/zoo_sample.cfg /opt/software/zookeeper-3.4.12/conf/zoo.cfg vim /opt/software/zookeeper-3.4.12/conf/zoo.cfg
先把dataDir=/tmp/zookeeper註釋,而後將下面四行代碼添加到文件末尾,添加如下內容:
dataDir=/opt/software/zookeeper-3.4.12/data dataLogDir=/opt/software/zookeeper-3.4.12/log server.1=192.168.1.101:2888:3888 server.2=192.168.1.102:2888:3888 server.3=192.168.1.103:2888:3888
#server.1 這個1是服務器的標識也能夠是其餘的數字, 表示這個是第幾號服務器,用來標識服務器,這個標識要寫到快照目錄下面myid文件裏 #192.168.1.101爲集羣裏的IP地址,第一個端口是master和slave之間的通訊端口,默認是2888,第二個端口是leader選舉的端口,集羣剛啓動的時候選舉或者leader掛掉以後進行新的選舉的端口默認是3888
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 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. # # 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 # the directory where the snapshot is stored. dataDir=/opt/software/zookeeper-3.4.12/data dataLogDir=/opt/software/zookeeper-3.4.12/log server.1=192.168.1.101:2888:3888 server.2=192.168.1.102:2888:3888 server.3=192.168.1.103:2888:3888
配置文件說明:
#tickTime: 這個時間是做爲 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每一個 tickTime 時間就會發送一個心跳。 #initLimit: 這個配置項是用來配置 Zookeeper 接受客戶端(這裏所說的客戶端不是用戶鏈接 Zookeeper 服務器的客戶端,而是 Zookeeper 服務器集羣中鏈接到 Leader 的 Follower 服務器)初始化鏈接時最長能忍受多少個心跳時間間隔數。
當已經超過 5個心跳的時間(也就是 tickTime)長度後 Zookeeper 服務器尚未收到客戶端的返回信息,那麼代表這個客戶端鏈接失敗。總的時間長度就是 5*2000=10 秒 #syncLimit: 這個配置項標識 Leader 與Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是5*2000=10秒 #dataDir: 快照日誌的存儲路徑 #dataLogDir: 事物日誌的存儲路徑,若是不配置這個那麼事物日誌會默認存儲到dataDir制定的目錄,這樣會嚴重影響zk的性能,當zk吞吐量較大的時候,產生的事物日誌、快照日誌太多 #clientPort: 這個端口就是客戶端鏈接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。修改他的端口改大點
#autopurge.purgeInterval 這個參數指定了日誌清理頻率,單位是小時,須要填寫一個1或更大的整數,默認是0,表示不開啓本身清理功能。
#autopurge.snapRetainCount 這個參數和上面的參數搭配使用,這個參數指定了須要保留的文件數目。默認是保留3個。
4.建立myid文件
mkdir -p /opt/software/zookeeper-3.4.12/data #建立數據目錄,該目錄在zoo.cfg中配置 cd /opt/software/zookeeper-3.4.12/data #上面配置的zookeeper數據保存目錄 touch myid #建立myid文件 echo "1">>myid #往myid中寫入1,對應server.X={IP}:2888:3888 中的x數字
5. 將上面在192.168.1.101機器上配置好的zookeeper複製到102,103兩臺機器上去
scp -r /opt/software/zookeeper-3.4.12/ 192.168.1.102:/opt/software/ #將配置好的zookeeper複製到192.168.1.102 scp -r /opt/software/zookeeper-3.4.12/ 192.168.1.103:/opt/software/ #將配置好的zookeeper複製到192.168.1.103
修改102,103機器上/opt/software/zookeeper-3.4.12/data/myid爲對應的值
192.168.1.102:
cd /opt/software/zookeeper-3.4.12/data rm -f ./myid echo "2">>myid #往myid中寫入2,對應server.X={IP}:2888:3888 中的x數字,此處爲2
192.168.1.103:
cd /opt/software/zookeeper-3.4.12/data rm -f ./myid echo "3">>myid #往myid中寫入3,對應server.X={IP}:2888:3888 中的x數字,此處爲3
6. 開放zookeeper端口
firewall-cmd --zone=public --add-port=2888/tcp --permanent #添加2888防火牆例外 firewall-cmd --zone=public --add-port=3888/tcp --permanent #添加3888防火牆例外 firewall-cmd --zone=public --add-port=2181/tcp --permanent #添加2181防火牆例外 firewall-cmd --reload #重啓防火牆
注意:若是所在機器上防火牆沒有關閉,上面的操做天天機器都須要作;有些hadoop或CDH集羣安裝的時候要求把防火牆關閉的,若是已經關閉了防火牆的,能夠跳過該步驟,不用執行。
7. 添加環境變量
vim /etc/profile
在文件最後添加:
# zookeeper export ZK_HOME=/opt/software/zookeeper-3.4.12 export PATH=$ZK_HOME/bin:$PATH
使環境變量生效:
source /etc/profile
注意:三臺機器都要作這個操做。
8. 啓動zookeeper
8.1啓動
zkServer.sh start #三臺機器都要作此操做,不然經過zkServer.sh status查看啓動狀態時,
#可能會有Error contacting service. It is probably not running.錯誤信息。
#具體查看能夠在$ZK_HOME/zookeeper.out查看詳細的日誌信息
8.2 查看狀態
zkServer.sh status #查看當前機器的zookeeper狀態
192.168.1.101
[root@zoo101 zookeeper-3.4.12]# zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/software/zookeeper-3.4.12/bin/../conf/zoo.cfg Mode: follower
192.168.1.102
[root@zoo102 zookeeper-3.4.12]# zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/software/zookeeper-3.4.12/bin/../conf/zoo.cfg Mode: leader
192.168.1.103
[root@zoo103 zookeeper-3.4.12]# zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/software/zookeeper-3.4.12/bin/../conf/zoo.cfg Mode: follower
9. 客戶端鏈接zookeeper
zkCli.sh -server 192.168.1.101:2181
若是出現以下內容,則代表zookeeper已經安裝成功
參考: