環境:CentOS Linux release 7.3.1611 (Core) 64位
JDK
因為ZooKeeper服務器需要運行在JVM之上,所以首先需要部署JDK,這里我們選取jdk-8u161-linux-x64.tar.gz
下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
pwd /app/workspace
tar -zxvf jdk-8u161-linux-x64.tar.gz
然后配置java環境變量
vim /etc/profile
#jdk
export JAVA_HOME=/app/workspace/jdk1.8.0_161
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ZoKeeper安裝
下載ZooKeeper安裝包
wget http://apache.claz.org/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz
tar -zxvf zookeeper-3.4.11.tar.gz
設置zookeeper環境變量,在~/.bashrc
后邊追加
export ZOOKEEPER_HOME=/app/workspace/zookeeper-3.4.11
export PATH=$PATH:$ZOOKEEPER_HOME/bin
之后就可以在終端啟動ZooKeeper了
ZooKeeper部署
一般部署一個ZooKeeper高可用和可靠的系統,需要部署單個節點,三、五或七是最典型的節點數量。
下邊以三個ZooKeeper服務器組成一個集合體為例介紹ZooKeeper的部署。
# 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=/app/zookeeper/data
dataLogDir=/app/zookeeper/logs
# 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
server.1=192.168.179.118:2888:3888
server.2=192.168.177.195:2888:3888
server.3=192.168.177.194:2888:3888
值得重點注意的一點是,所有三個機器都應該打開端口 2181、2888 和 3888。在本例中,端口 2181 由 ZooKeeper 客戶端使用,用于連接到 ZooKeeper 服務器;端口 2888 由對等 ZooKeeper 服務器使用,用于互相通信;而端口 3888 用于領導者選舉。您可以選擇自己喜歡的任何端口。通常建議在所有 ZooKeeper 服務器上使用相同的端口。
創建一個/app/zookeeper/data/myid
server.1的myid里填1并保存,server.2和server.3里分別填2、3并保存。
依次啟動改三個ZooKeeper服務器實例:
zkServer.sh start
輸出:
ZooKeeper JMX enabled by default
Using config: /app/workspace/zookeeper-3.4.11/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
停止服務
zkServer.sh stop
輸出:
ZooKeeper JMX enabled by default
Using config: /app/workspace/zookeeper-3.4.11/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
ZooKeeper 的客戶端-服務器架構
ZooKeeper使用
運行zkCli.sh
默認連接本地的ZooKeeper服務器
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]
查看節點:
[zk: localhost:2181(CONNECTED) 0] ls /
[ zookeeper]
創建節點
[zk: localhost:2181(CONNECTED) 2] create /mynode hello
Created /mynode
設置節點data
[zk: localhost:2181(CONNECTED) 3] set /mynode hello2
cZxid = 0x10000000f
ctime = Mon Mar 19 14:34:09 CST 2018
mZxid = 0x100000010
mtime = Mon Mar 19 14:35:11 CST 2018
pZxid = 0x10000000f
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
獲取節點data
[zk: localhost:2181(CONNECTED) 4] get /mynode
hello2
cZxid = 0x10000000f
ctime = Mon Mar 19 14:34:09 CST 2018
mZxid = 0x100000010
mtime = Mon Mar 19 14:35:11 CST 2018
pZxid = 0x10000000f
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
刪除節點
[zk: localhost:2181(CONNECTED) 5] rmr /mynode