快速搭建开发环境 - ZooKeeper
官网 https://zookeeper.apache.org/
简介
ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services. All of these kinds of services are used in some form or another by distributed applications. Each time they are implemented there is a lot of work that goes into fixing the bugs and race conditions that are inevitable. Because of the difficulty of implementing these kinds of services, applications initially usually skimp on them, which make them brittle in the presence of change and difficult to manage. Even when done correctly, different implementations of these services lead to management complexity when the applications are deployed.
安装
下载 https://zookeeper.apache.org/releases.html
源码安装 zookeeper
系统版本
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
软件版本
apache-zookeeper-3.6.0
安装过程
[root@localhost local]# wget https://downloads.apache.org/zookeeper/zookeeper-3.6.0/apache-zookeeper-3.6.0-bin.tar.gz
[root@localhost local]# tar -zxf apache-zookeeper-3.6.0-bin.tar.gz
[root@localhost local]# mv apache-zookeeper-3.6.0-bin zookeeper
[root@localhost zookeeper]# mkdir data
目录结构
[root@localhost local]# ll zookeeper/
total 32
drwxr-xr-x 2 vagrant vagrant 289 Feb 25 14:36 bin
drwxr-xr-x 2 vagrant vagrant 77 Feb 25 14:36 conf
drwxr-xr-x 5 vagrant vagrant 4096 Feb 25 14:37 docs
drwxr-xr-x 2 root root 4096 Apr 30 07:25 lib
-rw-r--r-- 1 vagrant vagrant 11358 Feb 25 14:36 LICENSE.txt
-rw-r--r-- 1 vagrant vagrant 432 Feb 25 14:36 NOTICE.txt
-rw-r--r-- 1 vagrant vagrant 1963 Feb 25 14:36 README.md
-rw-r--r-- 1 vagrant vagrant 3166 Feb 25 14:36 README_packaging.md
创建数据存储目录
[root@localhost zookeeper]# pwd
/usr/local/zookeeper
[root@localhost zookeeper]# mkdir data
修改配置文件
dataDir=/usr/local/zookeeper/data
zkServer 指令
[root@localhost zookeeper]# ./bin/zkServer.sh help
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Usage: ./bin/zkServer.sh [--config <conf-dir>] {start|start-foreground|stop|version|restart|status|print-cmd}
start
[root@localhost zookeeper]# ./bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@localhost zookeeper]#
restart
[root@localhost zookeeper]# ./bin/zkServer.sh restart
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@localhost zookeeper]#
stop
[root@localhost zookeeper]# ./bin/zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
[root@localhost zookeeper]#
status
[root@localhost zookeeper]# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone
[root@localhost zookeeper]#
version
[root@localhost zookeeper]# ./bin/zkServer.sh version
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Apache ZooKeeper, version 3.6.0- 02/25/2020 14:38 GMT
[root@localhost zookeeper]#
启动失败解决方法
start-foreground
查看启动信息,查看启动时报的是什么异常,同时也可以查看运行过程中的异常。然后在查找解决问题的方法。
[root@localhost zookeeper]# ./bin/zkServer.sh start-foreground
......
2020-05-06 01:40:46,820 [myid:] - INFO [main:FileTxnSnapLog@124] - zookeeper.snapshot.trust.empty : false
2020-05-06 01:40:46,828 [myid:] - INFO [main:ZookeeperBanner@42] -
2020-05-06 01:40:46,828 [myid:] - INFO [main:ZookeeperBanner@42] - ______ _
2020-05-06 01:40:46,828 [myid:] - INFO [main:ZookeeperBanner@42] - |___ / | |
2020-05-06 01:40:46,828 [myid:] - INFO [main:ZookeeperBanner@42] - / / ___ ___ | | __ ___ ___ _ __ ___ _ __
2020-05-06 01:40:46,829 [myid:] - INFO [main:ZookeeperBanner@42] - / / / _ \ / _ \ | |/ / / _ \ / _ \ | '_ \ / _ \ | '__|
2020-05-06 01:40:46,829 [myid:] - INFO [main:ZookeeperBanner@42] - / /__ | (_) | | (_) | | < | __/ | __/ | |_) | | __/ | |
2020-05-06 01:40:46,829 [myid:] - INFO [main:ZookeeperBanner@42] - /_____| \___/ \___/ |_|\_\ \___| \___| | .__/ \___| |_|
2020-05-06 01:40:46,829 [myid:] - INFO [main:ZookeeperBanner@42] - | |
2020-05-06 01:40:46,829 [myid:] - INFO [main:ZookeeperBanner@42] - |_|
2020-05-06 01:40:46,829 [myid:] - INFO [main:ZookeeperBanner@42] -
2020-05-06 01:40:46,831 [myid:] - INFO [main:Environment@98] - Server environment:zookeeper.version=3.6.0--b4c89dc7f6083829e18fae6e446907ae0b1f22d7, built on 02/25/2020 14:38 GMT
2020-05-06 01:40:46,831 [myid:] - INFO [main:Environment@98] - Server environment:host.name=localhost
2020-05-06 01:40:46,831 [myid:] - INFO [main:Environment@98] - Server environment:java.version=1.8.0_192
2020-05-06 01:40:46,831 [myid:] - INFO [main:Environment@98] - Server environment:java.vendor=Oracle Corporation
2020-05-06 01:40:46,831 [myid:] - INFO [main:Environment@98] - Server environment:java.home=/usr/local/jdk/jre
2020-05-06 01:40:46,831 [myid:] - INFO [main:Environment@98] - Server environment:java.class.path=/usr/local/zookeeper/bin/../zookeeper-server
......
print-cmd
查看zookeeper启动的各个参数,包括java路径等,便于查找问题
[root@localhost zookeeper]# ./bin/zkServer.sh print-cmd
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
"/usr/local/jdk/bin/java" -Dzookeeper.log.dir="/usr/local/zookeeper/bin/../logs" -Dzookeeper.log.file="zookeeper-vagrant-server-localhost.localdomain.log" -Dzookeeper.root.logger="INFO,CONSOLE" -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError='kill -9 %p' -cp "/usr/local/zookeeper/bin/../zookeeper-
........
[root@localhost zookeeper]#
指定配置文件启动
[root@localhost zookeeper]# ./bin/zkServer.sh start /usr/local/zookeeper/conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/conf/zoo.cfg
Starting zookeeper ... STARTED
[root@localhost zookeeper]#
zkCli 指令
连接zookeeper
[root@localhost zookeeper]# ./bin/zkCli.sh -server 127.0.0.1:2181
......
Welcome to ZooKeeper!
JLine support is enabled
......
WatchedEvent state:SyncConnected type:None path:null
[zk: 127.0.0.1:2181(CONNECTED) 0]
基本操作
官方教程
https://zookeeper.apache.org/doc/r3.6.0/zookeeperStarted.html
[zk: localhost:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
addauth scheme auth
close
config [-c] [-w] [-s]
connect host:port
create [-s] [-e] [-c] [-t ttl] path [data] [acl]
delete [-v version] path
deleteall path [-b batch size]
delquota [-n|-b] path
get [-s] [-w] path
getAcl [-s] path
getAllChildrenNumber path
getEphemerals path
history
listquota path
ls [-s] [-w] [-R] path
printwatches on|off
quit
reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
redo cmdno
removewatches path [-c|-d|-a] [-l]
set [-s] [-v version] path data
setAcl [-s] [-v version] [-R] path acl
setquota -n|-b val path
stat [-w] path
sync path
version
Command not found: Command not found help
[zk: localhost:2181(CONNECTED) 1]
创建
[zk: 127.0.0.1:2181(CONNECTED) 5] create /zk_test my_data
Created /zk_test
修改
[zk: 127.0.0.1:2181(CONNECTED) 6] set /zk_test junk
查看
[zk: 127.0.0.1:2181(CONNECTED) 7] get /zk_test
junk
删除
[zk: 127.0.0.1:2181(CONNECTED) 8] delete /zk_test
docker 安装
[root@localhost ~]# docker pull zookeeper
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/zookeeper latest a08774a5fe84 6 days ago 252 MB
[root@localhost ~]# docker run -d -p 2181:2181 --name zookeeper zookeeper
57b82972a63d031d4a57a2e13d8c687a7cc0fff41780e812a5e76c6a999b060d
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
57b82972a63d zookeeper "/docker-entrypoin..." 3 seconds ago Up 3 seconds 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp zookeeper
启动
docker run --privileged=true -d --name zookeeper --p 2181:2181 zookeeper
进入zookeeper容器内部
[root@localhost ~]# docker exec -it zookeeper bash
root@57b82972a63d:/apache-zookeeper-3.6.0-bin# ls
LICENSE.txt NOTICE.txt README.md README_packaging.md bin conf docs lib
root@57b82972a63d:/apache-zookeeper-3.6.0-bin# ./bin/zkCli.sh
......
Welcome to ZooKeeper!
JLine support is enabled
......
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] create /zk_geek
Created /zk_geek
[zk: localhost:2181(CONNECTED) 1] set /zk_geek 688
[zk: localhost:2181(CONNECTED) 2] get /zk_geek
688
[zk: localhost:2181(CONNECTED) 3] delete zk_geek
Path must start with / character
[zk: localhost:2181(CONNECTED) 4] delete /zk_geek
[zk: localhost:2181(CONNECTED) 5] get /zk-geek
org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /zk-geek
[zk: localhost:2181(CONNECTED) 6] get /zk_geek
org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /zk_geek
[zk: localhost:2181(CONNECTED) 7]
附:配置文件
zoo.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 ack
nowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/usr/local/zookeeper/data
# 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
## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true
启动报错
1、grep: /usr/local/zookeeper/bin/…/conf/zoo.cfg: No such file or directory
[root@localhost zookeeper]# ./bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
grep: /usr/local/zookeeper/bin/../conf/zoo.cfg: No such file or directory
grep: /usr/local/zookeeper/bin/../conf/zoo.cfg: No such file or directory
mkdir: cannot create directory ‘’: No such file or directory
Starting zookeeper ... STARTED
[root@localhost zookeeper]#
原因 找不到配置zoo.cfg配置文件
解决 重命名文件zoo_sample.cfg 为zoo.cfg
[root@localhost zookeeper]# cd conf/
[root@localhost conf]# mv zoo_sample.cfg zoo.cfg
参考博客
https://blog.csdn.net/hengyunabc/article/details/19006911
zookeeper 集群搭建请参考博客
https://www.jianshu.com/p/1a99eebdf075
https://www.jianshu.com/p/91413cf577ec