ZooKeeper中bin目录中有如下4个可执行脚本:
[root@poc01 ~]# cd /opt/module/zookeeper-3.4.6/bin/[root@poc01 bin]# lszkCleanup.sh zkCli.sh zkEnv.sh zkServer.sh这些脚本是 ZooKeeper 的一部分,用于管理和操作 ZooKeeper 实例。
zkCleanup.sh:
zkCli.sh:
zkEnv.sh:
zkServer.sh:
zkServer.sh start 用于启动 ZooKeeper 服务,zkServer.sh stop 用于停止服务。下文将逐个详细介绍4个 ZooKeeper 相关脚本的使用、参数、场景和注意事项
./zkCli.sh -server localhost:2181create /path valueget /pathzkCli.sh 接受连接参数,如 ZooKeeper 服务器地址。zkCli.sh 脚本是 ZooKeeper 提供的命令行客户端工具,用于连接到 ZooKeeper 服务器并执行相关操作。它允许用户交互式地操作 ZooKeeper 数据,例如创建节点、设置节点数据、获取节点信息等。以下是关于 zkCli.sh 脚本的使用方法和一些常用命令示例:
xxxxxxxxxxzkCli.sh -server server:port# 例如:zkCli.sh -server 192.168.22.22:2181
-server server:port:指定连接的 ZooKeeper 服务器地址和端口号,默认端口是 2181。
xxxxxxxxxxcreate /path "data"xxxxxxxxxxget /pathxxxxxxxxxxset /path "new data"xxxxxxxxxxls /pathxxxxxxxxxxdelete /pathxxxxxxxxxxhelpquit 或者 Ctrl + C 退出 zkCli 客户端。zkCli.sh 可以方便地连接到 ZooKeeper 服务器进行数据操作和管理,但在进行重要操作时请务必小心谨慎,以免意外删除数据或影响 ZooKeeper 的稳定运行。zkCli.sh 是 ZooKeeper 提供的基本命令行客户端工具,用于与 ZooKeeper 服务器交互执行各种操作。虽然它是一个命令行工具,但仍然提供了一些较为复杂和高级的功能,可以用于节点监控、权限管理、Watcher 监听等。
使用 stat 命令可以监控节点状态的变化,实时查看节点的详细信息,例如版本、数据长度、创建时间等:
xxxxxxxxxx[zk: poc01:2181(CONNECTED) 22] stat /datacZxid = 0x200000006ctime = Tue Dec 12 10:39:20 CST 2023mZxid = 0x20000000amtime = Tue Dec 12 10:39:41 CST 2023pZxid = 0x200000006cversion = 0dataVersion = 4aclVersion = 0ephemeralOwner = 0x0dataLength = 4numChildren = 0
cZxid:节点创建的事务 ID。ctime:节点创建时间。mZxid:节点最后修改的事务 ID。mtime:节点最后修改时间。pZxid:节点父节点修改的事务 ID。cversion:子节点变更次数。dataVersion:节点数据变更次数。aclVersion:ACL 变更次数。ephemeralOwner:临时节点的所有者 ID。dataLength:节点数据长度。numChildren:子节点数量。
stat获取的状态信息,基本get命令也都可以获取,但stat不会获取value,只纯粹的获取各类状态,所以使用到监控方面更加适合。
窗口1中操作:
xxxxxxxxxx# 第一个窗口中创建节点[zk: poc01:2181(CONNECTED) 2] create /example_node "initial_data"Created /example_node# 使用watch方式进行通知监控[zk: poc01:2181(CONNECTED) 3] get /example_node watch"initial_data"cZxid = 0x20000000fctime = Tue Dec 12 14:38:56 CST 2023mZxid = 0x20000000fmtime = Tue Dec 12 14:38:56 CST 2023pZxid = 0x20000000fcversion = 0dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 14numChildren = 0
窗口2中操作:
xxxxxxxxxx# 在新的窗口中去更新节点数据[zk: poc01:2181(CONNECTED) 27] set /example_node "new_data"cZxid = 0x20000000fctime = Tue Dec 12 14:38:56 CST 2023mZxid = 0x200000010mtime = Tue Dec 12 14:39:27 CST 2023pZxid = 0x20000000fcversion = 0dataVersion = 1aclVersion = 0ephemeralOwner = 0x0dataLength = 10numChildren = 0
回到窗口1中观察是否有监控信息通知
xxxxxxxxxx# 此时发现窗口1中的watch监控生效,提示有状态变化的消息[zk: poc01:2181(CONNECTED) 4] WATCHER::WatchedEvent state:SyncConnected type:NodeDataChanged path:/example_node
注意事项:
- 一次性触发: Watcher 是一次性的,一旦触发,就会失效。需要在处理完 Watcher 事件后重新设置 Watcher。
- 事件通知顺序: Watcher 不保证事件通知的严格顺序,只能保证 FIFO(先进先出)的顺序。
- Watch 太多: 如果客户端设置了大量的 Watcher,可能会增加服务器端的负载。合理使用 Watcher 非常重要。
ZooKeeper 支持 ACL(访问控制列表)来管理节点的权限,可以使用 addauth 和 setAcl 命令来添加认证信息和设置节点权限
addauth 用于在会话中添加认证信息,而 setAcl 则用于设置节点的 ACL,以便控制节点的访问权限。在实际使用中,需要根据具体情况选择合适的认证方式和权限设置
addauth 命令用于在 ZooKeeper 中添加认证信息xxxxxxxxxx# 格式addauth scheme auth# 示例addauth digest wangting:123456
scheme:认证方案,例如digest、ip等
auth:认证信息,根据认证方案不同可以是用户名和密码或者 IP 地址等使用
addauth命令添加的认证信息是针对当前会话有效的,且在会话结束后自动失效,因此不需要专门的命令来删除这些信息。一旦会话结束(例如客户端断开连接),
addauth命令添加的认证信息也随之失效,不再生效。如果需要重新认证,可以在新的会话中再次使用addauth命令添加认证信息。
setAcl 命令则用于设置节点的访问控制列表(ACL)xxxxxxxxxx# 格式setAcl /path acl# 示例create /example_node "data" # 创建节点setAcl /example_node digest:wangting:123456:crwda
/path:要设置 ACL 的节点路径。acl:ACL 信息,包括权限和认证信息。- 如果设置了 ACL 的节点不再需要,可以直接删除节点,节点删除后 ACL 设置也会一并删除:
delete /example_node- 通过重新设置节点的 ACL,可以改变节点的权限设置。可以使用
setAcl命令修改节点的 ACL:setAcl /example_node aclcrwda权限(create、read、update、delete)- ZooKeeper 的 ACL 权限管理较为复杂,需要小心谨慎操作,以免影响节点的访问权限
./zkServer.sh start./zkServer.sh stopzkServer.sh 脚本是 ZooKeeper 提供的用于启动、停止和管理 ZooKeeper 服务器的脚本。它提供了一系列的命令用于管理 ZooKeeper 服务器的运行状态,例如启动、停止、重启等。
xxxxxxxxxxzkServer.sh {start|stop|restart|status|upgrade|print-cmd}参数说明:
start:启动 ZooKeeper 服务器。zkServer.sh startstop:停止 ZooKeeper 服务器。zkServer.sh stoprestart:重启 ZooKeeper 服务器。zkServer.sh restartstatus:查看 ZooKeeper 服务器的运行状态。zkServer.sh statusupgrade:升级 ZooKeeper 服务器。print-cmd:打印 ZooKeeper 服务器的命令。zkServer.sh 并在后面指定具体的操作。zkEnv.sh 脚本设置了环境。start、stop、restart 操作,可能需要具有相应的权限才能执行。使用 zkServer.sh 脚本可以方便地管理 ZooKeeper 服务器的启动、停止和重启,同时也可以通过 status 命令查看 ZooKeeper 服务器的运行状态,以确保服务正常运行。
zkServer.sh 脚本是 ZooKeeper 提供的用于管理 ZooKeeper 服务器的脚本,包括启动、停止、重启和状态查询等功能。虽然这个脚本本身功能较为基础,但可以结合其他高级用法来提高 ZooKeeper 的运维效率和管理。
启动 ZooKeeper 时,可以配置 JMX 监控参数,以便通过 JMX 管理和监控 ZooKeeper 服务器的运行状态
xxxxxxxxxx./zkServer.sh start -jvmflags "-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1234 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"通过复制 ZooKeeper 安装目录,配置不同的数据目录和端口号,可以启动多个 ZooKeeper 实例来提高系统的可用性和扩展性
xxxxxxxxxx./zkServer.sh start /path/to/zkConfig1./zkServer.sh start /path/to/zkConfig2./zkServer.sh start /path/to/zkConfig3配置 ZooKeeper 的日志级别和输出路径,以便更好地监控和调试 ZooKeeper 的运行状态
xxxxxxxxxx./zkServer.sh start 2>&1 > /path/to/zk.log &将 ZooKeeper 的启动、停止等命令结合 systemd进程管理工具进行管理,以便更好地监控和管理 ZooKeeper 服务。
xxxxxxxxxx# 服务启停则可以用如下方式systemctl start zookeepersystemctl stop zookeeper实现方法:
在 /lib/systemd/system/ 目录下创建 zookeeper.service文件
x[root@poc01 bin]# vim /lib/systemd/system/zookeeper.service[Unit]Description=Apache ZooKeeper Distributed Coordination ServiceAfter=network.target
[Service]User=rootGroup=rootWorkingDirectory=/opt/module/zookeeper-3.4.6ExecStart=/opt/module/zookeeper-3.4.6/bin/zkServer.sh startExecStop=/opt/module/zookeeper-3.4.6/bin/zkServer.sh stopRestart=alwaysRestartSec=10
[Install]WantedBy=multi-user.target
# 重新加载配置信息[root@poc01 ~]# systemctl daemon-reload
# 启动服务[root@poc01 ~]# systemctl start zookeeper# 查看状态[root@poc01 ~]# systemctl status zookeeper
# 添加至开机自启[root@poc01 ~]# systemctl enable zookeeper.service# 关闭开机自启[root@poc01 ~]# systemctl disable zookeeper.service注意修改对应路径
source zkEnv.sh,加载配置到当前 Shell 环境
参数介绍:该脚本通常不需要额外参数
场景:在启动 ZooKeeper 实例之前,可以设置 Java 环境、内存配置、JVM 参数等
source zkEnv.sh
xxxxxxxxxx[root@poc01 ~]# source /opt/module/zookeeper-3.4.6/bin/zkEnv.sh source zkEnv.sh 以配置环境变量,确保 ZooKeeper 能够正确运行。在zkServer.sh中可以看到如下代码:
xxxxxxxxxxif [ -e "$ZOOBIN/../libexec/zkEnv.sh" ]; then . "$ZOOBINDIR/../libexec/zkEnv.sh"else . "$ZOOBINDIR/zkEnv.sh"fizkEnv.sh 脚本主要用于配置 ZooKeeper 运行时的环境变量,确保 ZooKeeper 的运行所需的环境设置正确,进而保证 ZooKeeper 服务的正常运行。
通过 zkEnv.sh 设置 JVM 相关的参数,比如内存大小、GC 策略等,可以提高 ZooKeeper 的性能和稳定性。
xxxxxxxxxxexport SERVER_JVMFLAGS="-Xmx2G -XX:+UseG1GC"设置 ZooKeeper 的日志级别、输出路径等,以便更好地监控和调试 ZooKeeper 的运行状态。
xxxxxxxxxxexport ZOO_LOG4J_PROP="INFO,ROLLINGFILE"export ZOO_LOG_DIR="/path/to/zookeeper/logs"对于需要安全认证的情况,可以配置 ZooKeeper 的认证信息,使用用户名和密码进行访问控制。
xxxxxxxxxxexport ZOOKEEPER_SERVER_OPTS="$ZOOKEEPER_SERVER_OPTS -Dzookeeper.DigestAuthenticationProvider.superDigest=super:user:password"调整网络相关的参数,例如端口号、连接超时等,以适应特定的网络环境。
xxxxxxxxxxexport ZOOKEEPER_CLIENT_PORT=2181export ZOOKEEPER_TICK_TIME=2000
./zkCleanup.sh /path/to/zookeeper/data/version-2 -n 5,这将保留最近 5 个快照和事务日志文件。zkCleanup.sh 接受数据目录路径和要保留的文件数作为参数。zkCleanup.sh 脚本主要用于清理 ZooKeeper 数据目录中的快照(snapshot)和事务日志(transaction logs),以减少磁盘占用并保持 ZooKeeper 数据的健康状态。这个脚本允许你限制保留的快照和事务日志的数量,以及清理指定路径下的数据。该脚本一般用于维护 ZooKeeper 的数据目录,清除旧的数据文件,防止数据过于庞大影响性能。
xxxxxxxxxxzkCleanup.sh [dataDir] [-n count] [-d days] [-t hours] [-r] [-h]dataDir:ZooKeeper 数据目录的路径,默认情况下是 ./data。-n count:保留的快照和日志文件的数量,默认是 3。-d days:删除超过指定天数的快照和日志文件。-t hours:删除超过指定小时数的快照和日志文件。-r:指定后会递归删除指定目录下的数据。-h:显示帮助信息。xxxxxxxxxx# 默认情况下保留 3 个快照和日志文件zkCleanup.sh /path/to/zookeeper/data
# 保留 2 个快照和日志文件,删除超过 5 天的数据文件zkCleanup.sh /path/to/zookeeper/data -n 2 -d 5
# 删除超过 12 小时的数据文件zkCleanup.sh /path/to/zookeeper/data -t 12
# 递归删除指定目录下的数据zkCleanup.sh /path/to/zookeeper/data -r
zkCleanup.sh 脚本时,请确保 ZooKeeper 服务已经停止,以免影响 ZooKeeper 的正常运行-d 和 -t 参数,如果同时指定,会同时按照天数和小时数进行清理。zkCleanup.sh 脚本来自动清理 ZooKeeper 的数据文件,以便保持 ZooKeeper 数据目录的健康状态xxxxxxxxxx# 停止 ZooKeeper 服务[root@poc01 ~]# zkServer.sh stop[root@poc02 ~]# zkServer.sh stop[root@poc03 ~]# zkServer.sh stop
# 找到 ZooKeeper 的数据目录,其中包括事务日志文件(version-2 目录下的文件)和快照文件[root@poc01 ~]# ll /opt/module/zookeeper-3.4.6/zkData/version-2/total 68-rw-r--r-- 1 root root 1 Dec 12 16:56 acceptedEpoch-rw-r--r-- 1 root root 1 Dec 12 16:56 currentEpoch-rw-r--r-- 1 root root 67108880 Dec 12 10:24 log.100000001-rw-r--r-- 1 root root 67108880 Dec 12 15:56 log.200000001-rw-r--r-- 1 root root 67108880 Dec 12 16:49 log.200000026-rw-r--r-- 1 root root 67108880 Dec 12 16:55 log.300000001-rw-r--r-- 1 root root 67108880 Dec 12 16:56 log.400000001-rw-r--r-- 1 root root 296 Dec 11 17:25 snapshot.0-rw-r--r-- 1 root root 788 Dec 12 10:31 snapshot.100000006-rw-r--r-- 1 root root 1425 Dec 12 16:43 snapshot.200000025-rw-r--r-- 1 root root 1895 Dec 12 16:50 snapshot.20000002e-rw-r--r-- 1 root root 1895 Dec 12 16:56 snapshot.300000002
# 清理操作[root@poc01 ~]# zkCleanup.sh /opt/module/zookeeper-3.4.6/zkData/version-2 -n 3[root@poc02 ~]# zkCleanup.sh /opt/module/zookeeper-3.4.6/zkData/version-2 -n 3[root@poc03 ~]# zkCleanup.sh /opt/module/zookeeper-3.4.6/zkData/version-2 -n 3
# 启动 ZooKeeper 服务[root@poc01 ~]# zkServer.sh start[root@poc02 ~]# zkServer.sh start[root@poc03 ~]# zkServer.sh start