Zookeeper 安裝和配置

單機模式

下載zookeeper的安裝包以後, 解壓到合適目錄. 進入zookeeper目錄下的conf子目錄, 建立zoo.cfg:java

tickTime=2000 dataDir=/Users/apple/zookeeper/data dataLogDir=/Users/apple/zookeeper/logs clientPort=4180  

 參數說明:bash

  • tickTime: zookeeper中使用的基本時間單位, 毫秒值.
  • dataDir: 數據目錄. 能夠是任意目錄.
  • dataLogDir: log目錄, 一樣能夠是任意目錄. 若是沒有設置該參數, 將使用和dataDir相同的設置.
  • clientPort: 監聽client鏈接的端口號.

至此, zookeeper的單機模式已經配置好了. 啓動server只需運行腳本服務器

bin/zkServer.sh start  

Server啓動以後, 就能夠啓動client鏈接server了, 執行腳本:app

bin/zkCli.sh -server localhost:4180  

 

僞集羣模式

所謂僞集羣, 是指在單臺機器中啓動多個zookeeper進程, 並組成一個集羣. 以啓動3個zookeeper進程爲例.運維

將zookeeper的目錄拷貝3份:this

  1. |--zookeeper0  
  2. |--zookeeper1  
  3. |--zookeeper2 

 更改zookeeper0/conf/zoo.cfg文件爲:spa

tickTime=2000 initLimit=5 syncLimit=2 dataDir=/Users/apple/zookeeper0/data dataLogDir=/Users/apple/zookeeper0/logs clientPort=4180 server.0=127.0.0.1:8880:7770 server.1=127.0.0.1:8881:7771 server.2=127.0.0.1:8882:7772 

 

新增了幾個參數, 其含義以下:日誌

  • initLimit: zookeeper集羣中的包含多臺server, 其中一臺爲leader, 集羣中其他的server爲follower. initLimit參數配置初始化鏈接時, follower和leader之間的最長心跳時間. 此時該參數設置爲5, 說明時間限制爲5倍tickTime, 即5*2000=10000ms=10s.
  • syncLimit: 該參數配置leader和follower之間發送消息, 請求和應答的最大時間長度. 此時該參數設置爲2, 說明時間限制爲2倍tickTime, 即4000ms.
  • server.X=A:B:C 其中X是一個數字, 表示這是第幾號server. A是該server所在的IP地址. B配置該server和集羣中的leader交換消息所使用的端口. C配置選舉leader時所使用的端口. 因爲配置的是僞集羣模式, 因此各個server的B, C參數必須不一樣.

參照zookeeper0/conf/zoo.cfg, 配置zookeeper1/conf/zoo.cfg, 和zookeeper2/conf/zoo.cfg文件. 只需更改dataDir, dataLogDir, clientPort參數便可.code

在以前設置的dataDir中新建myid文件, 寫入一個數字, 該數字表示這是第幾號server. 該數字必須和zoo.cfg文件中的server.X中的X一一對應.
/Users/apple/zookeeper0/data/myid文件中寫入0, /Users/apple/zookeeper1/data/myid文件中寫入1, /Users/apple/zookeeper2/data/myid文件中寫入2.server

分別進入/Users/apple/zookeeper0/bin, /Users/apple/zookeeper1/bin, /Users/apple/zookeeper2/bin三個目錄, 啓動server.
任意選擇一個server目錄, 啓動客戶端:

bin/zkCli.sh -server localhost:4180  

 

集羣模式

集羣模式的配置和僞集羣基本一致.
因爲集羣模式下, 各server部署在不一樣的機器上, 所以各server的conf/zoo.cfg文件能夠徹底同樣.
下面是一個示例:

tickTime=2000 initLimit=5 syncLimit=2 dataDir=/home/zookeeper/data dataLogDir=/home/zookeeper/logs clientPort=4180 server.43=10.1.39.43:2888:3888 server.47=10.1.39.47:2888:3888 server.48=10.1.39.48:2888:3888  

示例中部署了3臺zookeeper server, 分別部署在10.1.39.43, 10.1.39.47, 10.1.39.48上. 須要注意的是, 各server的dataDir目錄下的myid文件中的數字必須不一樣.

10.1.39.43 server的myid爲43, 10.1.39.47 server的myid爲47, 10.1.39.48 server的myid爲48.

 

重要配置說明

 

一、myid文件和server.myid  在快照目錄下存放的標識本臺服務器的文件,他是整個zk集羣用來發現彼此的一個重要標識。

 

二、zoo.cfg 文件是zookeeper配置文件 在conf目錄裏。

 

三、log4j.properties文件是zk的日誌輸出文件 在conf目錄裏用java寫的程序基本上有個共同點日誌都用log4j,來進行管理。

 

 

zkEnv.sh和zkServer.sh文件

zkServer.sh 主的管理程序文件
zkEnv.sh 是主要配置,zookeeper集羣啓動時配置環境變量的文件
注意
ZooKeeper server will not remove old snapshots and log files when using the default configuration (see autopurge below), this is the responsibility of the operator
zookeeper不會主動的清除舊的快照和日誌文件,這個是操做者的責任。

可是能夠經過命令去按期的清理。

第一種:

#!/bin/bash #snapshot file dir dataDir=/opt/zookeeper/zkdata/version-2 #tran log dir dataLogDir=/opt/zookeeper/zkdatalog/version-2 #Leave 66 files count=66 count=$[$count+1] ls -t $dataLogDir/log.* | tail -n +$count | xargs rm -f ls -t $dataDir/snapshot.* | tail -n +$count | xargs rm -f #以上這個腳本定義了刪除對應兩個目錄中的文件,保留最新的66個文件,能夠將他寫到crontab中,設置爲天天凌晨2點執行一次就能夠了。 #zk log dir del the zookeeper log #logDir= #ls -t $logDir/zookeeper.log.* | tail -n +$count | xargs rm -f

 

第二種:對於上面這個執行,ZK本身已經寫好了腳本,在bin/zkCleanup.sh中,因此直接使用這個腳本也是能夠執行清理工做的。

第三種:從3.4.0開始,zookeeper提供了自動清理snapshot和事務日誌的功能,經過配置 autopurge.snapRetainCount 和 autopurge.purgeInterval 這兩個參數可以實現定時清理了。這兩個參數都是在zoo.cfg中配置的:

autopurge.purgeInterval  這個參數指定了清理頻率,單位是小時,須要填寫一個1或更大的整數,默認是0,表示不開啓本身清理功能。
autopurge.snapRetainCount 這個參數和上面的參數搭配使用,這個參數指定了須要保留的文件數目。默認是保留3個。
 
推薦使用第一種方法,對於運維人員來講,將日誌清理工做獨立出來,便於統一管理也更可控
 
檢查服務狀態
./zkServer.sh status JMX enabled by default Using config: /opt/zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg #配置文件 Mode: follower #他是否爲領導

 

zk集羣通常只有一個leader,多個follower,主通常是相應客戶端的讀寫請求,而從主同步數據,當主掛掉以後就會從follower裏投票選舉一個leader出來。

 

能夠用「jps」查看zk的進程,這個是zk的整個工程的main #執行命令jps 20348 Jps 4233 QuorumPeerMain 
相關文章
相關標籤/搜索