day16-zookeeper
day16-zookeeper
zookeeper
搭建Zookeepr
- 创建三台虚拟机
- zvm01 192.168.31.51
- zvm02 192.168.31.52
- zvm03 192.168.31.53
- 实现三台虚拟机到相互免密钥
上传zookeeper并解压

修改配置文件
[root@zvm01 opt]# cd apache-zookeeper-3.7.0-bin/conf/
[root@zvm01 conf]# mv zoo_sample.cfg zoo.cfg
[root@zvm01 conf]# ll
total 12
-rw-r--r--. 1 1000 1000 535 Mar 17 2021 configuration.xsl
-rw-r--r--. 1 1000 1000 3435 Mar 17 2021 log4j.properties
-rw-r--r--. 1 1000 1000 1148 Mar 17 2021 zoo.cfg
[root@zvm01 conf]# vim zoo.cfg
tickTime=2000
#
syncLimit=5
dataDir=/var/bdp/zookeeper
# 客户端的端口号
clientPort=2181
# 设置服务器内部通信的地址和zk集群的节点
server.1=zvm01:2888:3888
server.2=zvm02:2888:3888
server.3=zvm03:2888:3888
创建文件
在每台服务器上创建mkdir -p /var/bdp/zookeeper文件夹
用来保存zookeeper的文件
在每台服务器上创见touch /var/bdp/zookeeper/myid文件
并分别编辑每个服务器对应的myid文件,
zvm01 1 >> myid
zvm02 2 >> myid
zvm03 3 >> myid
把zvm01上面的zookeeper拷贝到其他的服务器上
scp -r apache-zookeeper-3.7.0-bin root@192.168.31.52:/opt
scp -r apache-zookeeper-3.7.0-bin root@192.168.31.53:/opt
修改/etc/hosts文件
# 三台服务器的hosts文件都要添加
192.168.31.51 zvm01
192.168.31.52 zvm02
192.168.31.53 zvm03
配置环境变量
[root@zvm01 opt]# vim /etc/profile
...
...
# 配置zookeeper的环境变量
export ZOOKEEPER_HOME=/opt/apache-zookeeper-3.7.0-bin
export PATH=ZOOKEEPER_HOME/bin:$PATH
...
...
[root@zvm01 opt]# source /etc/profile
启动zookepeer
[root@zvm01 opt]# zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/apache-zookeeper-3.7.0-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

注:启动zookeeper需要在linux上安装jdk,
否则会无法启动zookeeper

通过:zkServer.sh status 查看zookeeper服务器的运行状态
三台服务器同时启动,myid大的成为leader,其余的都是folower。
如果单独启动一台服务器,这台服务器就会成为leader

