- zookeeper产生背景, 单体架构到分布式
- 每天的定时任务如何如何执行
- rpc的服务发现
- 并发请求的幂等
- 安装zk
- java环境
- 下载zk
wget https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz
- 解压
tar -zxvf apache-zookeeper-3.6.2-bin.tar.gz -C /usr/local/
cp zoo_sample.cfg zoo.cfg
复制配置文件
- 基本命令
- 创建节点
create /jamin [value]
- 修改节点
set /jamin "value"
- 获取节点值
get /jamin
- 删除节点
delete /jamin
删除所有子节点 deleteall /jamin
- 查看子节点
ls /jamin
查看当前节点下所有节点 ls -R /jamin
- 查看节点状态
ls -s /jamin
- zk节点介绍
- 节点类型
- 持久节点
create /jamin
- 持久序号节点
create -e /jamin/j
心跳检测
- 临时节点
create -s /jamin/jj
临时节点下不可拥有持久节点,客户端与服务端的会话
- 临时序号节点
create -s -e /jamin/jjj
- 节点状态
![](https://img-blog.csdnimg.cn/img_convert/87eb7723fc297a7c0b165299a3a13046.png)
1. cZxid 事务id,无论节点怎么变化都不会变更
2. ctime 创建时间
3. mZxid 节点修改值时变更
4. mtime 修改时间
5. pZxid,cversion 子节点增删变更
6. dataVersion 当前节点数据版本
7. aclVersion 权限版本
8. ephmeralOwner 通过它判断是否时临时节点 临时节点后跟当前会话id
9. dataLength 数据长度
10. numChildren 子节点数量
- 节点监听
ls -w /jamin
监听子节点的变化增删
get -w /jamin
监听子节点数据变化
stat -w /jamin
监听节点属性的变化
printwatches on|off
触发监听后是否打印监听事件
- 权限设置
- 认证模型
- world 开放模式
setAcl /jamin world:anyone:cdrwa
- ip ip模式限制客户端ip
setAcl /jamin ip:192.168.150.120:cdrwa
- auth 用户名密码认证模式
创建用户addauth digest jamin:123456``setAcl /jamin auth:jamin:123456:cdrwa
必须先创建用户后设置权限
- digest 密钥模式
生成密钥echo -n [用户名]:[密码] | openssl dgst -binary -sha1 | openssl base64
- 权限位
- c 创建子节点
- d 删除子节点
- r 读取节点数据及显示子节点列表
- w 设置节点数据
- a 设置节点权限
集群
- 实现功能
- 读写分离: 提高承载,为更多客户提供连接,保证性能
- 主从自动切换:提高容错,部分节点故障不会影响整个服务集群
- 实现
- data文件下创建1/2/3 文件夹 1/2/3文件夹下都有myid文件 内容为1/2/3
- 在conf下创建zoo1.conf/zoo2.conf/zoo3.conf
tickTime=2000
initLimit=10
syncLimit=5
dataDir=data/1
clientPort=2181
# 通信与选举的端口号
server.1=127.0.0.1:2881:3881
server.2=127.0.0.1:2882:3882
server.3=127.0.0.1:2883:3883
3. 启动`./bin/zkServer.sh start conf/zoo2.cfg`
4. 查看状态`./bin/zkServer.sh status conf/zoo2.cfg`
5. 集群角色: leader,follower,observer
服务端写入请求
- 简单理解:leader接受服务端些请求,并同步到各个子节点
- 中度理解:连接到follwer,该请求转发到leader,leader将请求事务以proposal形式分发给follower,follower收到proposal,根据先后顺序处理proposal,当leader针对某个proposal收到过半的ack后,发起事务提交,重新发起一个commit的proposal,follower收到commit的proposal,记录事务提交,并把数据更新到内存数据库,当写入成功,返回给client
- 深入理解:【分布式】Zookeeper请求处理
选举
- 选举触发
- 服务节点初始化启动
- 半数以上节点无法与leader建立连接
Zookeeper的选举机制