ZooKeeper分散式專題(一) -- zookeeper安裝以及介紹

H小永發表於2019-07-16

ZooKeeper分散式專題與Dubbo微服務入門

概述

zookeeper實際上是yahoo開發的,用於分散式中一致性處理的框架。最初其作為研發Hadoop時的副產品。由於分散式系統中一致性處理較為困難,其他的分散式系統沒有必要 費勁重複造輪子,故隨後的分散式系統中大量應用了zookeeper,以至於zookeeper成為了各種分散式系統的基礎元件,其地位之重要,可想而知。著名的hadoop,kafka,dubbo 都是基於zookeeper而構建。

zookeeper安裝

*  **下載**
複製程式碼

穩定版: mirror.bit.edu.cn/apache/zook…

  • 提取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

    存放原始碼的地方

ZooKeeper分散式專題與Dubbo微服務入門

相關文章