Zookeeper学习笔记
Zookeeper主要应用于大数据开发中的,统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等场景。该框架相当于大数据框架中的润滑剂。是大数据大数据开发工程师必须会的框架之一。本套课程讲解了,Zookeeper的集群安装、选举机制、监听器原理、写数据流程、Shell命令行操作、客户端API操作、服务器节点动态上下线综合案例以及企业真实面试题。
zk是开发分布式系统的基石
Google的三篇论文
- GFS---- HDFS
- BigTable — Hbase
- MapReduce — Hadoop MR
chubby — zk
ZK能做什么?
- 配置一致
- HA
- pub/sub
- naming service
- load balance
- 分布式锁
重点:
一致、有头、数据树
1)一致(数据一致)
解决分布式系统数据一致性问题
协调服务
2)有头(leader) - 自动选举
3)数据树 - 就是一个树状的数据库
CAP:一致、可用、分区
CBP : 能力、漂亮、性格
角色
- Leader
- Follower
- Observer(针对访问量特别大的集群)
数据模型
树状结构的数据树
/─
│ └─/zookeeper
│ └─/app
│ ├─/node1
│ ├─/node2
│ ├─/node3
Znode特点
- Znode兼具文件和目录两种特点
- Znode操作的原子性
- Znode存储的数据大小有限制(比较小)
- 路径引用,必须是绝对路径(以/开头)
- Znode必须唯一
Znode组成部分
- stat 状态信息,版本,权限
- data 关联的数据
- children 子节点
Znode节点类型
- 永久节点(不依赖回话,需要客户端执行删除操作才能删除)
- 临时节点(不允许创建子节点,会话结束临时节点被自动删除)
Znode节点序列号特性
- 自动增加一个序号,格式:”%10d“
创建节点
create [-s] [-e] path data acl
-s 临时节点
-e 顺序节点
create -s -e /tmp1
Watch机制
watch event的效果是一次性的,后续再次发生同样的事情,不会再次触发。
事件:
- 节点创建
- 节点删除
- 节点改变
- 子节点改变
client向服务端注册watcher==>服务端发生事件触发watcher==>客户端回调watch得到触发事件的代码
ZK选举机制
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机制)
ZAB协议
zookeeper原子广播:zookeeper atomic broadcast
有点像2阶段提交
参考连接:https://blog.youkuaiyun.com/qq_41112238/article/details/105300468
ZK脑裂问题
ACL权限控制
accces control list
参考连接:https://blog.youkuaiyun.com/qq_41112238/article/details/105240421
acl权限控制使用scheme:id:permission标识,
①scheme :权限模式
- world 只有一个用户,代表登陆zookeeper的所有人(默认)
- ip 对客户端使用ip地址认证
- auth 使用已添加认证的用户认证
- digest 使用用户名:密码方式认证
②id :授权对象
③permission :授予的权限
- create 简写c 可以创建子结点
- delete 简写d 可以删除子结点(仅下一级)
- read 简写r 可以读取结点数据以及显示子结点
- write 简写w 可以设置结点数据
- admin 简写a 可以设置节点访问控制列表权限
例如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 <user>:<password> `添加认证用户
`setAcl <path> auth:<user>:<acl> ` 授权
4、digest授权模式
setAcl
这里的密码是经过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、命令详情
- conf 配置信息
- cons 列出客户端连接到这台服务器连接/会话信息
- crst 重置这台服务器连接/会话统计信息
- dump 列出未处理的会话和临时节点
- envi 服务器环境相关信息
- ruok 测试服务器是否处于正确 运行状态,正常返回:imok 否则返回空
- stat 服务器详细信息
- srst 重置server状态
- wchs 列出服务器watcher简洁信息
- wchc 通过session分组列出watch的所有节点
- mntr 列出集群的健康状态
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