天天看點

Zookeeper日志配置以及叢集搭建

1、下載下傳與安裝

1.1、準備 Java 運作環境

1.2、下載下傳 ZooKeeper 安裝包

下載下傳位址: http://zookeeper.apache.org/releases.html

1.3、安裝與配置

解壓至某目錄,以$ZK_HOME表示zookeeper安裝目錄

參考:

http://blog.csdn.net/morning99/article/details/40426133

http://zookeeper.apache.org/doc/current/index.html

https://cwiki.apache.org/confluence/display/ZOOKEEPER/HowToContribute

2、日志配置

2.1、編輯zookeeper環境變量

編輯$ZK_HOME/bin/zkEnv.sh,找到配置ZOO_LOG_DIR以及ZOO_LOG4J_PROP的位置(大概在Line56,Line61)

if [ "x${ZOO_LOG_DIR}" = "x" ]
then
    #配置zookeeper日志輸出存放路徑
    ZOO_LOG_DIR="/home/xxx/zookeeper-2181/logs"
fi

if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
    #配置日志輸出級别,這裡把幾個級别一并配上
    ZOO_LOG4J_PROP="INFO,CONSOLE,ROLLINGFILE,TRACEFILE"
fi
           

2.2、編輯Log4J配置檔案log4j.properties

此部分參考Log4J配置

# Define some default values that can be overridden by system properties
zookeeper.root.logger=INFO, CONSOLE, ROLLINGFILE, TRACEFILE
zookeeper.console.threshold=INFO
zookeeper.log.dir=.
zookeeper.log.file=zookeeper.log
zookeeper.log.threshold=ERROR
zookeeper.tracelog.dir=.
zookeeper.tracelog.file=zookeeper_trace.log
log4j.rootLogger=${zookeeper.root.logger}
           

3、運作模式與叢集搭建

分為以下三種模式:

  • 單機模式
  • 僞叢集模式
  • 叢集模式

參考http://developer.51cto.com/art/201702/529953.htm

3.1、單機模式

zoo.cfg配置檔案如下:

tickTime=    ##Zookeeper最小時間單元,機關毫秒(ms),預設值為3000 
dataDir=/var/lib/zookeeper    ##Zookeeper伺服器存儲快照檔案的目錄,必須配置 
dataLogDir=/var/lib/log     ##Zookeeper伺服器存儲事務日志的目錄,預設為dataDir 
clientPort=    ##伺服器對外服務端口,一般設定為2181 
initLimit=    ##Leader伺服器等待Follower啟動并完成資料同步的時間,預設值10,表示tickTime的10倍 
syncLimit=    ##Leader伺服器和Follower之間進行心跳檢測的最大延時時間,預設值5,表示tickTime的5倍
           

3.2、僞叢集模式

這是一種特殊的叢集模式,即叢集的所有伺服器都部署在一台機器上。當你手頭上有一台比較好的機器,如果作為單機模式進行部署,就會浪費資源,這種情況下,ZooKeeper允許你在一台機器上通過啟動不同的端口來啟動多個 ZooKeeper 服務執行個體,以此來以叢集的特性來對外服務。

  • 叢集數量最低3個(必須是奇數,便于投票)
  • 複制已安裝的zookeeper,修改日志輸出配置
  • 修改zoo.cfg,三個zookeeper分别對應2181,2182,2183
#配置啟動時的資料存放路徑
dataDir=/tmp/zookeeper/
#啟動端口
clientPort=
#三個zookeeper的server.id=host:port1:port2
#其中,id 被稱為 Server ID,用來辨別該機器在叢集中的機器序号(在每台機器的 dataDir 目錄下建立 myid 檔案,檔案内容即為該機器對應的 Server ID 數字)。
#host 為機器 IP,port1 用于指定 Follower 伺服器與 Leader 伺服器進行通信和資料同步的端口,port2用于進行 Leader 選舉過程中的投票通信。
#注意,同一台機器上,為避免端口号占用,需要設定不同的端口
server=localhost::
server=localhost::
server=localhost::
           
  • 在 dataDir 目錄下建立名為 myid 的檔案,在檔案第一行寫上對應的 Server ID(即1,2,3)

3.3、叢集模式

此模式與僞叢集不同的地方就是,多個 ZooKeeper 叢集通常由一組機器組成,一般 3 台(假設IP為IP1,IP2,IP3)以上就可以組成一個可用的 ZooKeeper 叢集了。組成 ZooKeeper 叢集的每台機器都會在記憶體中維護目前的伺服器狀态,并且每台機器之間都會互相保持通信。隻要叢集中存在超過一半的機器能夠正常工作,那麼整個叢集就能夠正常對外服務。ZooKeeper 的用戶端程式會選擇和叢集中的任意一台伺服器建立一個 TCP 連接配接,一旦用戶端和伺服器斷開連接配接,用戶端就會自動連接配接到叢集中的其他伺服器。

在三台機器上都安裝一個zookeeper,配置可以完全一樣,先配置一台,其餘可直接模仿。

  • 按照之前的說明,配置日志
  • 修改zoo.cfg,三台機器配置不變,可全部使用2181端口
#配置啟動時的資料存放路徑
dataDir=/tmp/zookeeper/
#啟動端口
clientPort=
#三個zookeeper的server.id=host:port1:port2
#其中,id 被稱為 Server ID,用來辨別該機器在叢集中的機器序号(在每台機器的 dataDir 目錄下建立 myid 檔案,檔案内容即為該機器對應的 Server ID 數字)。
#host 為機器 IP,port1 用于指定 Follower 伺服器與 Leader 伺服器進行通信和資料同步的端口,port2用于進行 Leader 選舉過程中的投票通信。
server=IP1::
server=IP2::
server=IP3::
           
  • 在 dataDir 目錄下建立名為 myid 的檔案,在檔案第一行寫上對應的 Server ID