文章目录
- 一、zookeeper入门
- 1. 概述
- zookeeper的工作机制
- 2.特点
- 3.数据结构
- 4.应用场景
- 4.1.统一命名服务
- 4.2.统一配置管理
- 4.3.统一集群管理
- 4.4.服务器节点动态上下线
- 4.5.软负载均衡
- 5.下载地址
- 二、zookeeper安装
- 1.本地模式安装
- 2.配置参数解读
- 三、zookeeper集群操作
- 1.集群操作
- 1.1 集群安装
- 1.2选举机制(重要)
- 1.3zk集群启动停止脚本
- 2.客户端命令操作
- 2.1 命令行语法
- 2.2znode节点数据信息
- 2.3节点类型(持久/临时/有序/无序)
- 2.4监听器原理(重要):一次监听,多次监听需要多次注册
- 2.4.1 监听节点值
- 2.4.2 监听子节点变化(路径变化)
- 2.5节点删除与查看
- 3.客户端API操作
- 3.1 IDEA环境搭建
- 3.2 创建zk客户端
- 3.3 创建子节点
- 3.4 获取子节点并开启监听变化
- 3.5 判断Znode是否存在
- 4.客户端向服务端写数据流程
- 4.1 直接写给leader
- 4.2 写给了follower
- 四、服务动态上下线监听案例(重点)
- 1.需求
- 2.需求分析
- 3.具体实现
- 3.1 zk-server命令行创建根节点/server
- 3.2 zk-client的服务器节点连接注册到zk-server的/server目录下
- 3.3 zk-client的客服端连接zk-server,监听/server目录下节点的变化
- 4.测试
- 五.zk分布式锁案例(重点)
- 1.原生zk分布式锁案例
- 2.curator框架实现分布式锁案例(企业实战用这种)
- 六、企业面试真题(重点)
- 1.选举机制
- 2.生产环境集群安装多少zk节点合适
- 3.常用命令
- 七、zookeeper源码
文章整理自:尚硅谷zk
一、zookeeper入门
1. 概述
zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目;
zookeeper的工作机制
2.特点
特点:
1.zookeeper:一个领导(leader),多个跟随者(follower)组成的集群
2.集群中只要有半数以上的节点存活,zk集群就能正常服务。所以zk适合安装技术台服务器
3.全局数据一致:每个server保存一份相同的副本数据,client无论连接到那个server,数据都是一致的。
4.更新请求顺序执行,来自同一个client的更新请求按其发送顺序依次执行。
5.数据更新原子性,一次数据更新要么成功,要么失败。
6.实时性,在一定时间范围内,client能读到最新的数据。
3.数据结构
4.应用场景
4.1.统一命名服务
nginx也能实现
4.2.统一配置管理
4.3.统一集群管理
4.4.服务器节点动态上下线
4.5.软负载均衡
5.下载地址
https:zookeeper.apache.org
二、zookeeper安装
1.本地模式安装
2.配置参数解读
三、zookeeper集群操作
1.集群操作
1.1 集群安装
1.2选举机制(重要)
第一次启动时选举机制:
非第一次启动时选举机制:
1.3zk集群启动停止脚本
2.客户端命令操作
2.1 命令行语法
#进入zk容器
docker exec -it kafka-compose-zookeeper-1 /bin/sh
#启动zkcli
./bin/zkClit/sh
#创建节点 -e 暂时节点,-s顺序节点,'machao'为当前节点的值
create -e -s /sanguo/shuguo/machao 'machao'
# 修改节点值
set /sanguo/shuguo/machao "machaoerzi"
#退出
quit
2.2znode节点数据信息
2.3节点类型(持久/临时/有序/无序)
2.4监听器原理(重要):一次监听,多次监听需要多次注册
2.4.1 监听节点值
# get -w 监听节点值变化。监听sanguo一次
get -w /shanguho
2.4.2 监听子节点变化(路径变化)
路径的监听只会监听子路径,不会进行递归向下监听
# ls -w 监听节点路径变化。也是监听一次
ls -w /shanguo
2.5节点删除与查看
# delete 删除当前节点(此节点必须无子节点)
delete -w /shanguo
# deleteall 删除此节点下所有子节点
deleteall -w /shanguo
# stat 查看节点状态
stat /sanguo
# 效果等同stat
get -s /sanguo
3.客户端API操作
3.1 IDEA环境搭建
3.2 创建zk客户端
3.3 创建子节点
3.4 获取子节点并开启监听变化
3.5 判断Znode是否存在
4.客户端向服务端写数据流程
4.1 直接写给leader
4.2 写给了follower
第5步:leader告诉接受client请求的follower,进群超过半数已经同步了数据,可以给client响应了
四、服务动态上下线监听案例(重点)
1.需求
某分布式系统中,主节点可以有多台,可以动态上下线,任意一台客户端都能感知到主节点服务器的上下线。
2.需求分析
3.具体实现
3.1 zk-server命令行创建根节点/server
3.2 zk-client的服务器节点连接注册到zk-server的/server目录下
3.3 zk-client的客服端连接zk-server,监听/server目录下节点的变化
4.测试
五.zk分布式锁案例(重点)
1.原生zk分布式锁案例
分布式锁:实现的是如何加锁和解锁;
用zk的临时顺序节点,后节点watch前一个节点路径(是否下线)
2.curator框架实现分布式锁案例(企业实战用这种)
六、企业面试真题(重点)
1.选举机制
半数机制:超过半数节点投票通过,即为选举成功;
(1)第一次启动选举规则:
投票过半数时,服务器id(sid)大的胜出
(2)非第一次启动选举规则:
第一位序:EPOCH大的直接胜出(leader任期)
第二位序:EPOCH相同时,事务ID(TID)大的直接胜出
第三位序:事务ID相同时,服务id(sid)大的胜出
2.生产环境集群安装多少zk节点合适
安装奇数台zk
生产经验:
- 10台服务器,3台zk
- 20台服务器,5台zk
- 100台服务器,11台zk
- 200台服务器,11台zk
zk服务器台数越多:好处,提高可靠性;坏处,提高通讯延迟
3.常用命令
ls、get、delete、stat、create