目录
1. 安装部署
1.1 单机部署
1.1.1 下载安装
下载地址:https://zookeeper.apache.org/releases.html
示例使用安装版本:https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.9.2/apache-zookeeper-3.9.2-bin.tar.gz
su - root # 切换为root身份
wget https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.9.2/apache-zookeeper-3.9.2-bin.tar.gz
# wget下载超时,则手动下载包上传至linux
tar -zxf apache-zookeeper-3.9.2-bin.tar.gz
cp -r zookeeper-3.9.2-bin /usr/local/zookeeper
# 创建存放数据文件的目录
mkdir /usr/local/zookeeper/data
至此,Zookeeper安装成功,还需要进行一些配置才能启动。
1.1.2 配置文件
Zookeeper的配置文件在path-to-zookeeper/conf目录下,文件名为zoo.cfg。初始安装的Zookeeper有一个zoo_sample.cfg示例文件,可以拷贝一份,在进行修改。
[root@localhost]# cd zookeeper/
[root@localhost zookeeper]# ls
bin conf data docs lib LICENSE.txt NOTICE.txt README.md README_packaging.md
[root@localhost zookeeper]#
[root@localhost zookeeper]# cd conf/
[root@localhost conf]# ls
configuration.xsl logback.xml zoo_sample.cfg
[root@localhost conf]# cp zoo_sample.cfg zoo.cfg
[root@localhost conf]# ls
configuration.xsl logback.xml zoo.cfg zoo_sample.cfg
[root@localhost conf]#
下面是zoo.cfg配置项解释:
# 心跳间隔(毫秒),超过2倍tickTime将会被认为会话超时
tickTime=2000
# 初始化连接时最长的时间(心跳间隔次数),超过该值会认为连接超时
initLimit=10
# zk集群中leader和follower同步消息的超时时间(心跳间隔次数)
syncLimit=5
# 保存zookeeper数据库快照的目录,前面安装zookeeper时已经创建了该目录
dataDir=/usr/local/zookeeper/data
# 服务器监听的端口号,用于客户端连接服务器
clientPort=2181
# zk服务器所支持的最大客户端连接数量
# maxClientCnxns=60
1.1.3 zk server状态管理
启动,重启,停止,状态
Zookeeper中可执行文件都存放在zookeeper安装路径下的bin目录下,而对Zookeeper服务器运行状态管理,使用的是zkServer.sh这个脚本。
- 通过传入start | stop | restart | status来管理Zookeeper服务器的运行状态
/usr/local/zookeeper/bin/zkServer.sh start
/usr/local/zookeeper/bin/zkServer.sh restart
/usr/local/zookeeper/bin/zkServer.sh stop
/usr/local/zookeeper/bin/zkServer.sh status
[root@localhost bin]# ls
README.txt zkSnapshotComparer.cmd
zkCleanup.sh zkSnapshotComparer.sh
zkCli.cmd zkSnapshotRecursiveSummaryToolkit.cmd
zkCli.sh zkSnapshotRecursiveSummaryToolkit.sh
zkEnv.cmd zkSnapShotToolkit.cmd
zkEnv.sh zkSnapShotToolkit.sh
zkServer.cmd zkTxnLogToolkit.cmd
zkServer-initialize.sh zkTxnLogToolkit.sh
zkServer.sh
[root@localhost bin]#
[root@localhost bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@localhost bin]#
1.1.4 使用zk客户端登录服务器
通过命令行的方式登录到Zookeeper服务器,可以使用Zookeeper提供的zkCli.sh脚本,位于/usr/local/zookeeper/bin目录下。
/usr/local/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181
1.1.5 使用PrettyZoo连接zk
1.2 集群部署
1.2.1 环境准备
Zookeeper集群的安装,比安装单机Zk多了1个配置项(server.x)。
本次搭建Zk集群,包含3台机器(建议使用奇数台机器),机器ip分别为
centos01:192.168.1.3
centos02:192.168.1.4
centos03:192.168.1.5
需要在上面三台机器上安装zookeeper,使用上面单机zookeeper的安装步骤。
1.2.2 配置修改
修改集群中每一台zk机器的配置文件内容(/usr/local/zookeeper/conf/zoo.cfg),请尽量保证集群中所有zk机器的配置文件相同。
# 心跳间隔(毫秒),超过2倍tickTime将会被认为会话超时
tickTime=2000
# 初始化连接时最长的时间(心跳间隔次数),超过该值会认为连接超时
initLimit=10
# zk集群中leader和follower同步消息的超时时间(心跳间隔次数)
syncLimit=5
# 保存zookeeper数据库快照的目录,前面安装zookeeper时已经创建了该目录
dataDir=/usr/local/zookeeper/data
# 服务器监听的端口号,用于客户端连接服务器
clientPort=2181
# 配置zk集群节点信息
server.1=192.168.1.3:2888:3888
server.2=192.168.1.4:2888:3888
server.3=192.168.1.5:2888:3888
上面的集群配置中,比单机配置多了 server.n=A:B:C 几个配置,该配置项的规则如下:
1、统一前缀,"server.";
2、"server." 后面的数字n表示机器的id(序号),可以随意指定,不要重复即可;
3、A 表示集群中zk机器的ip;
4、B 表示Zk集群中,follower与leader通信的端口;
5、C 表示当leader宕机时,各follower选举新leader的通信端口;
1.2.3 设置myid
上面配置中使用了server.x来指定ip所指的机器编号为x,除此之外,还需要在dataDir所指的目录下创建一个文件(文件名为myid,不能更改),在该文件中保存机器的id(编号)。
# 配置zk集群节点信息
server.1=192.168.1.3:2888:3888
server.2=192.168.1.4:2888:3888
server.3=192.168.1.5:2888:3888
- 在1.2.2配置中,已指定dataDir=/usr/local/zookeeper/data,用来存放数据的目录。
- 在1.2.2配置中,192.168.1.3为1号服务器,所以需要在/usr/local/zookeeper/data目录下创建myid文件,内容为1;
同理:
192.168.1.4为2号服务器,所以需要在/usr/local/zookeeper/data目录下创建myid文件,内容为2;
192.168.1.5为3号服务器,所以需要在/usr/local/zookeeper/data目录下创建myid文件,内容为3;
可使用下面的命令快速设置myid,分别在三台机器中执行如下命令:
# 192.168.1.3机器,编号为1
[root@centos03 ~]# mkdir /usr/local/zookeeper/data
[root@centos03 ~]# echo 1 > /usr/local/zookeeper/data/myid
# 192.168.1.4机器,编号为2
[root@centos04 ~]# mkdir /usr/local/zookeeper/data
[root@centos04 data]# echo 2 > /usr/local/zookeeper/data/myid
# 192.168.1.5机器,编号为3
[root@centos05 ~]# mkdir /usr/local/zookeeper/data
[root@centos05 ~]# echo 3 > /usr/local/zookeeper/data/myid
1.2.4 启动集群
启动集群的方式,就是依次启动所有集群机器的zkServer即可。
[root@centos03 ~]# /usr/local/zookeeper/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@centos04 ~]# /usr/local/zookeeper/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@centos05 ~]# /usr/local/zookeeper/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
查看集群中每台机器的状态
[root@centos03 ~]# /usr/local/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: leader
[root@centos04 ~]# /usr/local/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower
[root@centos05 ~]# /usr/local/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower
1.2.5 测试集群
注:客户端连接集群中的机器,使用2181端口,不要使用配置集群的2888和3888端口
# 连接到192.168.1.3
ganlixins-MacBook-Pro:~ ganlixin$ /usr/local/zookeeper/bin/zkCli.sh -server 192.168.1.3:2181
[zk: 192.168.1.3:2181(CONNECTED) 0] create /abc 123
Created /abc
[zk: 192.168.1.3:2181(CONNECTED) 1] create /xyz 666
Created /xyz
[zk: 192.168.1.3:2181(CONNECTED) 2] quit
Quitting...
# 连接到192.168.1.4
ganlixins-MacBook-Pro:~ ganlixin$ /usr/local/zookeeper/bin/zkCli.sh -server 192.168.1.4:2181
[zk: 192.168.1.4:2181(CONNECTED) 0] ls /
[xyz, abc, zookeeper]
2. 常用命令
2.1 分类
- 状态管理命令:启动(zkServer.sh start)zk服务器,终止(stop),状态查看(status),重启(restart)
- 数据操作命令:创建数据节点、删除数据节点、查询数据节点内容...
2.2 功能脚本
2.2.1 zkServer状态管理
zk状态管理,通过运行zkServer.sh脚本来实现,脚本目录在其bin目录下,所有操作如下:
zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}
使用方式,如启动zk服务器:zkServer.sh start
2.2.2 zkCli客户端登录
启动服务端,可使用zkCli登录客户端,使用方式
本地连接:
# 不指定-server,默认使用本机localhost:2181
/usr/local/zookeeper/bin/zkCli.sh
远程连接:
# 格式zkCli.sh -server ip:port
/usr/local/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181
关闭连接:
[zk: localhost:2181(CONNECTED) 27] close
[zk: localhost:2181(CLOSED) 28] ls
Not connected
重新连接:
[zk: localhost:2181(CLOSED) 33] connect 127.0.0.1:2181
退出服务:
[zk: localhost:2181(CLOSED) 35] quit
2.3 数据操作命令
当客户端成功的连接到Zookeeper服务后,我们可以输入任意非法的命令都可以获取Zookeeper客户端相关的命令使用方法
命令概览
连接到Zookeeper服务后,输入help查看相关命令
ZooKeeper -server host:port cmd args # 宿主机命令行执行Zookeeper客户端命令
stat path [watch] # 查看节点状态或者判断结点是否存在
set path data [version] # 设置节点数据
ls path [watch] # 列出节点信息
delquota [-n|-b] path # 删除节点个数(-n)或数据长度(-b)配额
ls2 path [watch] # ls命令的加强版,列出更多信息
setAcl path acl # 设置节点的权限信息
setquota -n|-b val path # 设置节点个数(-n)或数据长度(-b)的配额
history # 列出最近的命令历史,可以和redo配合使用
redo cmdid # 再次执行某个命令,结合history使用
printwatches on|off # 设置和显示监视状态
delete path [version] # 删除节点,不可删除有子节点的节点
sync path # 强制数据同步
listquota path # 显示节点资源配额信息
rmr path # 强制删除节点
get path [watch] # 获取节点数据
create [-s] [-e] path data acl # 创建顺序(-s)或临时(-e)结点
addauth scheme auth # 配置节点认证信息
quit # 退出连接
getAcl path # 获取节点的权限信息
close # 断开当前Zookeeper连接
connect host:port # 连接Zookeeper服务端
这些命令主要分为五大类:基本信息查看、节点基本操作、资源配额、权限设置、其他操作等,接下来我们分别对这些命令进行学习。
2.3.1 ls path(查看path下有哪些节点)
查看path节点下有哪些子节点,不会显示当前路径的下层级的节点,示例如下:
zk: localhost:2181(CONNECTED) 11] ls /
[admin, brokers, cluster, config, consumers, controller, controller_epoch, feature, isr_change_notification, latest_producer_id_block, log_dir_event_notification, zookeeper]
2.3.2 create path data(创建节点)
该命令用来创建path节点,并且设置节点的值为data。
注意:使用create创建path时,不能嵌套创建path,比如创建/abc/xyz,那么/abc必须是已经存在的,不能直接创建/abc/xyz。
[zk: 127.0.0.1:2181(CONNECTED) 4] create /abc xxxxxx
Created /abc
[zk: 127.0.0.1:2181(CONNECTED) 5] ls /
[abc, zookeeper, ...]
嵌套创建path时,如果上级目录不存在,则创建失败:
[zk: 127.0.0.1:2181(CONNECTED) 5] ls /abc
[]
[zk: 127.0.0.1:2181(CONNECTED) 6] create /abc/xyz/aaa 12345
Node does not exist: /abc/xyz/aaa
[zk: 127.0.0.1:2181(CONNECTED) 7] create /abc/xyz 123
Created /abc/xyz
[zk: 127.0.0.1:2181(CONNECTED) 8] create /abc/xyz/aaa 12345
Created /abc/xyz/aaa
使用create命令时,有-s和-e选项,分别表示Sequence(有序节点)、Ephemeral(临时节点),zookeeper默认的节点类型是无序、永久节点;
无序是指一个节点下创建子节点时,子节点不会重复;
永久是指并且如果不主动删除,那么节点就会一直存在;
有序是指创建节点时,会在节点名称后面加一个10位长度的数字,表示其顺序(序号),可以创建相同的节点名称(但是序号不相同);
临时是指创建的节点只在当前连接(session)有效,当连接断开后,临时节点就会被删除(可能会有几秒的延迟)。
注意:不能在临时节点下创建子节点
# 无序、永久节点,不能重复创建
[zk: localhost:2181(CONNECTED) 1] create /abc 123
Created /abc
[zk: localhost:2181(CONNECTED) 2] create /abc 456
Node already exists: /abc
# 有序节点可以重复创建
[zk: localhost:2181(CONNECTED) 3] create -s /xyz 123
Created /xyz0000000001
[zk: localhost:2181(CONNECTED) 4] create -s /xyz 456
Created /xyz0000000002
[zk: localhost:2181(CONNECTED) 5] ls /
[xyz0000000001, abc, xyz0000000002, zookeepe
2.3.3 get path(查看节点信息)
该命令用来查看path节点上值以及节点信息,示例如下:
[zk: localhost:2181(CONNECTED) 26] get /abc
xxxxxx
2.3.4 set path data(设置节点数据)
该命令用来对已经存在的path的data进行设置.
注意:如果path不存在,那么set操作就会失败
[zk: localhost:2181(CONNECTED) 27] set /abc yyyyyy
[zk: localhost:2181(CONNECTED) 28]
[zk: localhost:2181(CONNECTED) 28] set /www xxxxxx
Node does not exist: /www
[zk: localhost:2181(CONNECTED) 29]
set命令可以有一个version可选项,表示要设置哪一个version的path:当要设置的path,对应的dataVersion为version时,才进行set操作,否则认为失败,因为version不同,表示要设置的path不匹配。
2.3.5 delete path(删除节点)
该命令用来删除叶子节点,叶子节点就是没有子节点的节点。如果删除path下面还有其他的子节点,那么删除操作就会失败。
[zk: localhost:2181(CONNECTED) 3] ls /
[a, abc, admin, brokers, cluster, config, consumers, controller, controller_epoch, feature, isr_change_notification, latest_producer_id_block, log_dir_event_notification, zookeeper]
[zk: localhost:2181(CONNECTED) 4] create /a/b
Created /a/b
[zk: localhost:2181(CONNECTED) 5] delete /a # 删除的path包含子节点,删除失败
Node not empty: /a
[zk: localhost:2181(CONNECTED) 6] delete /a/b # 删除的节点没有子节点,删除成功
[zk: localhost:2181(CONNECTED) 7]
2.3.6 rmr path(删除节点)
该命令用来递归删除path,如果path下面有子节点,那么子节点都会被全部删除。
注:apache-zookeeper-3.9.2版本,没有该命令了
2.3.7 stat path(节点信息)
用来获取path节点的相关信息,节点不存在则报错,示例如下:
[zk: localhost:2181(CONNECTED) 12] stat /a
cZxid = 0x13d # 节点创建时的zxid
ctime = Sun Apr 07 09:52:56 CST 2024 # 节点创建时间
mZxid = 0x14e # 节点最近一次更新时的zxid
mtime = Sun Apr 07 09:57:13 CST 2024 # 节点最近一次更新的时间
pZxid = 0x150 # 父节点创建时的zxid
cversion = 7 # 子节点数据更新次数
dataVersion = 1 # 本节点数据更新次数
aclVersion = 0 # 节点ACL(授权信息)的更新次数
ephemeralOwner = 0x0 # 持久节点值为0,临时节点值为sessionid
dataLength = 6 # 节点数据长度
numChildren = 1 # 子节点个数
2.4 watch机制
对于zookeeper目录树上的节点来说,需要关注某个节点,当节点发生变化时,需要触发一些事件。
举例:当/user/Jane节点被删除时,通知客户端删除用户Jane,这就是watch机制(监听)。
2.4.1 watch机制的特点
先注册后监听:对于节点的变化,需要先监听,当节点发生变化时,才会触发通知;
一次性触发:watch后,只会触发一次通知,如果要每次都触发,那么就需要在触发watch的事件后,重新watch;
异步通知:当事件触发后,通知时异步发给客户端的;
2.4.2 通知状态和事件类型
在zookeeper中,可以对数据节点进行很多操作,比如删除、修改、增加子节点...
在触发watch通知的时候,应该通知客户端哪个节点进行了什么操作。
通知状态包括三类:SyncConnected、Disconnected、Expired、AuthFailed,每一个通知状态(KeeperState)下又有多种事件类型(EventType):
SyncConnected
None:客户端与服务器成功建立连接;
NodeCreated:监听的节点被创建;
NodeDeleted:监听的节点被删除;
NodeDataChanged:监听的节点数据内容被修改;
NodeChildChanged:监听的节点的子节点的节点数据内容发生改变;
Disconnected
None:客户端与服务器断开连接
Expired
None:会话超时
AuthFailed
None:鉴权失败
2.4.3 watch示例
只有一部分zookeeper命令支持watch操作,可以通过查看zk的命令列表,后面有[-w]的命令才支持(只有stat、ls、config、get这四个命令支持)。
[zk: localhost:2181(CONNECTED) 3] help
ZooKeeper -server host:port -client-configuration properties-file 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|-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|-N|-B val path
stat [-w] path
sync path
version
whoami
示例说明:
单纯的使用ls,不加watch选项,就没有监听。
[zk: localhost:2181(CONNECTED) 5] ls /a
[b]
使用watch选项:
[zk: localhost:2181(CONNECTED) 8] ls /a -w
[b]
[zk: localhost:2181(CONNECTED) 9]
标签:运维,zk,zookeeper,2181,usr,常用命令,path,节点
From: https://www.cnblogs.com/running-future/p/18118654