文章目录
《4.4.1 ZooKeeper入门》
-
12 10 zookeeper的应用案例:
-
13 15 zk的同类产品:
consul etcd(比zk轻量级) Doozer -
18分 单机版安装参考以及相关官方文档查阅处:
启动服务端:bin/zkServer.sh start
用客户端连接:bin/zkCli.sh -server 127.0.0.1:2181
-
24 45+ cli操作指南:
-
30 57+ Java api
-
36 35 第三方客户端:zkClient, Curator
《4.4.2 ZooKeeper核心概念》
-
session:
-
数据模型:
-
- 6 5+ znode命名规范
-
- 8分 znode节点类型:
- 8分 znode节点类型:
-
- 14 5 znode数据构成:
- 14 5 znode数据构成:
-
- 23 40 acl
-
- 27 50 zookeeper中的时间:
- 27 50 zookeeper中的时间:
-
32 55+ watch监听机制
-
- 51 25 ZkClient中的订阅方法,可以持续监听
56 35+ zk的特性:
《4.4.3 ZooKeeper典型应用场景》
-
16分 命名服务:
-
16 50 master选举:
方法1:争抢创建临时节点master,只一个成功,所有的都watch
方法2:最小节点方式:由servers节点的临时顺序子节点的顺序决定 -
30 42+ 分布式队列:
-
34 55+ 分布式锁:
《4.4.4 ZooKeeper集群》
- 参考视频与https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_zkMultiServerSetup,我在一台机器上部署了三个zk来构成一个集群,具体部署如下:
- conf/zoo1.cfg如下。zoo2.cfg,zoo3.cfg类似
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/lib/zk1
clientPort=2181
server.1=localhost:2881:3881
server.2=localhost:2882:3882
server.3=localhost:2883:3883
-
/var/lib/zk1下创建myid文件,内容为1。2与3类似。如果zk文件是用zk用户创建的,而此文件夹属于root,则还应进行一系列改用户和权限的操作:
sudo chown -R zk:zk /var/lib/zk1
chmod -R 775 /var/lib/zk1 -
逐个启动:
java -cp zookeeper-3.4.10.jar:lib/*:conf org.apache.zookeeper.server.quorum.QuorumPeerMain conf/zoo1.cfg
-
22 43 监控命令
-
26分+ ZAB协议:
zk进行leader选举时不可用
《4.4.5 详解分布式一致性协议》
-
回滚需要undo日志,提交需要redo日志
-
15分 两阶段提交(2PC)如下图。我:从协议的步骤看,2PC类似于ZAB协议,其中的协调者类似于ZAB协议中的leader,不是的是ZAB要求半数以上,而2PC要求全部,最根本的不同是2PC是一致性算法,ZAB应该如后文的Paxos,是共识算法。
-
30 40+ 3PC :
3PC应用的难点在于超时时长的设置,市面上很少有3PC的应用 -
46分+ Paxos。维基百科:需要注意的是,Paxos常被误称为“一致性算法”。但是“一致性(consistency)”和“共识(consensus)”并不是同一个概念。Paxos是一个共识(consensus)算法。
leader的问题在于leader负载高,如果leader单点故障,整个集群不可用,需要通过重新选举leader来恢复可用。
- 100 45 ZAB,Raft均脱胎于Paxos
《4.5.2 zookeeper分布式锁实现》
- 23 7 为什么Reentrantlock没有惊群效应,因为AQS,只有排队中等得最久的线程,与此时新申请锁的线程来竞争(非公平锁)。所以利用zk实现分布式锁的第二种方式,即利用临时顺序节点,其实是利用了类似的思路:队列。