zookeeper學習(一)安裝、配置、運行

說明: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 必須附加參數,參數能夠是startrestartstatusstop等。

五、運行客戶端

很簡單,執行./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,只不過此時能夠選擇鏈接的服務器,仍然能夠鏈接當前主機的服務器。

十、操做(集羣)

很簡單,在一個客戶端裏新建一個節點,而後在另外一個客戶端修查看、修改便可。

再也不細說。

相關文章
相關標籤/搜索