文章目录
Zookeeper 安装
1. zookeeper安装下载
官网地址:https://zookeeper.apache.org/
博主下载稳定版本:apache-zookeeper-3.6.2-bin.tar
百度网盘分享
链接:https://pan.baidu.com/s/1AaLdSc_ILyPnag-iIWTIkA
提取码:yug0
2. 安装及配置说明
- 解压
tar -zxvf apache-zookeeper-3.6.2-bin.tar.gz
- 解压目录下的config,复制配置文件
cp zoo_sample.cfg zoo.cfg
- 修改配置文件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/zookeeper/zk-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
參數介紹
- tickTime: zk 使用的基本时间单位为 tick,该属性设置一个 tick 的时间长度,单位毫秒。
- initLimit: Follower 初始化同步的超时时限, 单位为 tickTime 的倍数。集群启动或新 Leader选举完成后, Follower 需要从 Leader 同步数据,如果需要同步的数据量较大,则可能超时。 一旦超时,同步失效。
- syncLimit: Follower 更新同步的超时时限,单位为 tickTime 的倍数。后续同步与初始化同步的不同点在于,初始化同步的数据量要大于后续同步的,后续同步的数据量一般是较小的。 所以,对于 initLimit 是否超时,更多是取决于网络质量。如果超时, Leader 就认为该 Follower 落后太多需要放弃。如果网络为高延迟环境,可适当增加该值,但不宜增加太大,否则会掩盖某些故障。
- dataDir: 该路径为快照文件存储路径。默认给出的路径在/tmp 中,提示也指出,不要将快照存储路径设置到/tmp 中。ZKServer 的数据在内存中是以 DataTree 树形结构进行存储的,而快照就是每隔一段时间就会把整个 DataTree 的数据序列化后存储在磁盘中, 以备在故障时可以迅速恢复, 这些存储在磁盘中的文件就是 zk 的快照文件。
- clientPort: 客户端连接 zkServer 的端口号,每台 ZKServer 允许设置为不同的值。默认配置文件设定的是 2181。
3. 启停zookeeper
注意:启动之前必须保证当前linux服务器必须安装java jdk
3.1 在看全局命令配置
由于我们要使用的命令都在 ZK 安装目录下的 bin 目录中,所以在/etc/profile 文件中将该 bin 目录注册到系统环境变量 PATH 中。
# vi /etc/profile文件新增,注意根据zookeeper安装路径自行配置
export PATH=/home/zookeeper/zookeeper-3.6.2/bin:$PATH
# 保存之后刷新
source /etc/profile
3.2 启动
# 启动
[root]# zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/zookeeper-3.6.2/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
3.3 查看状态
# 查看状态
[root]# zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/zookeeper-3.6.2/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: standalone
3.4 重启
# 重启
[root]# zkServer.sh restart
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/zookeeper-3.6.2/bin/../conf/zoo.cfg
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/zookeeper-3.6.2/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/zookeeper-3.6.2/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
3.5 停止
# 停止
[root]# zkServer.sh stop
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/zookeeper-3.6.2/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
3 客户端连接命令
3.1 连接服务器
- 连接本地zk服务器
zkCli.sh
- 连接其他zk服务器
zkCli.sh -server xxx.xxx.xxx.ip:port
3.2 创建子节点
3.2.1 创建永久节点
- 创建一个名为 china 的znode,值为 shagnHai。
[zk: localhost:2181(CONNECTED) 7] create /china shangHai
Created /china
[zk: localhost:2181(CONNECTED) 8] ls /
[china, zookeeper]
3.2.2 创建顺序节点
在/china节点下创建beijing,shenzhen,内容扥别是bj,sz
# 创建临时节点语法:create -s znode value
[zk: localhost:2181(CONNECTED) 2] create -s /china/beijing bj
Created /china/beijing0000000000
[zk: localhost:2181(CONNECTED) 3] create -s /china/shenzhen sz
Created /china/shenzhen0000000001
[zk: localhost:2181(CONNECTED) 4] ls /china
[beijing0000000000, shenzhen0000000001]
3.2.3 创建临时节点
在/china节点下创建aaa,bbb,内容分别为a,b
# 创建临时节点语法:create -e znode value
[zk: localhost:2181(CONNECTED) 0] create -e /china/aaa a
Created /china/aaa
[zk: localhost:2181(CONNECTED) 1] create -e /china/bbb b
Created /china/bbb
[zk: localhost:2181(CONNECTED) 2] ls
ls [-s] [-w] [-R] path
[zk: localhost:2181(CONNECTED) 3] ls /china
[aaa, bbb, beijing0000000000, shenzhen0000000001]
3.2.4 创建临时顺序节点
# 语法:create -e -s znode value
[zk: localhost:2181(CONNECTED) 5] create -e -s /china/sss s
Created /china/sss0000000005
[zk: localhost:2181(CONNECTED) 6] get /china/sss0000000005
s
3.3 获取节点数据内容-get
语法:get 节点
[zk: localhost:2181(CONNECTED) 2] get /china/beijing0000000000
bj
[zk: localhost:2181(CONNECTED) 3] get /china/shenzhen0000000001
sz
[zk: localhost:2181(CONNECTED) 4] get /china
3.4 重新设置节点内容-set
语法:set 节点 value
[zk: localhost:2181(CONNECTED) 1] set /china newinfo
[zk: localhost:2181(CONNECTED) 2] get /china
newinfo
3.5 删除节点
语法:delete znode
[zk: localhost:2181(CONNECTED) 2] delete /china/maybe
3.6 ACL操作
3.6.1 查看权限-getAcl
[zk: localhost:2181(CONNECTED) 0] getAcl /china
# 表示所有人均可操作增删改查
'world,'anyone
: cdrwa
3.6.2 设置权限
下面的命令是,首先增加了一个认证用户 zk,密码为 123,然后为/china 节点指定只有zs 用户才可访问该节点,而访问权限为所有权限。
# 为节点设置权限 setAct /china auth:用户:密码:cdrwa
[zk: localhost:2181(CONNECTED) 1] setAct /china auth:zk:123:cdrwa
# 退出客户端重新连接
[zk: localhost:2181(CONNECTED) 0] getAcl /china
Authentication is not valid : /china
# 添加认证用户 addauth digest 用户:密码
[zk: localhost:2181(CONNECTED) 0] addauth digest zk:123
# 添加认证用户拥有权限获取
[zk: localhost:2181(CONNECTED) 2] getAcl /china
'digest,'zk:MsjFltVWzlTGMoDYclrWdyEQ9KU=
: cdrwa
4 zookeeper数据类型
4.1 节点类型
- 持久节点: 一旦创建就一直存在于 zk 中,直到将删除
- 持久顺序节点: 一个父节点可以为其子节点维护一个创建的先后顺序,这个顺序体现在节点名称上,是节点名称后自动添加一个由 10 位数字组成的数字串。从 0 开始计数。
- 临时节点: 临时节点的生命周期是与客户端会话绑定的,会话消失则节点消失。临时节点只能做叶子节点,不能创建子节点。
- 临时顺序节点: 添加了创建序号的临时节点。
4.2 节点状态
通过 stat znode语法查看
- cZxid: Created Zxid,表示当前 znode 被创建时的事务 ID
- ctime: Created Time,表示当前 znode 被创建的时间
- mZxid: Modified Zxid,表示当前 znode 最后一次被修改时的事务 ID
- mtime: Modified Time,表示当前 znode 最后一次被修改时的时间
- pZxid: 表示当前 znode 的子节点列表最后一次被修改时的事务 ID。注意,只能是其子节点列表变更了才会引起 pZxid 的变更,子节点内容的修改不会影响 pZxid。
- cversion: Children Version,表示子节点的版本号。该版本号用于充当乐观锁。
- dataVersion: 表示当前 znode 数据的版本号。该版本号用于充当乐观锁。
- aclVersion: 表示当前 znode 的权限 ACL 的版本号。该版本号用于充当乐观锁。
- ephemeralOwner: 若当前 znode 是持久节点,则其值为 0;若为临时节点,则其值为创建该节点的会话的 SessionID。当会话消失后,会根据 SessionID 来查找与该会话相关的临时节点进行删除。
- dataLength: 当前 znode 中存放的数据的长度。
- numChildren: 当前 znode 所包含的子节点的个数。