說明:zookeeper徹底能夠standalone,也能夠僞集羣形式,固然生產中都是集羣形式。另外,也能夠在windows下運行。html
若是隻是研究用,徹底能夠在windows下使用standalone或者僞集羣形式。linux
爲何要集羣?固然是爲了更穩定的服務。另外由於這貨的機制是超過半數節點存活才能夠提供服務,因此集羣時不要將數量搞成偶數 -- 不是不能夠,只是很彆扭。redis
我的是用了三臺虛擬機(主要是想研究下大數據雲計算之類的,集羣是必須),CentOS 6.8 x64,Basic Server模式安裝。對了,虛擬機是virtual box (簡稱vbox)。apache
------------------------------這部分信息不須要的能夠略過:開始--------------------------------windows
安裝vbox、新建虛擬機、安裝CentOS的過程就不說了,若是須要能夠自行百度,或者私信我也行。緩存
有一點要提一下,網卡設置,我用的是橋接,也建議你們使用橋接,緣由以下。服務器
vbox的網絡鏈接有三種:NAT (轉換)、橋接、Host-only (僅主機)。網絡
各自的特色是:NAT能夠訪問外網,但主機與虛擬機之間不能直接通訊(能夠經過端口轉發,我的不喜歡);橋接是局域網獨立IP,能夠訪問外網;Host-only則只能與主機通訊,不能外網。ide
由於涉及到虛擬機之間的交互以及主機與虛擬機之間的交互,我的更喜歡橋接,給每一個虛擬機配置固定的局域網ip便可 -- 缺點也有,就是換一個環境就不能使用了,除非局域網是相似的(網關、許可等)。測試
CentOS配置ip很簡單,可使用setup命令配置,半圖形化的操做。或者修改/etc/sysconfig/network-scripts/ifcfg-eth0中的內容 -- 記得重啓網絡服務service network restart。
建議在裝完一個系統以後,作一個快照,再將須要的軟件如JDK、redis、zookeeper等都上傳上去,而後配置好環境變量等,再作一個快照。(略)
而後,克隆該系統,記得選擇從新生成網卡硬件地址。
而後,進入複製出來的系統,使用上面提到的方法修改ip,記得刪除裏面的UUID和硬件地址(修改也行)。--此時重啓網絡服務是無效的,由於系統緩存了一些網絡信息。
緩存的信息位於 /etc/udev/rules.d/70-presistent-net.rules,刪除該文件,最後重啓系統,搞定。
------------------------------這部分信息不須要的能夠略過:結束--------------------------------
一、下載
官方地址:http://zookeeper.apache.org/releases.html
能夠找鏡像網站下載:http://mirrors.hust.edu.cn/apache/zookeeper/ 等等。
我下載的是當前最新的release版本:zookeeper-3.4.9.tar.gz。
二、解壓
tar -zxvf zookeeper-3.4.9.tar.gz ,解壓出來的文件夾是zookeeper-3.4.9 (個人已經重命名爲zookeeper,爲了方便)。
三、配置 (standalone)
進入解壓後的文件夾,裏面有一個conf文件夾,其中包含了三個文件:
-rw-rw-r--. 1 1001 1001 535 8月 23 15:39 configuration.xsl
-rw-rw-r--. 1 1001 1001 2161 8月 23 15:39 log4j.properties
-rw-rw-r--. 1 1001 1001 922 8月 23 15:39 zoo_sample.cfg
複製一份 zoo_sample.cfg,重命名爲zoo.cfg -- zookeeper啓動須要加載zoo.cfg文件。
其中的內容:
[root@localhost conf]# cat zoo_sample.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
[root@localhost conf]#
其餘的都好說,最重要的是要設置dataDir -- 保存快照的位置,注意,不要使用/tmp,這是臨時文件夾。
我設置的位置是 zookeeper文件夾下面的data:
dataDir=/root/zookeeper/data
至此,zookeeper已經能夠standalone運行了。
四、運行服務端 (standalone)
很簡單,執行./bin/zkServer.sh start 便可,啓動完畢會有提示。
zkServer.sh 必須附加參數,參數能夠是start、restart、status、stop等。
五、運行客戶端
很簡單,執行./bin/zkCli.sh host:port 便可,若是是鏈接當前主機,能夠省略host:port。
六、操做
鏈接後就能夠進行操做了。若是不知道有哪些操做,能夠輸入help查看(或者胡亂敲一串也行,會提示有哪些命令),或者搜索引擎。
[zk: localhost:2181(CONNECTED) 18] 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) 19]
create負責建立路徑並設值;
get負責獲取路徑的值;
set負責修改路徑的值;
delete負責刪除路徑;
rmr負責刪除路徑;--暫不清楚與delete的區別
ls負責查看路徑
ls2負責查看路徑
stat負責統計路徑信息
quit退出客戶端
注意,這裏只是簡略的說一下,具體的請自行研究。
建立:create /com 「intel」
[zk: localhost:2181(CONNECTED) 3] create /com "intel"
Created /com
獲取:get /com
[zk: localhost:2181(CONNECTED) 0] get /com
intel
cZxid = 0x10000001d
ctime = Sun Dec 25 17:33:43 CST 2016
mZxid = 0x10000001d
mtime = Sun Dec 25 17:33:43 CST 2016
pZxid = 0x10000001d
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
修改:set /com 「google」
[zk: localhost:2181(CONNECTED) 2] set /com "google"
cZxid = 0x10000001d
ctime = Sun Dec 25 17:33:43 CST 2016
mZxid = 0x100000021
mtime = Sun Dec 25 17:36:12 CST 2016
pZxid = 0x10000001d
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
須要注意,不能憑空get或set,必須先create才能夠操做。不然會提示節點不存在:
[zk: localhost:2181(CONNECTED) 5] set /com/a "a"
Node does not exist: /com/a
刪除:delete /com
刪除以後再獲取就會提示節點不存在:
[zk: localhost:2181(CONNECTED) 6] delete /com
[zk: localhost:2181(CONNECTED) 7] get /com
Node does not exist: /com
各個命令具體意義請自行搜索,這裏僅做測試。
七、設置(集羣)
① 修改zoo.cfg,在最後添加內容:
# clusters
server.1=192.168.0.210:2888:3888
server.2=192.168.0.211:2888:3888
server.3=192.168.0.212:2888:3888
②設置myid:
注意,server.X中的X是指服務器的id,須要在${dataDir}中myid文件裏設置(須要手動新建該文件,默認不存在)。
其後的內容是host:2888:3888,暫時不明白2888:3888的含義。但host能夠是主機名,也能夠是ip,看我的習慣了。
別忘了設置myid文件及其內容!!!
linux可使用 echo 「X」 > /root/zookeeper/data/myid 搞定 -- 注意換成本身的路徑。
八、啓動服務器(集羣)
仍是 ./bin/zkServer.sh start ,只不過要將集羣中的全部服務器都啓動起來。
若是以前已啓動,建議關閉或重啓:./bin/zkServer.sh stop 或./bin/zkServer.sh restart
九、客戶端(集羣)
仍是 ./bin/zkCli.sh,只不過此時能夠選擇鏈接的服務器,仍然能夠鏈接當前主機的服務器。
十、操做(集羣)
很簡單,在一個客戶端裏新建一個節點,而後在另外一個客戶端修查看、修改便可。
再也不細說。