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 不能查看日志文件?

posted @ 2022-04-02 22:25  黎白昼  阅读(35)  评论(0)    收藏  举报