Zookeeper学习笔记一之配置文件,会话,节点,ACL,日志可视化

zookeeper配置文件解析
# The number of milliseconds of each tick
tickTime=2000 #Zk的时间单元,zk中所有的时间都是以这个时间单元为基础,进行整数倍配置的。session最小超时时间是 2*tickTime
# 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=/tool/Data/data  #存储快照文件的snapshot目录。默认情况下也会存储事务日志,建议同时配置dataLogDir,事务日志的写性能直接影响zk的性能
dataLogDir=/tool/Data/datalog  #事务日志暑促目录,尽量给事务日志的输出配置单独的磁盘或者挂载点,这将极大的提升zk的性能
# the port at which the clients will connect
clientPort=2181 #客户端连接server的端口,即对外服务端口,一般为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
snapCount=10 #每进行snapCount次事务日志输出后,触发一次快照(snapshot),此时zk会生成一个snapshot.*文件,同时创建一个新的事务日志文件log.*默认是100000.(真正的代码实现中,会进行一定的随机数整理,以避免所有服务器在同一时间进行快照而影响性能)(java System property:zookeeper.snapCount)

## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true

挑几个进行解释:

clientPort:参数无默认值,必须配置。用于配置服务器的对外端口,默认是2181

dataDir:存放快照的目录,同时用于集群的myid文件也存在这个文件夹里(注意:一个配置文件只能包含一个dataDir字样,即使它被注释掉)

dataLogDir:存放事务日志的目录,transaction log分离可以避免和普通log还有快照的竞争。

tickTime:心跳时间,为了确保连接存在,以毫秒为单位,最少为两个心跳时间

initLimit:多少个心跳时间内,允许其他server连接并初始化数据,如果Zookeeper管理的数据较大,则应相应增大这个值

syncLimit:多少个tickTime内,允许follower同步,如果follower落后太多,则会被丢弃。

ZK的特性

ZK的特性会从会话、数据节点,版本,Watcher,ACL权限控制,集群角色这些部分来了解,其中重点需要掌握的是数据节点和watcher

会话

会话(session)是zookeeper的非常重要的概念,客户端和服务端之间的任何交互操作都与会话有关。本质是Tcp长连接,通过会话可以进行心跳检测和数据传输

会话状态

Zk客户端和服务器端成功连接后,就创建了一次会话,zk会话在整个运行起脚的生命周期中,会在不同的会话状态之间切换,这些状态包括: CONNECTING CONNECTED RECONNECTING RECONNECTED CLOSE

ZK的数据模型

Zookeeper的视图结构和标准的Unix文件系统类似,其中每个节点称为“数据节点”或者ZNode,每个Znode可以存储数据,还可以挂在子节点,因此可以称之为树。

需要注意的一点,每个ZNode都必须有值,如果没有值,节点不能创建成功。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e4RkjjWM-1617025724714)(C:\Users\wwp\AppData\Roaming\Typora\typora-user-images\image-20210329211022974.png)]

  • 在Zookeeper中,ZNode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据。

  • 通过客户端对ZNode进行增删改查的操作,还可以注册watcher监控ZNode的变化。

Zookeeper的节点类型

a.Znode有两种节点类型

短暂(ephemeral) 对应命令为 create -e /node test 客户端断开连接zk删除临时节点

持久(persistent) 对应命令为 create -s /node test 客户端断开连接zk不删除persistent类型节点

b.Znode有四种形式的目录节点(默认是persistent)

PERSISTENT

PERSISTENT_SEQUENTIAL(持久序列/test0000000019)

EPHEMERAL

EPHEMERAL_SEQUENTIAL

c.创建ZNode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护

create -s /node test

d.在分布式系统中,顺序号可以被用于为所有事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序。

Zookeeper节点状态属性
属性数据结构描述
czxidlong节点被创建的zxid的值
mzxidlong节点被修改的zxid的值
pzxidlong子节点最后一次被修改时的事务id
ctimelong节点被创建的时间
mtimelong节点被修改的时间
versionlong节点被修改的版本号
cversionlong节点的所拥有子节点被修改的版本号
aversionlong节点的ACL被修改的版本号
emphemeralOwnerlong如果是临时节点,值为这个节点拥有者的会话id,否则为0
dataLengint节点数据域的长度
numChildrenint节点拥有的子节点个数

zxid事务id可以识别出请求的全局顺序

version基于CAS理论保证分布式数据原子性操作

ACL保障数据的安全

ACL机制,表示scheme🆔permissions,第一个字段表示采用哪种机制,第二个id表示用户,permissions表示相关权限(cdrwa)

Zookeeper提供如下集中机制(scheme)

  • world :它下面只有一个id,叫everyone,world:everyone代表任何人
  • auth:它不需要id,只是要通过authentication的user都有权限
  • digest:它的对应id为username:BASE64(SHA1(password)),它需要先通过username:password像是的authentication
  • ip:对应的id为客户机的IP地址,设置的时候可以设置一个ip段,比如ip:192.168.1.0/16,表示匹配前16个bit的ip字段
命令行

bin目录下

  • zkServer.sh start 启用服务
  • zkServer.sh status 查看服务状态
  • zkServer.sh stop 停止服务
  • zkServer.sh restart 重启服务

客户端常用命令

  • ls / ls -s / 查看当前Zookeeper中所包含的内容
  • 创建文件,并初始化内容: create /zk test创建一个新的ZNode节点,zk以及关联字符串 test -e 临时节点 -s 顺序节点
  • 获取文件内容 get /node [watch]【watch 监听】
  • 修改文件内容 set /node test2 对node关联的字符串进行设置
  • 删除文件 delete /zk
  • 递归删除 rmr /zk
  • 退出客户端 quit
ACL常用命令

permission

CREATE ,READ, WRITE, DELETE ,ADMIN 增删改查和管理权限

CREATE© : 创建子节点的权限

READ®:读取数据的权限

DELETE(d) :删除节点的权限

WRITE(w):修改节点数据的权限

ADMIN(a):设置子节点权限的权限

命令:

getAcl 查看权限信息

setAcl设置权限信息

  • setAcl /node world:anyone:crdwa

addauth注册会话授权

Auth

addauth digest user1:123456 #先创建一个用户

setAcl /node auth user1:123456 crwda # 设置node节点的权限

Digest

create /node1 data

addauth user1:123456

setAcl /node1 digest user1:HYGa7IZRm2PUBFiFFu8xY2pPP/s=:crwda #使用digest可是在base64加密的密码,如果使用明文导致node1节点不可访问

通过明文获取密文命令

java -Djava.ext.dirs=/soft/zookeeper-3.4.12/lib -cp /soft/zookeeper-3.4.12/zookeeper-3.4.12.jar org.apache.zookeeper.server.auth.DigestAuthenticationProvider deer:123456

ip

create /testDir/testIp data

setAcl /testDir/testIp ip:192.168.30.10:cdrwa

Zookeeper日志可视化

查看事务日志

java -cp /soft/zookeeper-3.4.12/zookeeper-3.4.12.jar:/soft/zookeeper-3.4.12/lib/slf4j-api-1.7.25.jar org.apache.zookeeper.server.LogFormatter log.1

查看快照

java -cp /soft/zookeeper-3.4.12/zookeeper-3.4.12.jar:/soft/zookeeper-3.4.12/lib/slf4j-api-1.7.25.jar org.apache.zookeeper.server.SnapshotFormatter log.1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值