ZooKeeper入门教程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zzti_erlie/article/details/79978293

安装

单机配置

  1. 镜像站下载:http://mirror.bit.edu.cn/apache/zookeeper/
  2. 配置环境变量(我这里是用户级别)
  3. 进入conf目录,复制zoo_sample.cfg为zoo.cfg(必须是这个文件)
  4. 修改zoo.cfg的dataDir目录为已经存在的目录
vim ~/.bash_profile
export ZK_HOME=/root/zookeeper-3.3.6
export PATH=$PATH:$ZK_HOME/bin
source ~/.bash_profile
echo $ZK_HOME

集群配置

1.主要配置项目:

配置数据目录
dataDir=/data/app/zookeeper-data
hostname:连接leader端口:leader选举端口
server.101=mad101:2801:2802
server.102=mad102:2801:2802
server.103=mad103:2801:2802

2.在dataDir目录新建myid文件
在server.101服务器上则写101,以此类推

查看帮助
官网帮助文档:http://zookeeper.apache.org/doc/current/zookeeperStarted.html

zkServer.sh
zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}

启动ZooKeeper

./zkServer.sh start

查看ZooKeeper运行状态

./zkServer.sh status

关闭ZooKeeper

./zkServer.sh stop

连接到ZooKeeper

zkCli.sh -server 127.0.0.1:2181

入门

命令和特性

常用命令

stat path [watch]
set path data [version]
# 不写version每次都覆盖,相当于乐观锁
# 写了version修改指定版本的数据,相当于悲观锁
ls path [watch]
delquota [-n|-b] path
ls2 path [watch]
# 相当于ls + stat的整合命令
setAcl path acl
# 设置某个节点的acl权限信息
setquota -n|-b val path
history 
redo cmdno
printwatches on|off
delete path [version]
# 加了version,删除指定版本的数据,否则直接删除
sync path
listquota path
get path [watch]
create [-s] [-e] path data acl
# -e是临时节点
# -s是创建顺序节点
addauth scheme auth
# 输入认证授权信息,注册时输入明文密码(登录)但是在zk的系统里,密码是加密的形式存在的
quit 
getAcl path
# 获取某个节点的acl权限信息
close 
connect host:port

stat基本信息

cZxid = 0x0
# zookeeper为节点分配的id
ctime = Thu Jan 01 08:00:00 CST 1970 
# 节点的创建日期
mZxid = 0x0
# 修改后zookeeper为节点分配的id
mtime = Thu Jan 01 08:00:00 CST 1970
# 修改的时间
pZxid = 0x4
# 子节点id
cversion = 0
# 子节点的version
dataVersion = 0
# 当前节点数据版本号
aclVersion = 0
# 权限版本
ephemeralOwner = 0x0
# 0x0为持久节点,非0x0为临时节点
dataLength = 0
# 数据长度
numChildren = 2
# 子节点的个数

zk特性-session的基本原理

  1. 客户端与服务端之间的连接存在会话
  2. 每个会话都可以设置一个超时时间
  3. 心跳结束,session则过期
  4. session过期,则临时节点znode会被抛弃
  5. 心跳机制:客户端向服务端的ping包请求

zk特性-watcher机制

  1. 针对每个节点的操作,都会有一个监督者->watcher
  2. 当监控的某个对象(znode)发生了变化, 则触发watcher事件
  3. zk中的watcher是一次性的,触发后立即销毁
  4. 父节点,子节点增删改都能触发其watcher
  5. 针对不同类型的操作,触发的watcher事件也不同:
    (1)(子)节点创建事件
    (2)(子)节点删除事件
    (3)(子)节点数据变化事件

触发事件

  1. 创建父节点触发:NodeCreated
  2. 修改父节点数据触发:NodeDataChanged
  3. 删除父节点触发:NodeDeleted
  4. ls为父节点设置watcher,创建子节点触发:NodeChildrenChanged
  5. ls为父节点设置watcher,删除子节点触发:NodeChildrenChanged
  6. ls为父节点设置watcher,修改子节点不触发事件

ACL

ACL的构成一
zk的acl通过[scheme:id:permissions]来构成权限列表

  1. scheme:代表采用的某种权限机制
  2. id:代表允许访问的用户
  3. permissions:权限组合字符串

ACL的构成二-scheme

  1. world:world下只有一个id,即只有一个用户,也就是anyone,那么组合的写法就是world:anyone:[permissions]
  2. auth:代表认证登录,需要注册用户有权限就可以,形式为auth:user:password:[permissions]
  3. digest:需要对密码加密才能访问,组合形式为digest:username:BASE64(SHA1(password)):[permissions]
  4. ip:当设置ip为指定的ip地址,此时限制ip进行访问,比如ip:192.168.1.1:[permissions]
  5. super:代表超级管理员,拥有所有的权限

ACL的构成三
crdwa(权限字符串缩写)

  1. create:创建子节点
  2. read:获取节点/子节点
  3. write:设置节点数据
  4. delete:删除子节点
  5. admin:设置权限

world:anyone:cdrwa

addauth digest user:pwd
auth:user:pwd:cdrwa
digest:user:BASE64(SHA1(pwd)):cdrwa
ip:192.168.1.1:cdrwa

setAcl /test world:anyone:crwa

addauth digest username:password
# 登录用户名,密码(password不是加密的) auth中password是不加密的,digest中password是加密过后的密码
setAcl /test auth:username:password:cdrwa
setAcl /test digest:username:password:cdrwa


addauth digest li:li
setAcl /name auth:li:li:cdrwa
getAcl /name
'digest,'li:uf9Q/Uz/mp2hyYE1bIJghBrkS8w=
: cdrwa
setAcl /name2 digest:li:uf9Q/Uz/mp2hyYE1bIJghBrkS8w=:cdrwa
getAcl /name2
'digest,'li:uf9Q/Uz/mp2hyYE1bIJghBrkS8w=
: cdrwa

zookeeper四字命令

echo stat | nc localhost 2181
  1. [stat]查看zk的状态信息,以及是否mode
  2. [ruok]查看当前zkserver是否启动,返回imok
  3. [dump]列出未经处理的会话和临时节点
  4. [conf]查看服务器配置
  5. [cons]展示连接到服务器的客户端信息
  6. [envi]环境变量
  7. [mntr]监控zk健康信息
  8. [wchs]展示watch的信息
  9. [wchc]session与watch信息
  10. [wchp]path与watch信息

源码地址

GitHub:https://github.com/erlieStar/study-zookeeper

参考博客

[1]https://blog.csdn.net/zknxx/article/details/52601554
[2]http://www.cnblogs.com/wuxl360/category/874409.html

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页