在學(xué)習(xí)zookeeper的過程中约巷,常常受制于環(huán)境限制,沒有足夠多的硬件資源以供自己玩耍旱捧,通常情況下只有自己的16G內(nèi)存的筆記本独郎,因此,在這種情況下枚赡,我們需要通過搭建偽集群環(huán)境來體驗zookeeper的集群模式氓癌。
1.環(huán)境準(zhǔn)備
操作系統(tǒng): fedora25
硬件配置: thinkpad X230 i5 16G 500G
依賴軟件: jdk 1.8.0_121 (官方版本,非openjdk)
下載: zookeeper-3.4.10.tar.gz
cd /opt
wget http://www-us.apache.org/dist/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
安裝目錄:/opt/zookeeper
mkdir /opt/zookeeper
cd /opt/zookeeper
tar -zxvf /opt/zookeeper-3.4.10.tar.gz
cp -rf /opt/zookeeper/zookeeper-3.4.10 /opt/zookeeper/zoo-node1
cp -rf /opt/zookeeper/zookeeper-3.4.10 /opt/zookeeper/zoo-node2
cp -rf /opt/zookeeper/zookeeper-3.4.10 /opt/zookeeper/zoo-node3
rm -rf /opt/zookeeper/zookeeper-3.4.10
這樣贫橙,zookeeper的三個節(jié)點運(yùn)行目錄分別為:
/opt/zookeeper/zoo-node1
/opt/zookeeper/zoo-node2
/opt/zookeeper/zoo-node3
2.配置
2.1 zoo.cfg配置文件
zookeeper的運(yùn)行贪婉,需要在conf目錄配置zoo.cfg文件。我們可以參考zoo_sample.cfg進(jìn)行配置卢肃。
節(jié)點1配置如下:
#zookeeper時間單元疲迂,單位為毫秒
tickTime=2000
#集群中的follower服務(wù)器(F)與leader服務(wù)器(L)之間 初始連接 時能容忍的最多心跳數(shù)(tickTime的數(shù)量)才顿。
initLimit=10
# 集群中的follower服務(wù)器(F)與leader服務(wù)器(L)之間 請求和應(yīng)答 之間能容忍的最多心跳數(shù)(tickTime的數(shù)量)。
syncLimit=5
# data數(shù)據(jù)目錄
dataDir=/opt/zookeeper/zoo-node1/data
# 客戶端連接端口
clientPort=2181
# 客戶端最大連接數(shù)
#maxClientCnxns=60
# 需要保留的快照數(shù)目
#autopurge.snapRetainCount=3
# 是否開啟自動清理事務(wù)日志和快照功能 0 不開啟尤蒿,1表示開啟
#autopurge.purgeInterval=1
#集群配置
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
節(jié)點2配置
#zookeeper時間單元郑气,單位為毫秒
tickTime=2000
#集群中的follower服務(wù)器(F)與leader服務(wù)器(L)之間 初始連接 時能容忍的最多心跳數(shù)(tickTime的數(shù)量)。
initLimit=10
# 集群中的follower服務(wù)器(F)與leader服務(wù)器(L)之間 請求和應(yīng)答 之間能容忍的最多心跳數(shù)(tickTime的數(shù)量)腰池。
syncLimit=5
# data數(shù)據(jù)目錄
dataDir=/opt/zookeeper/zoo-node2/data
# 客戶端連接端口
clientPort=2182
# 客戶端最大連接數(shù)
#maxClientCnxns=60
# 需要保留的快照數(shù)目
#autopurge.snapRetainCount=3
# 是否開啟自動清理事務(wù)日志和快照功能 0 不開啟尾组,1表示開啟
#autopurge.purgeInterval=1
#集群配置
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
節(jié)點3配置
#zookeeper時間單元,單位為毫秒
tickTime=2000
#集群中的follower服務(wù)器(F)與leader服務(wù)器(L)之間 初始連接 時能容忍的最多心跳數(shù)(tickTime的數(shù)量)示弓。
initLimit=10
# 集群中的follower服務(wù)器(F)與leader服務(wù)器(L)之間 請求和應(yīng)答 之間能容忍的最多心跳數(shù)(tickTime的數(shù)量)讳侨。
syncLimit=5
# data數(shù)據(jù)目錄
dataDir=/opt/zookeeper/zoo-node3/data
# 客戶端連接端口
clientPort=2183
# 客戶端最大連接數(shù)
#maxClientCnxns=60
# 需要保留的快照數(shù)目
#autopurge.snapRetainCount=3
# 是否開啟自動清理事務(wù)日志和快照功能 0 不開啟,1表示開啟
#autopurge.purgeInterval=1
#集群配置
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
分別將上述配置文件放置在三個節(jié)點對應(yīng)的conf目錄下奏属。
另外跨跨,需要新建data目錄
mkdir /opt/zookeeper/zoo-node1/data
mkdir /opt/zookeeper/zoo-node2/data
mkdir /opt/zookeeper/zoo-node3/data
2.2 myid配置文件
zookeeper還需要在data目錄中配置myid文件。myid文件中存放對應(yīng)節(jié)點的序號囱皿。
echo '1' > /opt/zookeeper/zoo-node1/data/myid
echo '2' > /opt/zookeeper/zoo-node2/data/myid
echo '3' > /opt/zookeeper/zoo-node3/data/myid
2.3 日志路徑配置
修改 bin 目錄下的zkEnv.sh
將ZOO_LOG_DIR 修改為:
ZOO_LOG_DIR="../logs/"
按上述方法分別修改三個節(jié)點中的zkEnv.sh文件
3.啟動
/opt/zookeeper/zoo-node1/bin/zkServer.sh start
/opt/zookeeper/zoo-node2/bin/zkServer.sh start
/opt/zookeeper/zoo-node2/bin/zkServer.sh start
如此分別啟動三個節(jié)點即可歹叮。
啟動效果如下:
[root@localhost bin]# /opt/zookeeper/zoo-node1/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/zoo-node1/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
查看日志:
日志
4.客戶端連接
運(yùn)行 zkCli.sh 連接到默認(rèn)的端口
4.1 create
使用create 可以創(chuàng)建一個zookeeper節(jié)點。
命令格式
create [-s] [-e] path data acl
create /zk-book 123
create
4.2 ls
列出zookeeper指定節(jié)點下的所有子節(jié)點铆帽。
命令格式
ls path [watch]
ls /
ls
4.3 get
get 可以獲取zookeeper指定節(jié)點的數(shù)據(jù)內(nèi)容和屬性信息咆耿。
get path [watch]
get /zk-book
get
4.4 set
更新指定節(jié)點的數(shù)據(jù)內(nèi)容
set path data [vresion]
set /zk-book 456
set
4.5 delete
delete 刪除zookeeper上指定節(jié)點內(nèi)容
delete path [version]
delete /zk-book
delete
不過需要注意的是,刪除的節(jié)點必須為空爹橱,否則無法刪除萨螺。
create /zk-book 123
create /zk-book/child 12345
delete /zk-book
delete 非空