- 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
- 节点状态
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的选举机制