Linux 环境下,ZooKeeper 安装及运行(单机模式)

  在分布式微服务系统中,服务注册或调用,经常会使用到 ZooKeeper。Linux 环境下如何安装 ZooKeeper?如何运行 ZooKeeper?如何测试 ZooKeeper?本文简单记录下单机模式的 ZooKeeper 安装、配置、运行和测试步骤。

  1. 安装 ZooKeeper
  到 ZK 的官网下载页 https://zookeeper.apache.org/releases.html,下载安装包,不同的 ZK 版本可能会和 JDK 版本存在一些兼容性问题。笔者下载的安装文件是 apache-zookeeper-3.5.8-bin.tar.gz。本机 Linux 环境的 JDK 版本如下所示。

$ java -version
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)

  将 ZK 安装包上传到服务器,解压即可完成安装。

$ pwd
/home/testuser
$ ls
apache-zookeeper-3.5.8-bin.tar.gz
$ tar -zxvf apache-zookeeper-3.5.8-bin.tar.gz
$ ls
apache-zookeeper-3.5.8-bin  apache-zookeeper-3.5.8-bin.tar.gz

  2. 配置 ZooKeeper
  在安装目录下,创建两个文件夹: data 和 logs。

$ cd apache-zookeeper-3.5.8-bin
$ ls
bin  conf  docs  lib  LICENSE.txt  NOTICE.txt  README.md  README_packaging.txt
$ mkdir data
$ mkdir logs
$ ls
bin  conf  data  docs  lib  LICENSE.txt  logs  NOTICE.txt  README.md  README_packaging.txt

  进入安装目录下的 conf 目录,复制 zoo_sample.cfg 文件,重命名为 zoo.cfg。将 dataDir 和 dataLogDir 值修改为上方创建的文件夹路径。

$ cd conf/
$ cp zoo_sample.cfg zoo.cfg
$ vi zoo.cfg

  修改完后的 zoo.cfg 文件内容如下。

$ cat 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 acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/home/testuser/apache-zookeeper-3.5.8-bin/data
dataLogDir=/home/testuser/apache-zookeeper-3.5.8-bin/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

  zoo.cfg 配置文件参数说明:

  • tickTime
    基本事件单元,以毫秒为单位。这个时间是作为 ZooKeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间会发送一个心跳。
  • initLimit
    Follower 连接到 Leader 的初始化时间。这个配置项是用来配置 ZooKeeper 接受客户端初始化连接时最长能忍受多少个心跳时间间隔数。
  • syncLimit
    主从节点请求和应答时间长度。这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度。
  • dataDir
    存储内存快照的位置,顾名思义就是 ZooKeeper 保存数据的目录。默认情况下,ZooKeeper 将写数据的日志文件也保存在这个目录里。
  • dataLogDir
    ZooKeeper 日志文件存储路径。
  • clientPort
    ZooKeeper客户端端口,即客户端连接 ZooKeeper 服务器的端口。ZooKeeper 会监听这个端口,接受客户端的访问请求。
  • maxClientCnxns
    最大客户端连接数,如需要处理更多的客户端请求,可适当提升该值。其值为 0 则不限制客户端连接数量。

  3. 启动 ZooKeeper
  配置完成后,进入安装目录 /bin 路径下,执行启动脚本,即可启动 ZK。

$ cd apache-zookeeper-3.5.8-bin/bin/
$ pwd
/home/testuser/apache-zookeeper-3.5.8-bin/bin
$ ls
README.txt  zkCleanup.sh  zkCli.cmd  zkCli.sh  zkEnv.cmd  zkEnv.sh  zkServer.cmd  zkServer-initialize.sh  zkServer.sh  zkTxnLogToolkit.cmd  zkTxnLogToolkit.sh
$ ./zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/testuser/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

  ZK 常用命令:

命令语句含义
./zkServer.sh start启动 ZK
./zkServer.sh stop启停 ZK
./zkServer.sh restart重启 ZK
./zkServer.sh status查看 ZK 状态
./zkServer.sh start-foreground查看相关启动信息

  查看 ZK 状态:

$ ./zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/testuser/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone

  停止 ZK:

$ ./zkServer.sh stop
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/testuser/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

  重启 ZK:

$ ./zkServer.sh restart
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/testuser/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/testuser/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/testuser/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

  4. 测试 ZooKeeper
  正常启动好 ZK 之后,可以用命令 ./zkServer.sh status 或 ps -ef|grep java 查看 ZK 启动状态和进程。
  简单利用客户端做个测试,执行 /bin 路径下的 ./zkCli.sh -server 127.0.0.1:2181 命令语句,打开客户端。

