1. 程式人生 > >單機安裝ZooKeeper

單機安裝ZooKeeper

Zookeeper 分布式 集群 集群管理 單機安裝

zookeeper下載、安裝以及配置環境變量

本節介紹單機的zookeeper安裝,官方下載地址如下:

https://archive.apache.org/dist/zookeeper/

我這裏使用的是3.4.11版本,所以找到相應的版本點擊進去,復制到.tar.gz的下載鏈接到Linux上進行下載。命令如下:

[root@study-01 ~]# cd /usr/local/src/
[root@study-01 /usr/local/src]# wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz

下載完成之後將其解壓到/usr/local/目錄下:

[root@study-01 /usr/local/src]# tar -zxvf zookeeper-3.4.11.tar.gz -C /usr/local/
[root@study-01 /usr/local/src]# cd ../zookeeper-3.4.11/
[root@study-01 /usr/local/zookeeper-3.4.11]# ls
bin        dist-maven       lib          README_packaging.txt  zookeeper-3.4.11.jar.asc
build.xml  docs             LICENSE.txt  recipes               zookeeper-3.4.11.jar.md5
conf       ivysettings.xml  NOTICE.txt   src                   zookeeper-3.4.11.jar.sha1
contrib    ivy.xml          README.md    zookeeper-3.4.11.jar
[root@study-01 /usr/local/zookeeper-3.4.11]#

安裝完成之後,我們就可以配置環境變量了。如下:

[root@study-01 ~]# vim ./.bash_profile  # 增加內容如下
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.11/
export PATH=$PATH:$ZOOKEEPER_HOME/bin
[root@study-01 ~]# source ./.bash_profile

zookeeper文件夾主要目錄介紹

  • bin:存放主要的一些常用目錄
  • conf:存放配置文件,一會我們需要修改zoo.cfg配置文件
  • contrib:附加的一些功能
  • dist-maven:mvn編譯後的目錄
  • docs:存放幫助文檔文件
  • lib:需要依賴的jar包
  • recipes:官方提供的案例demo代碼
  • src:源碼

zookeeper配置文件介紹,運行zk

進入conf目錄,拷貝官方提供的模板配置文件,然後進行編輯:

[root@study-01 /usr/local/zookeeper-3.4.11]# cd conf/
[root@study-01 /usr/local/zookeeper-3.4.11/conf]# cp zoo_sample.cfg zoo.cfg
[root@study-01 /usr/local/zookeeper-3.4.11/conf]# vim zoo.cfg  # 配置內容如下
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-3.4.11/dataDir
dataLogDir=/usr/local/zookeeper-3.4.11/dataLogDir
clientPort=2181
[root@study-01 /usr/local/zookeeper-3.4.11/conf]# cd ../
[root@study-01 /usr/local/zookeeper-3.4.11]# mkdir {dataDir,dataLogDir}

zoo.cfg配置:

  • tickTime:用於計算的時間單元。比如session超時:N * tickTime
  • initLimit:用於集群,允許從節點連接並同步到master節點的初始化連接時間,以tickTime的倍數來表示
  • syncLimit:用於集群,master主節點與從節點之間發送消息,請求和應答時間長度(心跳包機制)
  • dataDir:必須配置,數據文件所存放的目錄
  • dataLogDir:日誌目錄,如果不配置就和dataDir共用同一個目錄
  • clientPort:連接服務器的端口,默認為2181

以上我們就完成了單機的zookeeper安裝與配置,接下來我們嘗試啟動一下zookeeper服務:

