下载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 zkNode35. 修改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
- 所有的数据访问都必须以绝对路径的方式呈现
首先查看下我们的’/根’目录下的情况,
我们的根目录下有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
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
- 官方说明
- 一个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的用户
- world:全局权限授予
- auth:代表已经认证通过的用户
- digest:用户名-密码认证方式,这也是业务系统中最常用的。
- ip:使用客户端的主机ip来进行授权
-
权限模式 授权对象 IP 通常是一个IP地址,例如’192.168.3.2’ Digest 自定义,通常是“username:password(username:用户名,password,密码)”,例如"CCC:12311414141414124124124" World 只有一个id:anyone Auth 与Digest一致
- ZK的节点有五种操作权限:CREATE(增)、DELETE(删)、READ(查)、WRITE(改)、ADMIN(管理员权限)
- 五种权限中,delete是指对子节点的删除权限,而其他四种权限是对自身节点的操作权限
- CREATE:创建子节点
- DELETE:删除子节点
- READ:读取节点数据及显示子节点列表
- WRITE:可以设置节点数据
- ADMIN:可以设置 节点访问控制列表权限
- 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
- 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/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)](



