zookeeper單機(Standalones模式)和集群搭建:
前奏:
(1).zookeeper也可以在windows下使用,和linux一樣可以單機也可以集群,具體就是解壓zookeeper-3.4.6.tar.gz,然后進入conf目錄修改配置文件zoo_sample.cfg,復制一份並改名zoo.cfg(這是默認名稱)
編輯zoo.cfg里面的dataDir=/tmp/zookeeper(把這個路徑換成windows帶盤符的路徑,單機版就改這么一點,集群版參考下面的Linux環境下集群,原理一樣.)
(2).win上啟動zookeeper,進入bin目錄雙擊zkServer.cmd即可(不要關閉控制台),啟動客戶端連接zookeeper,雙擊zkCli.cmd,然后回車即可(看到[zk: localhost:2181(CONNECTED) 0]表示成功),輸入ls / 查看zookeeper里面內容,具體命令下面Linux環境下搭建時講.
解壓目錄結構:

正式在Linux(centOS)上搭建zookeeper單機和集群版(偽):
1.准備軟件:zookeeper-3.4.6.tar.gz,jdk-8u60-linux-i586.tar.gz(jdk6以上都可以,32/64位自己根據Linux系統決定)
2.單機安裝(#之后是命令,命令后面命令含義)
#mkdir /java/建目錄
#tar -zxvf jdk-8u60-linux-i586.tar.gz -C /java/把jdk加壓到/java目錄
#tar -zxvf zookeeper-3.4.6.tar.gz -C /java/把zookeeper也解壓到/java目錄
配置java環境變量(全局的);當然你可以自己修改用戶的環境變量,在自己機器上玩不講究這些,用公司服務器就要按要求來.
#vim /etc/profile修改配置文件
在文件最后添加兩行:
JAVA_HOME=/java/jdk1.8.0_60
export PATH=$JAVA_HOME/bin:$PATH
保存退出(vi命令不熟悉百度)
#source /etc/profile重新加載剛修改的配置文件
#java -version查看java環境變量是否成功
修改zookeeper配置文件
#cd /java/zk1/zookeeper-3.4.6/進入zookeeper解壓目錄
#ll 查看解壓目錄下文件和目錄結構(也可以使用ls -al命令)
#cd conf/進入配置文件存放目錄
#ls -al 查看配置文件有哪些
#cp zoo_sample.cfg zoo.cfg 把這個配置文件示例復制一份並命名為zoo.cfg(默認名稱,可以自己取,自己取名zk.cfg在啟動時需要指定配置文件位置和名稱)
現在配置文件基本不需要修改了,但是可以看看配置文件內容
#vim zoo.cfg查看或編輯配置文件(只要5個參數)
tickTime=2000
這個時間是作為 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每隔tickTime 時間就會發送一個心跳。
initLimit=10
這個配置項是用來配置 Zookeeper 接受客戶端(這里所說的客戶端不是用戶連接 Zookeeper 服務器的客戶端,而是 Zookeeper 服務器集群中連接到 Leader 的 Follower 服務器)初始化連接時最長能忍受多少個心跳時間間隔數。當已經超過 10 個心跳的時間(也就是 tickTime)長度后 Zookeeper 服務器還沒有收到客戶端的返回信息,那么表明這個客戶端連接失敗。總的時間長度就是 5*2000=10 秒。
syncLimit=5
這個配置項標識 Leader 與 Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是 2*2000=4 秒。
dataDir=/tmp/zookeeper
顧名思義就是 Zookeeper 保存數據的目錄,默認情況下,Zookeeper 將寫數據的日志文件也保存在這個目錄里。
clientPort=2181這個端口就是客戶端連接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。
3.啟動zookeeper服務端
#cd ..退到上級目錄,可以看到(conf的同級目錄bin)
#cd bin/進入bin目錄
#./zkServer.sh start ../conf/zoo.cfg啟動zookeeper服務端(如果配置文件名稱就是zoo.cfg可以直接寫./zkServer.sh start)
啟動信息(sh bin/zkServer.sh restart重啟)
JMX enabled by default
Using config: ../conf/zoo.cfg
Starting zookeeper ... STARTED
#jps查看java進程(zookeeper基於java平台算java進程)
進程中顯示
3109 Jps
3099 QuorumPeerMain這就是zookeeper進程(啟動成功)
4.連zookeeper客戶端
#./zkCli.shstart啟動客戶端連接本機zookeeper(集群連接方式需指定server[./zkCli.sh -server 192.168.101.10:2181])
zookeeper命令
help查看zookeeper幫助
ls /查看zookeeper下有哪些東西
ls2 /查看當前節點數據並能看到更新次數等數據
create /zk "zz"創建zk節點,關聯字符串"zz"
get /zk查看節點內容(數據大小,創建時間,版本之類的信息)
set /zk abc設置節點內容(如果有數據會被覆蓋)
delete /zk刪除節點
quit退出客戶端
5.zookeeper集群搭建
1.和單機一樣解壓一份
2.偽集群搭建(和真集群沒多大區別,只是在一台機器上啟動3個zookeeper實例)
zookeeper內部有個選舉機制,所以zookeeper集群需要計數台服務器(最少3台,3,5,7,9......)
3.一台機器通過該端口實現同時啟動3個實例
創建3個zookeeper目錄
#mkdir -p /java/zk1在java目錄下創建zk1目錄
#mkdir -p /java/zk2在java目錄下創建zk2目錄
#mkdir -p /java/zk3在java目錄下創建zk3目錄
把單機的zookeeper復制三份放入剛建的3個目錄
#cp -r zookeeper-3.4.6/ zk1
#cp -r zookeeper-3.4.6/ zk2
#cp -r zookeeper-3.4.6/ zk3
創建3個zookeeper臨時文件存放目錄
#mkdir -p /java/data1在java目錄下創建data1目錄
#mkdir -p /java/data2在java目錄下創建data2目錄
#mkdir -p /java/data3在java目錄下創建data3目錄
echo "1">/java/data1/myid在目錄新建myid文件分別寫入對應id(1,2,3給zookeeper做一個標識)
echo "2">/java/data2/myid
echo "3">/java/data3/myid
4.修改zookeeper配置文件(支持集群)
#cd /java/zk1/zookeeper-3.4.6/conf/進入zk1配置文件目錄
vim zoo.cfg修改配置文件
dataDir=/java/data1修改臨時文件目錄
clientPort=2181修改端口(3個不一樣就行)
***添加幾行***
server.1=192.168.101.10:2888:3888ip是本機ip,偽集群端口3台不一樣(如果是3台機器,ip為每個機器ip,端口2888:3888可以都是這個),server.1和myid文件內容id一致
server.2=192.168.101.10:2889:3889
server.3=192.168.101.10:2890:3890
同理修改另兩個zookeeper配置文件
dataDir分別指向我們自己建的3個data目錄data1,data2,data3
clientPort三個zookeeper在一台機器上,端口必須不同,搭建在三台服務器上可以都是2181
都需要添加后面幾行,指定集群其他機器ip和端口
5.集群測試
啟動三台zookeeper
#cd /java/zk1/zookeeper-3.4.6/bin 進入各自的bin目錄執行如下命令
#./zkServer.sh start ../conf/zoo.cfg啟動服務
#jps
三台都啟動后就會出現3個zookeeper進程
3188 QuorumPeerMain
3099 QuorumPeerMain
3227 Jps
3135 QuorumPeerMain
怎么知道誰是leader,誰是follower?
在各自的bin下執行如下命令
#./zkServer.sh status查看服務狀態
顯示信息(follower):
JMX enabled by default
Using config: ../conf/zoo.cfg
Mode: follower
顯示信息(leader):
JMX enabled by default
Using config: ../conf/zoo.cfg
Mode: leader
#./zkServer.sh restart重啟
#./zkServer.sh stop停止zookeeper服務
6.客戶端連接集群
./zkCli.sh -server 192.168.101.10:2181在bin目錄下執行(連接具體的zookeeper)
7.java接口測試zookeeper
請看測試代碼zookeeper-test.rar(如果看不懂控制台信息,請System.out)
3分鍾搞定
第二次搭建zookeeper集群時的思想(實現更簡單):
偽集群一份zookeeper,多份配置文件:
單機和集群全在一台機器上同時運行;
configuration.xsl
log4j.properties
zoo1.cfg
zoo2.cfg
123是集群
zoo3.cfg
zoo.cfg默認單機
zoo_sample.cfg自帶

cd /opt/zookeeper-3.4.6/mkdir zk1
mkdir zk2
mkdir zk3
echo "1">zk1/myid
echo "2">zk2/myid
echo "3">zk3/myid
修改配置文件夾(照葫蘆畫瓢)
:斜體部分
# 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=/opt/zookeeper-3.4.6/zk1
# the port at which the clients will connect
clientPort=2182
server.1=192.168.20.205:2888:3888
server.2=192.168.20.205:2889:3889
server.1=192.168.20.205:2890:3890
# 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
#啟動集群,指定配置文件:
./zkServer.sh start ../conf/zoo1.cfg
./zkServer.sh start ../conf/zoo2.cfg
./zkServer.sh start ../conf/zoo3.cfg
#查看集群啟動狀態,指定配置文件夾:
./zkServer.sh status ../conf/zoo1.cfg
./zkServer.sh
status
../conf/zoo2.cfg
./zkServer.sh
status
../conf/zoo3.cfg
#客戶端連接集群:
./zkCli.sh -server 192.168.20.205:2182
./zkCli.sh -server 192.168.20.205:2183
./zkCli.sh -server 192.168.20.205:2184
#啟動單機版
./zkServer.sh start
./zkServer.sh
status
#客戶端連接單機:(默認使用zoo.cfg配置文件)
./zkCli.sh
附件列表