ZooKeeper 是一个分布式协调服务
Zookeeper数据保存在内存中,可实现高吞吐量和低延迟
1 Zookeeper 基础学习
1.1 Zookeeper 基本概念
Zookeeper 是一个目录树结构,由 znode 组成。** znode 最大存储 1M 数据 **
节点分类
持久节点
临时节点(session 控制生命周期)
序列节点(分为临时序列节点和持久序列节点)
znode 信息
cZxid = 0x200000003 创建节点的Id
mZxid = 0x200000003 修改节点时更新
pZxid = 0x200000004 修改节点的子节点时更新
ephemeralOwner = 0x0 记录临时节点属于哪个session,0x0表示持久节点
1.2 Zookeeper 特性
- 顺序一致性 — 客户端的更新按发送顺序应用
- 原子性 — 更新成功或者失败,没有部分结果
- 统一视图 — 无论服务连接到哪个数据库,客户端都将看到相同的数据视图
- 可靠性 — 一旦应用了更新,它将一直持续到客户端覆盖更新为止。
- 及时性 — 系统的客户视图在特定时间范围内是最新的
1.3 Zookeeper 集群的工作状态
- 可用状态
- 不可用状态
不可用状态恢复到可用状态 — 越快越好(200ms恢复)
1.4 Zookeeper 提供服务
- 统一配置管理 -> 1M 数据
- 分组管理 -> path 结构
- 统一命名 -> 顺序节点
- 同步 -> 临时节点
- 分布式锁 —> 临时节点
- HA 选择 -> 顺序节点
1.5 Zookeeper 集群安装
准备工作
- 准备4台机器 192.168.64.135,192.168.64.136,192.168.64.137,192.168.64.138
- 安装jdk 环境
- 防火墙中打开需要端口,测试环境可关闭防火墙
** 下载安装包并解压到指定文件夹**
cd /home/soft/zk/
wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1-bin.tar.gz
tar xf apache-zookeeper-3.6.1-bin.tar.gz
mv apache-zookeeper-3.6.1-bin zookeeper3.6.1
修改配置文件
cd /home/soft/zk/zookeeper3.6.1/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
修改 dataDir=/home/soft/zk/data
添加集群配置server.1=192.168.64.135:2888:3888
server.2=192.168.64.136:2888:3888
server.3=192.168.64.137:2888:3888
server.4=192.168.64.138:2888:3888tickTime=2000
leader 和 follower 之间心跳时间 2s
initLimit=10
follower 和leader 建立链接的时候,leader容许等待 10 * 2000 ,20s
syncLimit=5
leader 和 follower 数据同步,5 * 2000 10s 之后flower还不回复,leader认为 follower 有问题
2888:leader 接受write请求
3888:选主投票用
创建myid
mkdir -p /home/soft/zk/data
vi myid
在 192.168.64.135 机器上输入 1
在 192.168.64.136 机器上输入 2
在 192.168.64.137 机器上输入 3
在 192.168.64.138 机器上输入 4
添加环境变量
vi /etc/profile
source /etc/profile
配置文件中添加
export ZOOKEEPER_HOME=/home/soft/zk/zookeeper3.6.1
export PATH=ZOOKEEPER_HOME/bin
启动集群
使用 zkServer.sh start / zkServer.sh start-foreground
** 注意 **
- 以上步骤分别在4台机器上执行
- 或者可以先配置一台机器,再分别拷贝到其他三台机器
scp -r ./zookeeper3.6.1/ 192.168.64.136:
pwd
2 Zookeeper 原理学习
zookeeper是一个分布式协调服务,保证了扩展性,可靠性,时序性,快速。
2.1 扩展性
- 框架架构
角色: leader,follower,observer
- 读写分离
observer 方法查询能力
只有follower 才能选举
2.2 可靠性
- 快速恢复leader
- 数据可用,可靠,一致性
分布式:ZAB — 作用在可用状态,leader存在时
2.3 时序性
ZAB 协议发送消息使用队列,FIFO,保证顺序行
2.4 ZAB — 原子广播协议
Zookeeper 数据一致性协议。
2.5 Zookeeper 崩溃恢复
Leader 选举
- 先比较 zxid
- 如果 zxid 相等,再比较myid
3888 造成两两通信
只要任何人投票,都会促发准 leader 发起自己的投票
Zookeeper 选举是退选制,如果 zxid 相同,再比较 myid
2.6 Zookeeper Watch 机制watcher
watcher事件只监听一次
3 Zookeeper 应用
3.1 分布式配置
使用 watch 机制监听配置节点,修改后促发监听
3.2 分布式锁
- 多个服务间争抢锁,只有一个人才能获取锁
- 获得锁的人,临时节点(session)
- 获取锁的人成功了,释放锁
- 锁被释放、删除,别人怎么知道
主动轮询,心跳
弊端:延时、压力
Watch 解决延时问题
弊端:压力(多个服务重新争抢锁)
sequence + watch
每个节点都 watch 前一个节点
最小的节点获取锁
最小的释放锁,成本:zk 只需要给第二个节点发事件回调