快速搭建开发环境 - ZooKeeper

快速搭建开发环境 - 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



写在最后

如果本文章对你有帮助的话,请留下你的赞

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值