Zookeeper 安裝和配置


單機模式

下載zookeeper的安裝包之后, 解壓到合適目錄. 進入zookeeper目錄下的conf子目錄, 創建zoo.cfg:

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

 參數說明:

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

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

bin/zkServer.sh start  

Server啟動之后, 就可以啟動client連接server了, 執行腳本:

bin/zkCli.sh -server localhost:4180  

 

偽集群模式

所謂偽集群, 是指在單台機器中啟動多個zookeeper進程, 並組成一個集群. 以啟動3個zookeeper進程為例.

將zookeeper的目錄拷貝3份:

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

 更改zookeeper0/conf/zoo.cfg文件為:

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參數即可.

在之前設置的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.

分別進入/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.

 

重要配置說明

 

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

 

2、zoo.cfg 文件是zookeeper配置文件 在conf目錄里。

 

3、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 

 


免責聲明!

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



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