Zookeeper主要应用于大数据开发中的,统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等场景。该框架相当于大数据框架中的润滑剂。是大数据大数据开发工程师必须会的框架之一。本套课程讲解了,Zookeeper的集群安装、选举机制、监听器原理、写数据流程、Shell命令行操作、客户端API操作、服务器节点动态上下线综合案例以及企业真实面试题。
zk是开发分布式系统的基石
Google的三篇论文
chubby — zk
ZK能做什么?
一致、有头、数据树
1)一致(数据一致)
解决分布式系统数据一致性问题
协调服务
2)有头(leader) - 自动选举
3)数据树 - 就是一个树状的数据库
CAP:一致、可用、分区
CBP : 能力、漂亮、性格
树状结构的数据树
/─
│ └─/zookeeper
│ └─/app
│ ├─/node1
│ ├─/node2
│ ├─/node3
Znode特点
Znode组成部分
Znode节点类型
Znode节点序列号特性
创建节点
create [-s] [-e] path data acl
-s 临时节点
-e 顺序节点
create -s -e /tmp1
watch event的效果是一次性的,后续再次发生同样的事情,不会再次触发。
事件:
client向服务端注册watcher==>服务端发生事件触发watcher==>客户端回调watch得到触发事件的代码
1、全新集群
1)启动先给自己投一票
2)比较myid,myid值越大权重越高
3)票数过半,选举结束,产生leader
2、非全新集群
1)过滤逻辑时钟,保持逻辑时钟一致的参加投票选举
2)数据ID大的胜出
3)数据ID一样,服务器ID(myid)大的胜出
1、发布与订阅(配置中心)(Warter机制)
数据库的url、username、password
Kafka中,维护broker的信息
dubbo中也广泛使用zookeeper管理一些配置来实现服务治理
2、命名服务
eg. Dubbo使用zk做为命名服务,维护全局的服务地址列表
3、分布式锁
临时有序的节点 + watcher机制
4、分布式唯一ID
临时有序的节点,取序号
5、主备架构
自动切换主备( watcher机制)
zookeeper原子广播:zookeeper atomic broadcast
有点像2阶段提交
参考连接:https://blog.csdn.net/qq_41112238/article/details/105300468
accces control list
参考连接:https://blog.csdn.net/qq_41112238/article/details/105240421
acl权限控制使用scheme:id:permission标识,
①scheme :权限模式
②id :授权对象
③permission :授予的权限
例如setAcl /hadoop ip:192.168.2.142:crwda 表示ip地址为192.168.2.142的客户端对/hadoop有全部权限
getAcl path 读取权限
setAcl path acl 设置权限
addauth schema suth 添加认证用户
1、world授权模式
setAcl path world:anyone:
例如取消c创建权限,就不能再创建子结点
2、ip授权模式
命令setAcl path ip::
要用两个虚拟机,这个就不演示了…
主要就是限制客户端ip地址的
3、auth模式
`addauth digest : `添加认证用户
`setAcl auth:: ` 授权
4、digest授权模式
setAcl digest:::
这里的密码是经过SHA1及BASE64处理的密文
通过 echo -n sjh:sjh2019 | openssl dgst -binary -sha1 | openssl base64
生成密文,复制该结果
多种授权模式
同一个结点可以使用多种授权模式,用逗号隔开就行,例
超级管理员
假设超级管理员的账号是super:admin,先要为其生成密文:
1、原生客户端
2、Curator
1、telnet 登陆zookeeper,登陆后提交相应的命令
格式:telnet zk机器ip 端口
eg. telnet 192.168.1.21 2181
然后执行: mntr
2、nc命令 ,执行相应的命令
eg. echo mntr | grep nc 192.168.1.21 2181
3、命令详情
4、命令执行异常提示
stat is not executed because it is not in the whitelist.
在 zoo.cfg配置文件中加入4lw.commands.whitelist=*
,这句话就是将四字命令加入到白名单中
或者
在启动脚本里添加VM环境变量-Dzookeeper.4lw.commands.whitelist=*
taokeeper 淘宝开源的可视化zk监控工具(有几年没有更新了)
https://github.com/alibaba/taokeeper
百度:disconf
淘宝:diamond
美团:lion
携程:Apollo
学习视频地址:https://www.bilibili.com/video/BV1Jx411a7Jx
学习视频地址:https://www.bilibili.com/video/BV1PW411r7iP
学习视频地址:https://www.bilibili.com/video/BV19b411772h