zookeeper安裝部署步驟

安裝步驟

本安裝教程,採用zookeeper 3.6.1html

  1. 裝java
  2. 下載zk包,分發到各個機器
  3. 肯定或建立一個zookeeper的數據存放路徑,並在該路徑下建立一個myid文件,其中設置當前zookeeper節點的編號,編號範圍1~255。整個zookeeper集羣惟一
  4. 在數據文件夾建立一個initialize文件,初始化集羣時使用,啓動後,集羣會自動刪除該文件。後續重啓集羣,不須要該文件

initialize文件

3.6.0的zk,在啓動後,若是發現本身的data 目錄是空的,則不會參與集羣選舉,知道該節點連上一個master, 而後從其同步過完整的數據後,才具備選舉權 ,之因此這麼作的緣由是。萬一誰不當心刪了數據文件,這個時候重啓該節點,若是運行該節點參與選舉,要是該節點被選成master, 會致使怎個集羣數據丟失。java

但第一次啓動集羣,你們確實都沒數據,若是都沒有選舉權的話,第一次選舉就不會進行,因此要在data 目錄下建立一個initialize文件,暫時屏蔽調3.6.0的數據丟失保護功能。集羣啓動,正常選舉後,該文件會被刪除,進入數據丟失的保護機制shell

配置文件

通常可直接配置zk髮型包conf下的zoo.cfg文件apache

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

一些安裝異常

異常1

2015-07-02 21:06:01,682 [myid:] - ERROR [main:QuorumPeerMain@86] - Invalid config, exiting abnormally
org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Address unresolved: Master.Hadoop:3888
at org.apache.zookeeper.server.quorum.QuorumPeer$QuorumServer.<init>(QuorumPeer.java:205)
at org.apache.zookeeper.server.quorum.flexible.QuorumMaj.<init>(QuorumMaj.java:89)
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.createQuorumVerifier(QuorumPeerConfig.java:401)
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseDynamicConfig(QuorumPeerConfig.java:425)
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:291)
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:126)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:110)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:79)
Invalid config, exiting abnormally

這種錯誤是由於配置文件,端口號後面有空格,去掉空格就能夠了oop

影響性能的點

數據盤獨立

磁盤的讀寫性能會嚴重影響到zk的性能。因此儘可能將zk的數據存儲目錄防止帶單獨的磁盤。有條件的話,將其日誌文件路徑也放置到單獨磁盤。同其它程序共用一個磁盤,當磁盤讀寫性能出現瓶頸時,zk的性能會急速降低性能

內存不要超機器限制

當zk申請的內存超過操做系統的空閒內存,那麼操做系統會啓用swap機制,即利用硬盤作爲交換內存。這也將嚴重影響zk的性能。因此若是系統有4g內存,那麼zk申請內存最好小於等於3G。flex

兩種啓動方式

使用自帶腳本

在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 它均可以。code

從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

參考資料

https://zookeeper.apache.org/doc/r3.6.1/zookeeperAdmin.html#sc_zkMulitServerSetup

相關文章
相關標籤/搜索