單機安裝ZooKeeper
阿新 • • 發佈:2018-04-21
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