zookeeper安裝部署步驟
安裝步驟
本安裝教程,採用zookeeper 3.6.1
- 裝java
- 下載zk包,分發到各個機器
- 確定或創建一個zookeeper的數據存放路徑,並在該路徑下創建一個myid文件,其中設置當前zookeeper節點的編號,編號範圍1~255。整個zookeeper集群唯一
- 在數據文件夾創建一個initialize文件,初始化集群時使用,啟動後,集群會自動刪除該文件。後續重啟集群,不需要該文件
initialize文件
3.6.0的zk,在啟動後,如果發現自己的data 目錄是空的,則不會參與集群選舉,知道該節點連上一個master, 然後從其同步過完整的數據後,才具有選舉權 ,之所以這麼做的原因是。萬一誰不小心刪了數據文件,這個時候重啟該節點,如果運行該節點參與選舉,要是該節點被選成master, 會導致怎個集群數據丟失。
但第一次啟動集群,大家確實都沒數據,如果都沒有選舉權的話,第一次選舉就不會進行,所以要在data 目錄下創建一個initialize文件,暫時屏蔽調3.6.0的數據丟失保護功能。集群啟動,正常選舉後,該文件會被刪除,進入數據丟失的保護機制
配置文件
一般可直接配置zk髮型包conf下的zoo.cfg文件
tickTime=2000
dataDir=/var/lib/zookeeper/data
dataLogDir=/var/lib/zookeeper/log #默認dataLogDir和dataDir在一起,最好將其分開,以提高zk性能。因為同時寫數據和日誌到一個磁碟,磁碟會有些瓶頸限制
autopurge.purgeInterval=1 #開啟定期清理功能,以免數據和日誌文件過大
autopurge.snapRetainCount=1000
clientPort=2181 #zk集群對外提供服務的埠
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888 #"server.1"中的1,即是該機器在數據文件夾中配置的myid。 zoo1,zoo2,zoo3是zk集群的節點hostname或ip。 2888是follower用來跟leader通訊的埠,3888是用來選舉leader的埠
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
影響性能的點
數據盤獨立
磁碟的讀寫性能會嚴重影響到zk的性能。所以盡量將zk的數據存儲目錄防止帶單獨的磁碟。有條件的話,將其日誌文件路徑也放置到單獨磁碟。同其它程式共用一個磁碟,當磁碟讀寫性能出現瓶頸時,zk的性能會急速下降
記憶體不要超機器限制
當zk申請的記憶體超過作業系統的空閑記憶體,那麼作業系統會啟用swap機制,即利用硬碟做為交換記憶體。這也將嚴重影響zk的性能。所以如果系統有4g記憶體,那麼zk申請記憶體最好小於等於3G。
兩種啟動方式
使用自帶腳本
在bin下 ./zkServer.sh start
該zkServer.sh會首先執行zkEnv.sh
zkEnv.sh中有整個zk執行相關環境變數設置,從zkEnv.sh程式碼中可以看到
if [ -f "${ZOOCFGDIR}/zookeeper-env.sh" ]; then
. "${ZOOCFGDIR}/zookeeper-env.sh"
fi
if [ "x$ZOOCFG" = "x" ]
then
ZOOCFG="zoo.cfg"
fi
ZOOCFG="$ZOOCFGDIR/$ZOOCFG"
if [ -f "$ZOOCFGDIR/java.env" ]
then
. "$ZOOCFGDIR/java.env"
fi
它回去zk配置目錄,也即CONF中找zookeeper-env.sh,和java.env。所以我們可以將相關的環境變數設置到這兩個文件中(沒有就創建)
.env文件其實跟shell差不多,啟動定義的環境變數格式為key=value,最終生效,通過執行該文件,或者source 它都可以。
從zkEnv.sh中還可以得出的資訊是,要設置zk server端的記憶體佔用大小,是通過ZK_SERVER_HEAP來,因為zkEnv.sh有如下程式碼
# default heap for zookeeper server
ZK_SERVER_HEAP="${ZK_SERVER_HEAP:-1000}"
export SERVER_JVMFLAGS="-Xmx${ZK_SERVER_HEAP}m $SERVER_JVMFLAGS"
當然其它一些-D的java 參數, 可以設置到這個變數上SERVER_JVMFLAGS
使用java 命令
上述腳本實際上最終入口,是執行了zookeeper的jar。我們當然也可以直接通過java命令啟動zookeeper的jar,並加裝指定配置
java -cp zookeeper.jar:lib/*:conf org.apache.zookeeper.server.quorum.QuorumPeerMain zoo.conf
參考資料
//zookeeper.apache.org/doc/r3.6.1/zookeeperAdmin.html#sc_zkMulitServerSetup

