zookeeper(一),基本介绍,节点,单机部署

Zookeeper是一个分布式、高性能的,开源的分布式系统的协调服务。它是一个为分布式应用提供一致性服务的软件。
zookeeper=文件系统+通知机制

节点:zookeeper 中数据基本单元叫节点,节点之下可包含子节点,最后以树级方式程现。
每个节点拥有唯一的路径path。客户端基于PATH上传节点数据,zookeeper 收到后会实时通知对该路径进行监听的客户端。

zookeeper应用场景:
维护配置信息
分布式锁服务 (临时有序节点,生成分布式锁)创建节点语法: create -s -e path data -s 有序, -e 临时, path 路径, data 节点数据
集群管理
生成分布式唯一ID (创建持久化有序节点,生成唯一id(文件路径 加 系统自加的编号)) create -s /b “b”

zookeeper数据模型
类似于Linux文件系统结构,树状结构。
/ 正斜杠为根节点
znode (zookeeper node)节点
znode大体上分为3部分:
节点数据data
节点的子节点
节点的状态stat
ephemeralOwner: 如果节点是临时节点,则表示创建改节点的会话的SessionID。
如果节点是持久节点,则该属性值为0。

节点类型:
zookeeper中的节点有两种:分别为临时节点和永久节点。节点的类型在创建时即被确定,并且不能改变。

会话:指客户端连接zookeeper服务器时,创建的一个通信机制。

临时节点:
该节点生命周期依赖于创建它们的会话。一旦会话结束,临时节点被自动删除,当然也可以手动删除。临时节点不允许拥有子节点。

持久化节点:
该节点的生命周期不依赖于会话,并且只有在客户端显示执行删除操作的时候,他们才能被删除。

zookeeper启动依赖jdk.
安装jdk
安装zookeeper

zookeeper常用命令
./bin/zkServer.sh start 启动
./bin/zkServer.sh stop 停止
./bin/zkServer.sh status 状态

节点:增 create /path、删delete /path、改set /path、查get /path

查看节点列表:
ls path
ls2 path
后者是前者的增强,不仅可以查看指定路径下的所有节点,还可以查看当前节点的信息。

监听器:
get path watch
使用 get /path watch 注册监听器,能够在节点内容发送改变的时候,向注册的客户端发出通知。需要注意的是
zookeeper的触发器是一次性的,即触发一次后就会立即失效。

stat /path watch
使用stat /path watch 注册的监听器能够在节点状态发生改变的时候,向注册的客户端发出通知(一次性的)

ls\ls2 /path watch
使用ls /path watch 或者 ls2 /path watch 注册的监听器能够监听改节点下所有子节点的增加(create)和删除(delete)操作。(一次性的)

zookeeper的acl权限控制
zookeeper类似文件系统,client可以创建节点、更新节点、删除节点,那么如何做到节点权限的控制呢?
zookeeper的 acl (access control list)访问控制列表可以做到这一点。
acl 权限控制,使用scheme: id : permission来标识。
权限模型(scheme): 授权的策略
授权对象(id): 授权的对象
权限(permission): 授予的权限

zookeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限
每个znode支持设置多种权限控制方案和多个权限
子节点不会继承父节点的权限,客户端无权访问某节点,但可能可以访问它的子节点。

例如:
setAcl /test2 ip:192.168.130:crwda //将节点(/test2)权限设置为: ip(授权策略): 192.168.60.130(授权对象):crwda(授予的权限), c增, r 读 ,w 写 ,d 删 , a 管理权限
setAcl /test2 ip:192.168.130:crwda,ip:192.168.131:crwda 多IP授权

授权模式:
world 只有一个用户:anyone,代表登录zookeeper所有人(默认)
ip 对客户端使用IP地址认证
auth 使用已添加认证的用户认证
digest 使用"用户名:密码"方式认证

授权相关命令
setAcl /path acl
getAcl /path
addauth 添加认证用户

Auth授权模式:
1 添加授权用户
addauth digest 用户名:密码
2 授权
setAcl /node3 auth:itcast(用户名):cdrwa(权限)

Digest授权模式

可多种模式,混合进行授权模式。

acl超级管理员:
zookeeper的权限管理模式有一种叫做super,改模式提供一个超管,可以方便的访问任何权限的节点。
1 需要先为超管生成密码的密文(super:admin,自定义)
echo -n super:admin | openssl dgst -binary -shal | openssl base64
->xQJmxLMiHGwaqBvst5y6rkB6HQs=

2 打开zookeeper目录下/bin/zkServer.sh服务器脚本文件,找到如下一行:
nohup “ J A V A " " − D z o o k e e p e r . l o g . d i r = JAVA" "-Dzookeeper.log.dir= JAVA""Dzookeeper.log.dir={ZOO_LOG_DIR}” “-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}”

3 修改后,完整命令:
nohup “ J A V A " " − D z o o k e e p e r . l o g . d i r = JAVA" "-Dzookeeper.log.dir= JAVA""Dzookeeper.log.dir={ZOO_LOG_DIR}” “-Dzookeeper.root.logger=KaTeX parse error: Undefined control sequence: \ at position 123: …vst5y6rkB6HQs="\̲ ̲ …CLASSPATH” $JVMFLAGS Z O O M A I N " ZOOMAIN " ZOOMAIN"ZOOCFG" > “$_ZOO_DAEMON_OUT” 2>&1 < /dev/null &

4 重启zookeeper
5 addauth super:admin
6 可以操作zookeeper,所有的节点。

zookeeper JavaAPI
客户端与zookeeper服务器交互:
1 连接到zookeeper服务器,zookeeper服务器为客户端分配会话ID.
2 定期向服务器发送心跳,否则,zookeeper服务器将过期会话ID,客户端需要重新连接。
3 只要会话ID处于活动状态,就可以获取/设置znode.
4 所有任务完成后,断开与zookeeper服务器的链接。如果客户端长时间不活动,则zookeeper服务器
将自动断开客户端。

©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页