安装
单机配置
- 镜像站下载:http://mirror.bit.edu.cn/apache/zookeeper/
- 配置环境变量(我这里是用户级别)
- 进入conf目录,复制zoo_sample.cfg为zoo.cfg(必须是这个文件)
- 修改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的基本原理
- 客户端与服务端之间的连接存在会话
- 每个会话都可以设置一个超时时间
- 心跳结束,session则过期
- session过期,则临时节点znode会被抛弃
- 心跳机制:客户端向服务端的ping包请求
zk特性-watcher机制
- 针对每个节点的操作,都会有一个监督者->watcher
- 当监控的某个对象(znode)发生了变化, 则触发watcher事件
- zk中的watcher是一次性的,触发后立即销毁
- 父节点,子节点增删改都能触发其watcher
- 针对不同类型的操作,触发的watcher事件也不同:
(1)(子)节点创建事件
(2)(子)节点删除事件
(3)(子)节点数据变化事件
触发事件
- 创建父节点触发:NodeCreated
- 修改父节点数据触发:NodeDataChanged
- 删除父节点触发:NodeDeleted
- ls为父节点设置watcher,创建子节点触发:NodeChildrenChanged
- ls为父节点设置watcher,删除子节点触发:NodeChildrenChanged
- ls为父节点设置watcher,修改子节点不触发事件
ACL
ACL的构成一
zk的acl通过[scheme\:id\:permissions]来构成权限列表
- scheme:代表采用的某种权限机制
- id:代表允许访问的用户
- permissions:权限组合字符串
ACL的构成二-scheme
- world:world下只有一个id,即只有一个用户,也就是anyone,那么组合的写法就是world:anyone:[permissions]
- auth:代表认证登录,需要注册用户有权限就可以,形式为auth:user:password:[permissions]
- digest:需要对密码加密才能访问,组合形式为digest:username:BASE64(SHA1(password)):[permissions]
- ip:当设置ip为指定的ip地址,此时限制ip进行访问,比如ip:192.168.1.1:[permissions]
- super:代表超级管理员,拥有所有的权限
ACL的构成三
crdwa(权限字符串缩写)
- create:创建子节点
- read:获取节点/子节点
- write:设置节点数据
- delete:删除子节点
- 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
- [stat]查看zk的状态信息,以及是否mode
- [ruok]查看当前zkserver是否启动,返回imok
- [dump]列出未经处理的会话和临时节点
- [conf]查看服务器配置
- [cons]展示连接到服务器的客户端信息
- [envi]环境变量
- [mntr]监控zk健康信息
- [wchs]展示watch的信息
- [wchc]session与watch信息
- [wchp]path与watch信息
集群环境
zookeeper集群,包含三种角色leader/follower/observer
Leader:接受所有Follower的提案请求并统一协调发起提案的投票,负责与所有的Follow进行内部的的数据交换(同步)
Follower:直接为客户端服务,并参与
源码地址
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






还没有评论,来说两句吧...