Zookeeper入门
学习资料来源:www.bilibili.com/video/BV1to…
特点
- 1个leader,多个follower
- 半数以上节点存活就能工作,一般奇数台服务器
- 数据量小,同步时间快,在一定时间范围内能读到最新数据
- 数据更新原子性
- 更新请求顺序执行
- 全局数据一致
数据结构
类似文件系统的树形结构,每个节点为ZNode,默认大小1MB,不能存储大数据量,每个节点可用路径唯一标识。
应用场景
- 统一命名服务 类似功能实现:Nginx
- 统一集群管理
- 统一配置管理
- 服务器动态上下限
- 软负载均衡
集群
选举机制-第一次启动
每个节点投自己一票,互相交换选票信息,如果对方myid比我大,那我就把选票投给它,直到某个节点收到半数以上的投票数,则当选为leader,其他looking节点更新为follower节点,不再进行投票。 sid:和myid一致 zxid:事务id epoch:任期id,leader不存在时为逻辑时钟
选举机制-非第一次启动
leader存在
和其他节点通信时被告知leader存在,放弃选举
leader挂了
重新发起选举,比较(epoch,zxid,sid),谁大谁当leader
群起脚本
#!/bin/bash
case $1 in
"satrt"){
for i in hadoop102 hadoop103 hadoop104
do
echo -------$i启动--------
ssh $i "启动命令"
done
}
"stop"){
}
"status"){
}
节点类型
- 永久节点
- 临时节点(客户端断开连接就不存在)
监听原理
在main线程中创建客户端,这时会创建两个线程,一个connector线程用于与服务器通信,一个listener线程,connector线程将注册的监听时间发送给服务器,服务器将变化时间发送给listener线程,listener线程调用process方法进行处理。(注册一次,只能生效一次)
写数据原理
- 写请求发送给follower
案例
服务器动态上下线
分布式锁
缺点
- 会话连接时异步的,得自己用countdownlatch控制
- 代码复杂度高
- watch需要重复注册
- 成熟框架:curator
面试题
生产环境多少台zk合适
- 10台服务器,3台zk
- 20台服务器,5台zk
- 100台服务器,11台zk
- 200台服务器,11台zk zk太多,通信延迟更大
常用命令
ls, get, create, delete