单机安装ZooKeeper
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
zookeeper下載、安裝以及配置環(huán)境變量
本節(jié)介紹單機(jī)的zookeeper安裝,官方下載地址如下:
https://archive.apache.org/dist/zookeeper/
我這里使用的是3.4.11版本,所以找到相應(yīng)的版本點(diǎn)擊進(jìn)去,復(fù)制到.tar.gz的下載鏈接到Linux上進(jìn)行下載。命令如下:
[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]#安裝完成之后,我們就可以配置環(huán)境變量了。如下:
[root@study-01 ~]# vim /etc/profile # 增加內(nèi)容如下 export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.11/ export PATH=$PATH:$ZOOKEEPER_HOME/bin [root@study-01 ~]# source /etc/profilezookeeper文件夾主要目錄介紹
- bin:存放主要的一些常用目錄
- conf:存放配置文件,一會(huì)我們需要修改zoo.cfg配置文件
- contrib:附加的一些功能
- dist-maven:mvn編譯后的目錄
- docs:存放幫助文檔文件
- lib:需要依賴的jar包
- recipes:官方提供的案例demo代碼
- src:源碼
zookeeper配置文件介紹,運(yùn)行zk
進(jìn)入conf目錄,拷貝官方提供的模板配置文件,然后進(jìn)行編輯:
[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 # 配置內(nèi)容如下 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:用于計(jì)算的時(shí)間單元。比如session超時(shí):N * tickTime
- initLimit:用于集群,允許從節(jié)點(diǎn)連接并同步到master節(jié)點(diǎn)的初始化連接時(shí)間,以tickTime的倍數(shù)來(lái)表示
- syncLimit:用于集群,master主節(jié)點(diǎn)與從節(jié)點(diǎn)之間發(fā)送消息,請(qǐng)求和應(yīng)答時(shí)間長(zhǎng)度(心跳包機(jī)制)
- dataDir:必須配置,數(shù)據(jù)文件所存放的目錄
- dataLogDir:日志目錄,如果不配置就和dataDir共用同一個(gè)目錄
- clientPort:連接服務(wù)器的端口,默認(rèn)為2181
以上我們就完成了單機(jī)的zookeeper安裝與配置,接下來(lái)我們嘗試啟動(dòng)一下zookeeper服務(wù):
[root@study-01 ~]# zkServer.sh start # 啟動(dòng)zookeeper服務(wù) 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 # 檢查端口是否有正常監(jiān)聽(tīng) tcp6 0 0 :::58056 :::* LISTEN 3057/java tcp6 0 0 :::2181 :::* LISTEN 3057/java [root@study-01 ~]# zkServer.sh status # 查看zookeeper服務(wù)狀態(tài) 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 # 檢查服務(wù)進(jìn)程 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 ~]#然后再關(guān)閉zookeeper服務(wù):
[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 ~]#能夠正常開(kāi)/關(guān)后,就代表我們的zookeeper成功安裝好了。
?設(shè)置為服務(wù):
vim?/etc/init.d/zookeeper
#!/bin/bash #chkconfig:2345 20 90 #description:zookeeper #processname:zookeeper export JAVA_HOME=/usr/local/jdk1.8 case $1 in start) su root /usr/local/zookeeper-3.4.13/bin/zkServer.sh start;; stop) su root /usr/local/zookeeper-3.4.13/bin/zkServer.sh stop;; status) su root /usr/local/zookeeper-3.4.13/bin/zkServer.sh status;; restart) su root /usr/local/zookeeper-3.4.13/bin/zkServer.sh restart;; *) echo "require start|stop|status|restart" ;; esac????chmod -R 755 /etc/init.d/zookeeper
? ? 使用service zookeeper start? / stop 即可完成 zookeeper 啟動(dòng)/停止。
開(kāi)機(jī)自啟:
? ? chkconfig -add zookeeper
????chkconfig zookeeper on
?
?
zk數(shù)據(jù)模型介紹
zookeeper基本數(shù)據(jù)模型:
-
基本數(shù)據(jù)模型是一個(gè)樹(shù)形結(jié)構(gòu),類(lèi)似于前端開(kāi)發(fā)中的tree.js組件。或者像一個(gè)網(wǎng)站的目錄結(jié)構(gòu):
-
zk的數(shù)據(jù)模型也可以理解為linux/unix的文件目錄,如:/usr/local/...。如下圖:
- 每一個(gè)節(jié)點(diǎn)都稱之為znode,它可以有子節(jié)點(diǎn),也可以有數(shù)據(jù)
- 每個(gè)節(jié)點(diǎn)分為臨時(shí)節(jié)點(diǎn)和永久節(jié)點(diǎn),臨時(shí)節(jié)點(diǎn)在客戶端斷開(kāi)后就會(huì)消失
- 每個(gè)zk節(jié)點(diǎn)都有各自的版本號(hào),可以通過(guò)命令行來(lái)顯示節(jié)點(diǎn)信息
- 每當(dāng)節(jié)點(diǎn)數(shù)據(jù)發(fā)生變化,那么該節(jié)點(diǎn)的版本號(hào)會(huì)累加(樂(lè)觀鎖)
- 刪除/修改過(guò)時(shí)的節(jié)點(diǎn),版本號(hào)不匹配則會(huì)報(bào)錯(cuò)
- 每個(gè)zk節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù)不宜過(guò)大,幾k即可
- 節(jié)點(diǎn)可以設(shè)置權(quán)限acl,可以通過(guò)權(quán)限來(lái)控制用戶訪問(wèn)
zk客戶端連接關(guān)閉服務(wù)端,查看znode
啟動(dòng)zk服務(wù)端:
[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 ~]#啟動(dòng)zk客戶端連接:
[root@study-01 ~]# zkCli.sh查看可以使用哪些命令:
[zk: localhost:2181(CONNECTED) 0] help ZooKeeper -server host:port cmd argsstat path [watch]set path data [version]ls path [watch]delquota [-n|-b] pathls2 path [watch]setAcl path aclsetquota -n|-b val pathhistory redo cmdnoprintwatches on|offdelete path [version]sync pathlistquota pathrmr pathget path [watch]create [-s] [-e] path data acladdauth scheme authquit getAcl pathclose connect host:port [zk: localhost:2181(CONNECTED) 1]查看znode,十分類(lèi)似于在Linux下查看目錄的操作:
[zk: localhost:2181(CONNECTED) 2] ls / # 根節(jié)點(diǎn) [zookeeper] [zk: localhost:2181(CONNECTED) 3] ls /zookeeper # 父節(jié)點(diǎn) [quota] [zk: localhost:2181(CONNECTED) 4] ls /zookeeper/quota # 子節(jié)點(diǎn) [] [zk: localhost:2181(CONNECTED) 5]關(guān)閉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的作用體現(xiàn)
- master節(jié)點(diǎn)選舉,主節(jié)點(diǎn)掛了以后,從節(jié)點(diǎn)就會(huì)接手工作,并且保證這個(gè)節(jié)點(diǎn)是唯一的,這也是所謂的首腦模式,從而保證我們的集群是高可用的。
- 統(tǒng)一配置文件管理,即只需要部署一臺(tái)服務(wù)器,則可以把相同的配置文件同步更新到其他所有服務(wù)器,此操作在云計(jì)算中用的特別多(假設(shè)某一臺(tái)機(jī)器修改了redis配置文件,就可以同步更新到其他機(jī)器上)
-
發(fā)布與訂閱,類(lèi)似消息隊(duì)列MQ(amq,rmq...),dubbo發(fā)布者把數(shù)據(jù)存在znode上,訂閱者會(huì)讀取這個(gè)數(shù)據(jù)。
-
提供分布式鎖,分布式環(huán)境中也會(huì)有不同進(jìn)程之間爭(zhēng)奪資源,這時(shí)候就需要鎖機(jī)制來(lái)保證數(shù)據(jù)的一致性,類(lèi)似于多線程中的鎖。例如下圖中這種多個(gè)服務(wù)器訪問(wèn)同一個(gè)文件時(shí),就需要分布式鎖來(lái)讓他們進(jìn)行排隊(duì)訪問(wèn):
- 集群管理,集群中保證數(shù)據(jù)的強(qiáng)一致性。能夠讓客戶端訪問(wèn)集群中任意一個(gè)服務(wù)器時(shí),保證訪問(wèn)到的數(shù)據(jù)都是一致的:
轉(zhuǎn)載于:https://my.oschina.net/langwanghuangshifu/blog/2231256
總結(jié)
以上是生活随笔為你收集整理的单机安装ZooKeeper的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 孕妇梦到两条小蛇预示着什么
- 下一篇: 归 [拾叶集]