zookeeper的存储模型
存储结构
- zookeeper是一个树状结构,维护一个小型的数据节点znode
- 数据以keyvalue的方式存在,目录是数据的key
- 所有的数据访问都必须以绝对路径的方式呈现
[zk: localhost:2181(CONNECTED) 5] ls -s /bdp
# 当前节点的值
[001]
# 创建这个节点的事务id,不会变化
cZxid = 0x400000003
# 创建时间
ctime = Sat Apr 02 21:07:26 CST 2022
# 最后一个修改节点数据的事务id
mZxid = 0x400000003
# 修改时间
mtime = Sat Apr 02 21:07:26 CST 2022
# 子节点的最新事务id
pZxid = 0x400000004
# 对此znode的子节点进行的更改次数
cversion = 1
# 对此znode的数据所作的修改次数
dataVersion = 0
# 对此znode的acl更改次数
aclVersion = 0
# 0x100000ee13e0000(临时节点)
ephemeralOwner = 0x0(持久化节点)
# 数据的长度
dataLength = 0
# 子节点的数据
numChildren = 1
节点分类
- 持久化节点(PERSISTENT)
- 默认创建的就是持久化节点
- 临时节点(Ephemral)
- 只在创建节点的会话有效,会话失效节点就会失效
- 当前的zookeeper服务器只要不关闭,在其他的zookeeper服务器上也能看到,如果关闭此zookeeper会话,其他的服务器上就不能查看到此节点。当在本服务器上关闭此次会话,下次打开服务器,本节点也会消失。
- 可以被所有的客户端所查看
- create -e
- 只在创建节点的会话有效,会话失效节点就会失效
- 序列化节点(Sequential)
- 在名字的后面添加一个序列号(有序)
- create -s
zkServer命令
zkServer.sh start 启动zookeeper服务
zkServer.sh status 查看zookeeper的状态
zkServer.sh stop 停止zookeeper服务
zkCli.sh 登录到zookeeper中
zkCli.sh -server 127.0.0.1:2181
zookeeper命令
在zookeeper命令中,路径必须使用绝对路径。
ls 查看目录下的文件
create znode [value] 创建znode,并赋初始值,默认持久化节点
-e 临时节点
-s 序列化节点
set znode value 修改znode的值
get znode 获取znode的数据
delete znode 删除节点
help 帮助命令
zookeeper的监听机制
官方说明
一个Watch事件是一个一次性的触发器,当被设置了Watch的数据发生了改变的时候,则服务器将这个改变发送给设置了Watch的客户端,以便通知他们
机制的特点
一次性触发,数据发生改变时,一个Watch event会被发送到client,但是client只会收到一次这样的信息
watch event 异步发送
数据监视
zookeeper有数据监视和子数据监视getdata()and exists()设置数据监视,getchildren()设置子节点监视
watch监听有不同的类型,有监听状态的stat,内容的get,目录结构的ls。
get /path[watch] NodeDataChange
state /path[watch] NodeDataDelete
ls /path[watch] NodeChildrenChanged
- 父节点Watch事件类型
- 创建父节点触发:NodeCreated
- 修改父节点数据触发:NodeDataChanged
- 删除父节点触发:NodeDeleted
- 子节点Watch事件类型:
- 使用ls命令为父节点设置watcher,子节点被创建时触发:NodeChildrenChanged
- 使用ls命令为父节点设置watcher,子节点被删除时触发:NodeChildren
- 使用ls命令为父节点设置watcher,子节点被修改时,不触发事件
ACL权限控制
ZK的节点有5种操作权限:CREATE、READ、WRITE、DELETE、ADMIN 也就是增删改查、管理权限,这5种权限简写为crwda,这5种权限中,delete是指对子节点的删除权限,其它4种权限对自身节点的操作权限。
身份认证有四种方式
- world:默认方式,相当于全世界访问
- auth:代表已经认证通过的用户(cli中可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)
- digest:即用户:密码 这种方式认证,这也是业务系统种最常用的
- ip:使用IP地址认证
schema
- world:只有一个用户anyone,代表所有人(默认)
- ip:使用ip地址认证
- auth:使用已添加认证的用户认证
- digest:使用用户名:密码 方式验证
id
- world:只有一个id,anyone
- ip:通常是一个ip地址或一个地址段
- auth:用户名
- digest:自定义
权限
- create c 可以创建子节点
- delete d 可以删除子节点
- read r 可以读取子节点的数据及显示子节点列表
- write w 可以设置节点数据
- admin a 可以设置管理权限
ACL的命令
getAcl /parent 查看ACL
setAcl /parent world:anyone:wa 设置ACL
addAuth digest 用户名:密码 添加用户
setAcl /parent auth:用户名:密码:rcwda 设置权限
四字命令
安装nc
- yum install nc -y
四字命令
zookeeper支持某些特定的四字命令(The Four Letter Words)与其进行交互
使用方式,在shell 终端输入: echo 四字命令|nc node01 2081
| Zookeeper四字命令 | 功能描述 |
|---|---|
| conf | 打印出服务相关配置的详细信息 |
| cons | 列出所有连接到这台服务器的客户端全部连接/会话详细信息 |
| crst | 重置所有连接的连接和会话统计信息 |
| dump | 列出那些比较重要的会话和临时节点。这个命令旨在leader节点上有效 |
| envi | 打印出服务环境的详细信息 |
| reqs | 列出未经处理的请求 |
| wchs | 列出服务器watch的详细 |
| wchc | 通过session 列出服务器watch的详细信息,它的输出是一个与watch相关的会话的列表 |
| wchp | 通过路径列出服务器watch的详细信息。它输出一个与session 相关的路径 |
| mntr | 输出可用于检测集群健康状态的变量列表 |
Zookeeper环境搭建
- 基于Observer的环境搭建
- Zookeeper的热部署
问题
1、cat zookeeper.out 不能查看日志文件?

浙公网安备 33010602011771号