zk是分布式协调服务。架构角色,分为leader follower observer。follower参与选举。observer提供读操作。
特点:
1、高可用,主从架构,官方测试主节点挂了,200ms完成恢复,也就是主节点选举对外提供服务。
2、高并发,三个节点的主从结果可以支持10万左右的读。
3、保证顺序一致性:单主节点写入,保证客户端更新将按照发送顺序处理
4、原子性:更新成功或者失败,没有部分结果。
5、单系统映像:无论服务链接到哪个服务器,客户端都将看到相同访问视图。
6、可靠性:持久性。
7、及时性:系统的客户视图保证特定时间范围内是最新的(最终一致性)。
临时节点,天然可做分布式锁应用。session完成锁即是否。
用于:
1、分布式锁,基于临时节点功能。锁依托一个父节点且具备-s 代表父节点下可以有多把锁,次锁可以用于队列式或者事务的锁。
2、HA(高可用)选主功能。
3、发布与订阅功能。
安装步骤:
准备多台linux虚拟机
1、安装jdk,配置环境变量
2、下载 zookeeper https://zookeeper.apache.org/
3、tar xf zookeeper.*.tar.gz
4、mkdir /opt/soft
5、mv zookeeper /opt/soft
6、vi /etc/profile
配置环境变量:
export ZOOKEEPER_HOME=/opt/soft/zookeeper-3.4.6
export PATH=$PATH:$ZOOKEEPER_HOME/bin
7、cd zookeeper/conf
8、cp zoo.sem*.cfg zoo.cfg
9、vi zoo.cfg
dataDir=
server01=node01:2888:3888
10、mkdir -p /var/soft/zk
11、echo 1 > /var/soft/zk/myid
12、cd /opt && scp -r ./soft/ node02.pwd
13、node02~node04修改创建myid
14、启动验证,顺序1,2,3,4
15、zkServer.sh start-foreground
客户端链接zkCli.sh
help
create /node1
create -s /node2
要说zk,一致性算法需要先说Paxos算法。
Paxos是基于消息传递的一致性算法。Paxos被认为目前为止唯一的分布式一致性算法。其他算法都是对Paxos算法的改进或者简化。
Paxos总结:数据一致性,过半通过,两阶段提交。
ZAB协议:作用在可用状态有leader时。原子广播协议。
步骤:
1、客户端调用create /ooxx 创建节点
2、服务端主节点或者从节点接收到请求,如果是从节点转发至主节点。
3、主节点发起广播,进行日志纪录
4、从节点返回结果
5、主节点判断过半返回客户端结果。
leader服务器挂掉,选举过程。
发生场景:
1、第一次启动
2、集群重启,leade挂掉。
zk服务器节点会有两个id ① myid ② Zxid(事务id)
新leader被选举
某节点发起投票,都会触发准leader发起自己的投票
推选制,先比较Zxid,如果zxid相同,再比较myid。
分布式锁实现
zk实现分布式,需要解决的问题
1、争抢锁,同一时刻只有一个线程获取到锁。
2、获取锁的线程出问题,因为临时节点(session),伴随着节点的消失锁进而消失,不会存在死锁的问题。
3、获取锁的线程成功,如何释放锁。
4、释放锁,删除,其他线程如何知道。
4-1:主动轮询,心跳,存在问题,延迟,压力。
4-2:watch:解决延迟问题,弊端:压力。
4-3:sequence+watch:watch前一个,最小的获取锁。最小的释放锁,zk只有第二个发事件回调。
分布式锁