文章目录
Apache ZooKeeper使用指南
带*号的内容可以直接跳过,不影响阅读。
Apache ZooKeeper 官网:
https://zookeeper.apache.org/
Apache ZooKeeper r3.7.0原版文档:
https://zookeeper.apache.org/doc/r3.7.0/index.html
Apache ZooKeeper r3.5.6中文文档:
https://www.docs4dev.com/docs/zh/zookeeper/r3.5.6/reference/
部署指南
如果你只想简单启动ZooKeeper进行API学习,推荐我之前的一篇博客《Centos7环境下安装ZooKeeper单例模式》。
ZooKeeper支持高可用,所以部署分为单例模式和集群模式。接下来将在Centos7环境下分别介绍ZooKeeper单例和集群的构建过程。
软件环境
操作系统: CentOS Linux release 7.9.2009
JAVA: OpenJDK 1.8.0_312
Zookeeper: ZooKeeper-3.7.0
检查JAVA
检查是否安装JRE
java -version
安装OpenJDK 1.8
yum install java-1.8.0-openjdk* -y
推荐目录规划*
ZooKeeper路径
/opt/apache-zookeeper-3.7.0-bin
zoo.cfg dataDir
dataDir=/var/data/zookeeper
单例模式
官网原文:https://zookeeper.apache.org/doc/r3.7.0/zookeeperStarted.html
下载ZooKeeper
基于wget下载
wget --no-check-certificate https://dlcdn.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
由于没使用国内镜像链接进行下载,所以下载速度比较慢,可以采用其他方法自行下载。
解压tar.gz包
tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz
部署单例模式
本案例以最简单的单例模式为例。
cd apache-zookeeper-3.7.0-bin
使用默认配置
cp ./conf/zoo_sample.cfg ./conf/zoo.cfg
启动ZooKeeper实例
bin/zkServer.sh start
输出如下:
ZooKeeper JMX enabled by default
Using config: /root/desktop/apache-zookeeper-3.7.0-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
查看ZooKeeper状态
bin/zkServer.sh status
输出如下:
ZooKeeper JMX enabled by default
Using config: /root/desktop/apache-zookeeper-3.7.0-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: standalone
使用ZkCli进行访问
bin/zkCli.sh -server 127.0.0.1:2181
防火墙开放2181端口
firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --reload
集群模式
节点规划
- Node01 192.168.7.20
- Node02 192.168.7.21
- Node03 192.168.7.22
- Node04 192.168.7.23
conf/zoo.cfg
## Cluster
server.1=192.168.7.20:2888:3888
server.2=192.168.7.21:2888:3888
server.3=192.168.7.22:2888:3888
server.4=192.168.7.23:2888:3888
配置myid
cd /opt/apache-zookeeper-3.7.0-bin
bin/zkServer-initialize.sh
touch /var/data/zookeeper/myid
根据节点规划,设置不同的myid。
echo 1 > /var/data/zookeeper/myid
echo 2 > /var/data/zookeeper/myid
echo 3 > /var/data/zookeeper/myid
echo 4 > /var/data/zookeeper/myid
防火墙开放端口
firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --zone=public --add-port=2888/tcp --permanent
firewall-cmd --zone=public --add-port=3888/tcp --permanent
firewall-cmd --reload
启动ZooKeeper实例
bin/zkServer.sh start
更多知识
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=/tmp/zookeeper
# 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
tickTime
心跳间隔,默认2000毫秒。
ZooKeeperK集群中Leader和Follower之间的心跳间隔,来维护节点存活状态。
initLimit
初始化限制 默认为10。
ZooKeeper集群中的Follower服务器与Leader服务器之间初始连接时能容忍的最多心跳数(tickTime的数量)。
syncLimit
同步限制,默认为5。
ZooKeeper集群中Leader和Follower之间的请求和答应最多能容忍的心跳数。
dataDir
用来存放myid信息跟一些版本,日志,跟服务器唯一的ID信息等。
推荐 /var/zookeeper
clientPort
ZooKeeper对外提供的服务端口号,默认是2181端口。
maxClientCnxns
当前ZooKeeper服务允许最大的客户端链接数。
zkServer-initialize.sh是干嘛的?*
https://www.docs4dev.com/docs/zh/zookeeper/r3.5.6/reference/zookeeperAdmin.html
3.5 中的新增功能: ZooKeeper 服务器的默认行为是在启动时自动创建数据目录(在配置文件中指定),如果该目录尚不存在。在某些情况下,这可能会带来不便,甚至是危险。以正在运行的服务器的配置更改为例,其中 dataDir 参数被意外更改。当 ZooKeeper 服务器重新启动时,它将创建一个不存在的目录并开始提供服务-带有一个空的 znode 命名空间。这种情况可能导致有效的“裂脑”情况(即新无效目录和原始有效数据存储区中的数据)。因此,最好选择一个选项来关闭此自动创建行为。通常,对于生产环境,应该这样做,但是不幸的是,此时默认的旧行为无法更改,因此必须视具体情况进行更改。这留给用户和 ZooKeeper 发行版的打包者。
当运行 zkServer.sh 时,可以通过将环境变量 ZOO_DATADIR_AUTOCREATE_DISABLE 设置为 1 来禁用自动创建。当直接从类文件运行 ZooKeeper 服务器时,可以通过设置 **zookeeper.datadir.autocreate = false 来实现.在 Java 命令行上,即 -Dzookeeper.datadir.autocreate = false **
当禁用此功能,并且 ZooKeeper 服务器确定所需的目录不存在时,它将生成错误并拒绝启动。
提供了一个新脚本 zkServer-initialize.sh 以支持此新功能。如果禁用了自动创建,则用户必须首先安装 ZooKeeper,然后创建数据目录(可能还有 txnlog 目录),然后启动服务器。否则,如前一段所述,服务器将无法启动。运行 zkServer-initialize.sh 将创建所需的目录,并可选地设置 myid 文件(可选的命令行参数)。即使不使用自动创建功能本身,也可以使用此脚本,并且该脚本可能已被用户使用,因为过去(用户设置(包括创建 myid 文件))已经成为问题。请注意,此脚本确保数据目录仅存在,它不会创建配置文件,而是需要一个配置文件才能执行。
stat path命令详解
cZxid = 0x100000005
ctime = Thu Jan 20 16:14:50 CST 2022
mZxid = 0x100000037
mtime = Thu Jan 20 17:04:38 CST 2022
pZxid = 0x100000005
cversion = 0
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
czxid
引起这个znode创建的zxid,创建节点的事务的zxid
ctime
znode被创建的毫秒数(从1970年开始)
mzxid
znode最后更新的zxid
mtime
znode最后修改的毫秒数(从1970年开始)
pZxid
znode最后更新的子节点zxid
cversion
znode子节点变化号,znode子节点修改次数
dataversion
znode数据变化号
aclVersion
znode访问控制列表的变化号
ephemeralOwner
如果是临时节点,这个是znode拥有者的session id。如果不是临时节点则是0
dataLength
znode的数据长度
numChildren
znode子节点数量
可视化工具
ZooInspector
下载链接
https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip
启动软件
java -jar zookeeper-dev-ZooInspector.jar
kafkaUI-lite
- 史上最轻便好用的kafka ui界面客户端工具,可以在生产消息、消费消息、管理topic、管理group;可以支持管理多个kafka集群
- 部署简便,可以一键启动,不需要配置数据库、不需要搭建web容器
- 支持zookeeper ui界面化操作;支持多环境管理
- 支持redis ui界面化操作;支持多环境管理
- 支持权限控制,可以自定义不同环境的新增、修改、删除权限;默认分配只读权限,避免用户的误操作
https://gitee.com/freakchicken/kafka-ui-lite