概述
zookeeper實際上是yahoo開發的,用於分散式中一致性處理的框架。最初其作為研發Hadoop時的副產品。由於分散式系統中一致性處理較為困難,其他的分散式系統沒有必要 費勁重複造輪子,故隨後的分散式系統中大量應用了zookeeper,以至於zookeeper成為了各種分散式系統的基礎元件,其地位之重要,可想而知。著名的hadoop,kafka,dubbo 都是基於zookeeper而構建。
zookeeper安裝
* **下載**
複製程式碼
-
提取tar檔案
cd /opt/ tar -zxf zookeeper-3.4.12.tar.gz cd zookeeper-3.4.12 複製程式碼
-
建立data資料夾 用於儲存資料檔案
mkdir data
-
建立logs資料夾 用於儲存日誌
mkdir logs
-
-
建立配置檔案
使用命令 vi conf/zoo.cfg 建立配置檔案並開啟,ps (其實目錄conf 下有預設的配置檔案,但是註釋太多,英文一大堆,太亂,所有還不如自己新建一個配置檔案,複製一份zoo_sample.cfg並命名為zoo.cfg)
-
輸入命令:
vi /opt/zookeeper-3.4.12/conf/zoo.cfg
-
編輯填寫內容如下:
tickTime = 2000 dataDir = /opt/zookeeper-3.4.12/data dataLogDir = /opt/zookeeper-3.4.12/logs tickTime = 2000 clientPort = 2181 initLimit = 5 syncLimit = 2 複製程式碼
-
ZooKeeper操作
-
啟動服務
-
/opt/zookeeper-3.4.12/bin/zkServer.sh start
-
響應
ZooKeeper JMX enabled by default Using config: /opt/zookeeper-3.4.12/bin/../conf/zoo.cfg Starting zookeeper ... STARTED 複製程式碼
-
-
連線服務
-
/opt/zookeeper-3.4.12/bin/zkCli.sh
-
響應
Connecting to localhost:2181 2017-08-22 16:43:05,954 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.12-1757313, built on 08/23/2016 06:50 GMT 2017-08-22 16:43:05,958 [myid:] - INFO [main:Environment@100] - Client environment:host.name=node1 2017-08-22 16:43:05,958 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_144 2017-08-22 16:43:05,967 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation 2017-08-22 16:43:05,967 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/usr/lib/jvm/jre 2017-08-22 16:43:05,967 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/opt/zookeeper-3.4.12/bin/../build/classes:/opt/zookeeper-3.4.12/bin/../build/lib/*.jar:/opt/zookeeper-3.4.12/bin/../lib/slf4j-log4j12-1.6.1.jar:/opt/zookeeper-3.4.12/bin/../lib/slf4j-api-1.6.1.jar:/opt/zookeeper-3.4.12/bin/../lib/netty-3.10.5.Final.jar:/opt/zookeeper-3.4.12/bin/../lib/log4j-1.2.16.jar:/opt/zookeeper-3.4.12/bin/../lib/jline-0.9.94.jar:/opt/zookeeper-3.4.12/bin/../zookeeper-3.4.12.jar:/opt/zookeeper-3.4.12/bin/../src/java/lib/*.jar:/opt/zookeeper-3.4.12/bin/../conf:.:/lib/jvm/lib:/lib/jvm/jre/lib 2017-08-22 16:43:05,967 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib 2017-08-22 16:43:05,967 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp 2017-08-22 16:43:05,967 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA> 2017-08-22 16:43:05,967 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux 2017-08-22 16:43:05,967 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64 2017-08-22 16:43:05,967 [myid:] - INFO [main:Environment@100] - Client environment:os.version=3.10.0-514.26.2.el7.x86_64 2017-08-22 16:43:05,968 [myid:] - INFO [main:Environment@100] - Client environment:user.name=root 2017-08-22 16:43:05,968 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root 2017-08-22 16:43:05,968 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/opt/zookeeper-3.4.12 2017-08-22 16:43:05,969 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@506c589e Welcome to ZooKeeper! 2017-08-22 16:43:06,011 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1032] - Opening socket connection to server localhost/0:0:0:0:0:0:0:1:2181. Will not attempt to authenticate using SASL (unknown error) JLine support is enabled 2017-08-22 16:43:06,164 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@876] - Socket connection established to localhost/0:0:0:0:0:0:0:1:2181, initiating session 2017-08-22 16:43:06,237 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server localhost/0:0:0:0:0:0:0:1:2181, sessionid = 0x15e091bf2020000, negotiated timeout = 30000 WATCHER:: WatchedEvent state:SyncConnected type:None path:null [zk: localhost:2181(CONNECTED) 0] 複製程式碼
-
-
服務狀態
-
/opt/zookeeper-3.4.12/bin/zkServer.sh status
-
響應
ZooKeeper JMX enabled by default Using config: /opt/zookeeper-3.4.12/bin/../conf/zoo.cfg Mode: standalone 複製程式碼
-
-
停止服務
-
/opt/zookeeper-3.4.12/bin/zkServer.sh stop
-
響應
bin/zkServer.sh stop ZooKeeper JMX enabled by default Using config: /opt/zookeeper-3.4.12/bin/../conf/zoo.cfg Stopping zookeeper ... STOPPED 複製程式碼
-
至此 zookeeper 的安裝就結束了;
zookeeper映象安裝
docker映象安裝參考:segmentfault.com/a/119000000…
zookeeper叢集安裝
zookeeper叢集安裝參見:segmentfault.com/a/119000001…
zookeeper配置檔案描述
-
tickTime
tickTime則是上述兩個超時配置的基本單位,例如對於initLimit,其配置值為5,說明其超時時間為 2000ms * 5 = 10秒。
-
dataDir
其配置的含義跟單機模式下的含義類似,不同的是叢集模式下還有一個myid檔案。myid檔案的內容只有一行,且內容只能為1 - 255之間的數字,這個數字亦即上面介紹server.id中的id,表示zk程式的id。
-
dataLogDir
如果沒提供的話使用的則是dataDir。zookeeper的持久化都儲存在這兩個目錄裡。dataLogDir裡是放到的順序日誌(WAL)。而dataDir裡放的是記憶體資料結構的snapshot,便於快速恢復。為了達到效能最大化,一般建議把dataDir和dataLogDir分到不同的磁碟上,這樣就可以充分利用磁碟順序寫的特性。
-
initLimit
ZooKeeper叢集模式下包含多個zk程式,其中一個程式為leader,餘下的程式為follower,當follower最初與leader建立連線時,它們之間會傳輸相當多的資料,尤其是follower的資料落後leader很多。initLimit配置follower與leader之間建立連線後進行同步的最長時間
-
syncLimit
配置follower和leader之間傳送訊息,請求和應答的最大時間長度。
zookeeper資料夾主要目錄介紹
-
bin
進入 bin目錄會看到,zkCleanup.sh,zkCli.cmd,zkCli.sh,zkServer.cmd,zkServer.sh等等.主要的一些執行命令,其中 cmd結尾是在 windows上執行的命令,sh是在 linux/Mac上執行的命令
-
conf
主要是存放配置檔案,進入 conf目錄會看到, configuration.xsl,log4j.properties和 zoo_sample.cfg檔案,其中兩個不做介紹,這裡只關注zoo_sample.cfg,前面提到的將zoo_sample.cfg複製並重新命名為zoo.cfg;
-
contrib
附加的一些功能
-
dist-maven
mvn 編譯後的目錄,pom檔案,jar包等
-
docs
存放文件的地方,index.html,或者 index.pdf
-
lib
需要依賴的 jar包
-
recipes
存放一些案例
-
src
存放原始碼的地方