$ ./zkCli.sh -server 127.0.0.1:2181
/usr/bin/java
Connecting to 127.0.0.1:2181
2020-07-08 14:36:34,604 [myid:] - INFO  [main:Environment@109] - Client environment:zookeeper.version=3.5.8-f439ca583e70862c3068a1f2a7d4d068eec33315, built on 05/04/2020 15:07 GMT
2020-07-08 14:36:34,608 [myid:] - INFO  [main:Environment@109] - Client environment:host.name=iZuf6crxor2b7uwzq9sutyZ
2020-07-08 14:36:34,608 [myid:] - INFO  [main:Environment@109] - Client environment:java.version=1.8.0_252
2020-07-08 14:36:34,610 [myid:] - INFO  [main:Environment@109] - Client environment:java.vendor=Oracle Corporation
2020-07-08 14:36:34,610 [myid:] - INFO  [main:Environment@109] - Client environment:java.home=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64/jre
2020-07-08 14:36:34,610 [myid:] - INFO  [main:Environment@109] - Client environment:java.class.path=/home/testuser/apache-zookeeper-3.5.8-bin/bin/../zookeeper-server/target/classes:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../build/classes:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../zookeeper-server/target/lib/*.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../build/lib/*.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/zookeeper-jute-3.5.8.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/zookeeper-3.5.8.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/slf4j-log4j12-1.7.25.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/slf4j-api-1.7.25.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/netty-transport-native-unix-common-4.1.48.Final.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/netty-transport-native-epoll-4.1.48.Final.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/netty-transport-4.1.48.Final.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/netty-resolver-4.1.48.Final.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/netty-handler-4.1.48.Final.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/netty-common-4.1.48.Final.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/netty-codec-4.1.48.Final.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/netty-buffer-4.1.48.Final.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/log4j-1.2.17.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/json-simple-1.1.1.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/jline-2.11.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/jetty-util-9.4.24.v20191120.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/jetty-servlet-9.4.24.v20191120.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/jetty-server-9.4.24.v20191120.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/jetty-security-9.4.24.v20191120.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/jetty-io-9.4.24.v20191120.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/jetty-http-9.4.24.v20191120.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/javax.servlet-api-3.1.0.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/jackson-databind-2.10.3.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/jackson-core-2.10.3.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/jackson-annotations-2.10.3.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/commons-cli-1.2.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../lib/audience-annotations-0.5.0.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../zookeeper-*.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../zookeeper-server/src/main/resources/lib/*.jar:/home/testuser/apache-zookeeper-3.5.8-bin/bin/../conf:
2020-07-08 14:36:34,610 [myid:] - INFO  [main:Environment@109] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2020-07-08 14:36:34,610 [myid:] - INFO  [main:Environment@109] - Client environment:java.io.tmpdir=/tmp
2020-07-08 14:36:34,611 [myid:] - INFO  [main:Environment@109] - Client environment:java.compiler=<NA>
2020-07-08 14:36:34,611 [myid:] - INFO  [main:Environment@109] - Client environment:os.name=Linux
2020-07-08 14:36:34,611 [myid:] - INFO  [main:Environment@109] - Client environment:os.arch=amd64
2020-07-08 14:36:34,611 [myid:] - INFO  [main:Environment@109] - Client environment:os.version=3.10.0-1062.1.2.el7.x86_64
2020-07-08 14:36:34,611 [myid:] - INFO  [main:Environment@109] - Client environment:user.name=testuser
2020-07-08 14:36:34,611 [myid:] - INFO  [main:Environment@109] - Client environment:user.home=/home/testuser
2020-07-08 14:36:34,611 [myid:] - INFO  [main:Environment@109] - Client environment:user.dir=/home/testuser/apache-zookeeper-3.5.8-bin/bin
2020-07-08 14:36:34,611 [myid:] - INFO  [main:Environment@109] - Client environment:os.memory.free=113MB
2020-07-08 14:36:34,612 [myid:] - INFO  [main:Environment@109] - Client environment:os.memory.max=228MB
2020-07-08 14:36:34,612 [myid:] - INFO  [main:Environment@109] - Client environment:os.memory.total=119MB
2020-07-08 14:36:34,615 [myid:] - INFO  [main:ZooKeeper@868] - Initiating client connection, connectString=127.0.0.1:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@3b764bce
2020-07-08 14:36:34,620 [myid:] - INFO  [main:X509Util@79] - Setting -D jdk.tls.rejectClientInitiatedRenegotiation=true to disable client-initiated TLS renegotiation
2020-07-08 14:36:34,627 [myid:] - INFO  [main:ClientCnxnSocket@237] - jute.maxbuffer value is 4194304 Bytes
2020-07-08 14:36:34,635 [myid:] - INFO  [main:ClientCnxn@1653] - zookeeper.request.timeout value is 0. feature enabled=
Welcome to ZooKeeper!
2020-07-08 14:36:34,644 [myid:127.0.0.1:2181] - INFO  [main-SendThread(127.0.0.1:2181):ClientCnxn$SendThread@1112] - Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2020-07-08 14:36:34,706 [myid:127.0.0.1:2181] - INFO  [main-SendThread(127.0.0.1:2181):ClientCnxn$SendThread@959] - Socket connection established, initiating session, client: /127.0.0.1:34672, server: localhost/127.0.0.1:2181
2020-07-08 14:36:34,733 [myid:127.0.0.1:2181] - INFO  [main-SendThread(127.0.0.1:2181):ClientCnxn$SendThread@1394] - Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x102637b8e380000, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: 127.0.0.1:2181(CONNECTED) 0] 

  依次执行如下操作,得到结果如下所示,这样就证明 ZooKeeper 可以正常使用了。

[zk: 127.0.0.1:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 1] create /testkey hello
Created /testkey
[zk: 127.0.0.1:2181(CONNECTED) 2] get /testkey
hello
[zk: 127.0.0.1:2181(CONNECTED) 3] set /testkey world
[zk: 127.0.0.1:2181(CONNECTED) 4] get /testkey
world
[zk: 127.0.0.1:2181(CONNECTED) 5] delete /testkey
[zk: 127.0.0.1:2181(CONNECTED) 6] get /testkey
org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /testkey
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值