单机部署ZK服务很简单。ZK服务包含在一个jar包文件中,需要创建一个配置文件。在conf目录下创建zoo.cfg,例如:
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
配置完成即可通过如下命令启动ZK
bin/zkServer.sh start
ZK的日志使用log4j,可通过log4j的配置管理ZK的日志记录。
对于长时间运行的生产系统,ZK的存储必须在外部进行管理。
$ bin/zkCli.sh -server 127.0.0.1:2181
就像文件操作一样简单,如果连接成功,将看到类似如下信息:
Connecting to localhost:2181
log4j:WARN No appenders could be found for logger (org.apache.zookeeper.ZooKeeper).
log4j:WARN Please initialize the log4j system properly.
Welcome to ZooKeeper!
JLine support is enabled
[zkshell: 0]
help命令可以获取命令列表,例如:
[zkshell: 0] help
ZooKeeper host:port cmd args
get path [watch]
ls path [watch]
set path data [version]
delquota [-n|-b] path
quit
printwatches on|off
createpath data acl
stat path [watch]
listquota path
history
setAcl path acl
getAcl path
sync path
redo cmdno
addauth scheme auth
delete path [version]
setquota -n|-b val path
可尝试更多的操作,如:ls /
[zkshell: 8] ls /
[zookeeper]
创建一个znode节点,create /zk_test my_data,该节点存储了"my_data"
[zkshell: 9] create /zk_test my_data
Created /zk_test
通过get查看节点
[zkshell: 12] get /zk_test
my_data
cZxid = 5
ctime = Fri Jun 05 13:57:06 PDT 2009
mZxid = 5
mtime = Fri Jun 05 13:57:06 PDT 2009
pZxid = 5
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0
dataLength = 7
numChildren = 0
通过set命令修改node数据
[zkshell: 14] set /zk_test junk
cZxid = 5
ctime = Fri Jun 05 13:57:06 PDT 2009
mZxid = 6
mtime = Fri Jun 05 14:01:52 PDT 2009
pZxid = 5
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0
dataLength = 4
numChildren = 0
[zkshell: 15] get /zk_test
junk
cZxid = 5
ctime = Fri Jun 05 13:57:06 PDT 2009
mZxid = 6
mtime = Fri Jun 05 14:01:52 PDT 2009
pZxid = 5
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0
dataLength = 4
numChildren = 0
delete删除node节点
[zkshell: 16] delete /zk_test
[zkshell: 17] ls /
[zookeeper]
[zkshell: 18]
集群模式下,所有的服务器都有同样的配置文件集群模式,最少需要3台服务器。 配置文件和单机模式类似,只有稍许差异,如下:
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
每台服务器上,只需要一个server.X,后面的两个端口2888:3888,第一个用于集群节点之间通信(update操作同步),后者用于leader选举。
每台服务器在dataDir目录下创建一个myid文件,内部填写server.X中的X值。
查看当前ZooKeeper状态
单机模式
[root@wuxiaowu-server bin]# ./zkServer.sh status
JMX enabled by default
Using config: /opt/zktest/zk1/bin/../conf/zoo.cfg
Mode: standalone
集群的follower
[root@wuxiaowu-server bin]# ./zkServer.sh status
JMX enabled by default
Using config: /opt/zktest/zk3/bin/../conf/zoo.cfg
Mode: follower
集群的leader
[root@wuxiaowu-server bin]# ./zkServer.sh status
JMX enabled by default
Using config: /opt/zktest/zk1/bin/../conf/zoo.cfg
Mode: leader
conf目录下的log4j.properties配置文件配置
另外需要在bin目录下修改zkEnv.sh配置
if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
ZOO_LOG4J_PROP="INFO,CONSOLE"
fi
改为(打开log文件记录配置)
if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
fi
if [ "x${ZOO_LOG_DIR}" = "x" ]
then
ZOO_LOG_DIR="."
fi
改为(默认在bin目录下)
if [ "x${ZOO_LOG_DIR}" = "x" ]
then
ZOO_LOG_DIR="/opt/zktest/zk2/logs"
fi