[root@study-01 ~]# zkServer.sh start  # 啟動zookeeper服務
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.11/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@study-01 ~]# netstat -lntp | grep java  # 檢查端口是否有正常監聽
tcp6       0      0 :::58056                :::*                    LISTEN      3057/java           
tcp6       0      0 :::2181                 :::*                    LISTEN      3057/java           
[root@study-01 ~]# zkServer.sh status  # 查看zookeeper服務狀態
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.11/bin/../conf/zoo.cfg
Mode: standalone
[root@study-01 ~]# ps aux |grep java  # 檢查服務進程
root       3057  0.9  0.9 5230652 79840 pts/0   Sl   04:26   0:01 /usr/local/jdk1.8/bin/java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /usr/local/zookeeper-3.4.11/bin/../build/classes:/usr/local/zookeeper-3.4.11/bin/../build/lib/*.jar:/usr/local/zookeeper-3.4.11/bin/../lib/slf4j-log4j12-1.6.1.jar:/usr/local/zookeeper-3.4.11/bin/../lib/slf4j-api-1.6.1.jar:/usr/local/zookeeper-3.4.11/bin/../lib/netty-3.10.5.Final.jar:/usr/local/zookeeper-3.4.11/bin/../lib/log4j-1.2.16.jar:/usr/local/zookeeper-3.4.11/bin/../lib/jline-0.9.94.jar:/usr/local/zookeeper-3.4.11/bin/../lib/audience-annotations-0.5.0.jar:/usr/local/zookeeper-3.4.11/bin/../zookeeper-3.4.11.jar:/usr/local/zookeeper-3.4.11/bin/../src/java/lib/*.jar:/usr/local/zookeeper-3.4.11/bin/../conf: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain /usr/local/zookeeper-3.4.11/bin/../conf/zoo.cfg
root       3146  0.0  0.0 112680   976 pts/0    S+   04:29   0:00 grep --color=auto java
[root@study-01 ~]# 

然後再關閉zookeeper服務:

[root@study-01 ~]# zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.11/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
[root@study-01 ~]# 

能夠正常開/關後,就代表我們的zookeeper成功安裝好了。


zk數據模型介紹

zookeeper基本數據模型:

  • 基本數據模型是一個樹形結構,類似於前端開發中的tree.js組件。或者像一個網站的目錄結構:
    技術分享圖片

  • zk的數據模型也可以理解為linux/unix的文件目錄,如:/usr/local/...。如下圖:
    技術分享圖片

  • 每一個節點都稱之為znode,它可以有子節點,也可以有數據
  • 每個節點分為臨時節點和永久節點,臨時節點在客戶端斷開後就會消失
  • 每個zk節點都有各自的版本號,可以通過命令行來顯示節點信息
  • 每當節點數據發生變化,那麽該節點的版本號會累加(樂觀鎖)
  • 刪除/修改過時的節點,版本號不匹配則會報錯
  • 每個zk節點存儲的數據不宜過大,幾k即可
  • 節點可以設置權限acl,可以通過權限來控制用戶訪問

zk客戶端連接關閉服務端,查看znode

啟動zk服務端:

[root@study-01 ~]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.11/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@study-01 ~]# 

啟動zk客戶端連接:

[root@study-01 ~]# zkCli.sh

查看可以使用哪些命令:

[zk: localhost:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
    stat path [watch]
    set path data [version]
    ls path [watch]
    delquota [-n|-b] path
    ls2 path [watch]
    setAcl path acl
    setquota -n|-b val path
    history 
    redo cmdno
    printwatches on|off
    delete path [version]
    sync path
    listquota path
    rmr path
    get path [watch]
    create [-s] [-e] path data acl
    addauth scheme auth
    quit 
    getAcl path
    close 
    connect host:port
[zk: localhost:2181(CONNECTED) 1]

查看znode,十分類似於在Linux下查看目錄的操作:

[zk: localhost:2181(CONNECTED) 2] ls /  # 根節點
[zookeeper]
[zk: localhost:2181(CONNECTED) 3] ls /zookeeper  # 父節點
[quota]
[zk: localhost:2181(CONNECTED) 4] ls /zookeeper/quota  # 子節點
[]
[zk: localhost:2181(CONNECTED) 5]

關閉zk客戶端連接:

[zk: localhost:2181(CONNECTED) 5] quit  # 退出
Quitting...
2018-04-21 17:48:35,534 [myid:] - INFO  [main:ZooKeeper@687] - Session: 0x1000034ed8d0000 closed
2018-04-21 17:48:35,536 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@520] - EventThread shut down for session: 0x1000034ed8d0000
[root@study-01 ~]#

zookeeper的作用體現

  • master節點選舉,主節點掛了以後,從節點就會接手工作,並且保證這個節點是唯一的,這也是所謂的首腦模式,從而保證我們的集群是高可用的。
  • 統一配置文件管理,即只需要部署一臺服務器,則可以把相同的配置文件同步更新到其他所有服務器,此操作在雲計算中用的特別多(假設某一臺機器修改了redis配置文件,就可以同步更新到其他機器上)
  • 發布與訂閱,類似消息隊列MQ(amq,rmq...),dubbo發布者把數據存在znode上,訂閱者會讀取這個數據。
    技術分享圖片

  • 提供分布式鎖,分布式環境中也會有不同進程之間爭奪資源,這時候就需要鎖機制來保證數據的一致性,類似於多線程中的鎖。例如下圖中這種多個服務器訪問同一個文件時,就需要分布式鎖來讓他們進行排隊訪問:
    技術分享圖片

  • 集群管理,集群中保證數據的強一致性。能夠讓客戶端訪問集群中任意一個服務器時,保證訪問到的數據都是一致的:
    技術分享圖片

單機安裝ZooKeeper