1. 下载Zookeeper
下载zookeeper3.4.6,上传,解压到/opt
2. Zookeeper配置安装
1.进入zookeeper/conf,cp zoo_sample.cfg zoo.cfg
,修改zoo.cfg
[root@BaseNode conf]# vim zoo.cfg
# The number of milliseconds of each tick
tickTime=2000
# 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=/var/tdp/zookeeper
# the port at which the clients will connect
clientPort=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
#设置服务器内部通讯地址和节点,给zookeeper使用的#ps:注意这里的名字要和主机名一致
server.1=BaseNode:2888:3888
server.2=zknode1:2888:3888
server.3=zknode2:2888:3888
server.4=zknode3:2888:3888
~
3. 在/var/bdp/zookeeper下创建myid文件
以此在每个虚拟机下存入和server.num相同的数字。
4.修改/etc/hosts文件
10.4.17.100 BaseNode
10.4.17.101 zknode1
10.4.17.102 zknode2
10.4.17.103 zkNode3
5. 修改zookeeper环境变量配置
vim /etc/profile
在文件末尾添加:
#Zookeeper
export ZOOKEEPER_HOME=/opt/zookeeper-3.4.6
export PATH=$PATH:$ZOOKEEPER_HOME/bin
保存source /etc/profile.
6. 大功告成,试一下吧
zkServer.sh restart/start
再看一下运行状态,zkServer.sh status
停止机群,zkServer.sh stop
。
储存结构
- zookeeper是一个树状结构,维护一个小型的数据节点znode
- 数据以key-value的方式存在,目录是数据的key
- 所有的数据访问都必须以绝对路径的方式呈现
一个znode的格式[1]
首先查看下我们的’/根’目录下的情况,
我们的根目录下有zookeeper、sxt、bdp三个节点。而bdp下还要一个001节点。
查看下bdp此节点的属性。
现在,我们对/bdp节点进行一次修改。
可以看到,mZxid和mtime都发生了改变。
然后,我们在bdp下,再新增一子节点,
可见 bdp 节点的 pZxid、cversion、numChildren 都发生了相应的改变。
节点的分类
-
PERSISTENT–持久化目录节点
- 默认创建的就是持久化节点
- 客户端与zookeeper断开连接后,该节点依旧存在。
-
PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点
- 客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
- 客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
-
EPHEMERAL-临时目录节点
- 客户端与zookeeper断开连接后,该节点被删除
- 可以被所有客户端查看
-
EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点
- 客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号
-
Sequential序列化节点
- 使用
create -s /znode value
进行创建 - 就是给该节点名称进行顺序编号,不会重复
- 使用
zookeeper操作命令
-
启动zookeeper
zkServer.sh start
-
登录到zookeeper
zkCli.sh -server 127.0.0.1:2181
zookeeper是一个集群,默认登录到了本地,(127.0.0.1),2181是zookeeper客户端端口。
-
查看某个目录下的子节点
ls /path
-
查看某个目录下子节点的详细信息
ls2 /path
-
新建节点:
create /bdp "hello"
-
查看节点信息:
get /bdp
-
修改节点值
set /bdp "hey"
最多1M
-
删除节点
delete /bdp/001
当然也可以使用,rmr /node
强行删除。
-
退出客户端
quit
zkServer的监听机制
- 官方说明
- 一个Watch时间是一个一次性的触发器,当被设置了watch的数据发生改变的时候,则服务器将这个改变发送给设置Watch的客户端,以便通知它们。
- 监听机制特点
- 一次性触发数据改变时,一个watch event会被送到client,但是client只会收到一次这样的信息。
- watcher event异步发送。
- 数据监视
- zookeeper有数据监视和子数据监视
- getdata()和exists()设置数据监视
- getchildren()设置子节点监视
- 数据监听只会监听被设置watch,不会监听其子节点的任何变化
监听实现
- get /node watch
对/bdp的子节点进行操作时,watch都没有反应,只有对/bdp进行操作时,发生watchedEnvent。
- stat /node watch
我试着新增和删除node的子节点,不会发生watchedEnvent。删除node时发生了。
- ls /node watch
对其子节点进行监控,新增或删除子节点时,都会发生watchedenvent
ACL权限控制(了解)
- ACL:Access Control List 访问控制列表
权限设置
概述
-
ACL 权限设置的格式时是scheme: id:permission三段式:
-
授权方式:scheme
-
授权对象:id
-
授予的权限:permission
-
-
特性如下:
- ZooKeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限
- 每个znode支持设置多种权限控制方案和多个权限
- 子节点不会继承父节点的权限,客户端无权访问某节点,但可能可以访问它的子节点
例如:
setAcl /test2 ip:128.0.0.1:crwda
将/test2的crwad权限授予ip地址为128.0.0.1的用户
SCHEME 采用何种方式授权
- world:全局权限授予
- auth:代表已经认证通过的用户
- digest:用户名-密码认证方式,这也是业务系统中最常用的。
- ip:使用客户端的主机ip来进行授权
ID
-
权限模式 授权对象 IP 通常是一个IP地址,例如’192.168.3.2’ Digest 自定义,通常是“username:password(username:用户名,password,密码)”,例如"CCC:12311414141414124124124" World 只有一个id:anyone Auth 与Digest一致
permission 授予什么权限
- ZK的节点有五种操作权限:CREATE(增)、DELETE(删)、READ(查)、WRITE(改)、ADMIN(管理员权限)
- 五种权限中,delete是指对子节点的删除权限,而其他四种权限是对自身节点的操作权限
- CREATE:创建子节点
- DELETE:删除子节点
- READ:读取节点数据及显示子节点列表
- WRITE:可以设置节点数据
- ADMIN:可以设置 节点访问控制列表权限
ACL相关命令[2]
- getAcl path : 读取ACL权限配置
- getAcl /
- setAcl setAcl path acl : 设置ACL权限
- setAcl / world:anyone:wa
- setAcl / auth:zhang:123456:rcwda
- addauth scheme auth : 添加认证用户
- addauth digest zhang:123456
四字命令(了解)
安装nc
- yum install nc -y
使用方式
-
在终端输入
echo 四字命令 | nc ip/node1 2181
可以看到BaseNode的集群配置情况。
-
如果四字命令不可使用,那么在/zookeeper/conf/zoo.cfg文件最后加上
4lw.commands.whitelist=*
即可
四字命令
Zookeeper四字命令 | 功能描述 |
---|---|
conf | 打印出服务相关配置信息 |
cons | 列出所有链接到这台服务器的客户端全部连接/绘画详细信息.包括"接受/发送"的包数量,会话id,操作延迟,最后的操作执行等信息 |
crst | 重置所有连接的连接和会话统计信息 |
dump | 列出那些比较重要的会话和临时节点 |
envi | 打印出服务环境的详细信息。 |
reqs | 列出未经处理的请求 |
ruok | 测试服务是否处于正确状态。如果确实如此,那么服务返回"imok",否则不做任何相应。 |
stat | 输出关于性能和连接的客户端的列表。 |
srst | 重置服务器的统计。 |
srvr | 列出连接服务器的详细信息 |
wchs | 列出服务器watch的详细信息。 |
wchc | 通过session列出服务器watch的详细信息,它的输出是一个与watch相关的会话的列表。 |
wchp | 通过路径列出服务器watch的详细信息。它输出一个与session相关的路径。 |
mntr | 输出可用于检测集群健康状态的变量列表 |
Zookeeper环境搭建(增加一台虚拟机)
-
解压zookeeper
-
修改zookeeper/conf zoo.cfg
-
echo 5 > /var/bdp/zookeeper/myid
-
vi /etc/hosts
-
vi /etc/profile
-
zkServer.sh restart/start
也可以不重启添加zookeeper(热部署)
参考
[1]. ZooKeeper 数据模型 znode 结构详解 - Mr.peter - 博客园 (cnblogs.com)
[2]. zookeeper的ACL权限控制 - QiaoZhi - 博客园 (cnblogs.com)[zookeeper的ACL权限控制 - QiaoZhi - 博客园 (cnblogs.com)](