zookeeper学习笔记
Paxos算法:https://www.douban.com/note/208430424/
过半通过,两阶段提交
如何选举leader
详细过程见processon
watch
统一视图
分布式配置
watch来实现
代码实现
分布式锁
zk是通过session来控制分布式锁
zab是zk对于Paxos简化实现
Zookeeper Atomic Broadcast
zookeeper的原子广播协议
tickTime
initLimit
syncLimit
dataDir目录
在每个server的dataDir目录新建一个myid文件,里面放server的编号
分发
每个节点只能放1M数据,二进制安全
[xxoo]
cZxid = 0x200000002 <-- zookeeper顺序值,体现在这个id上,leader维护一个单调递增的序列 c:表示create, 00000002表示事务递增序列值,0x2:表示leader的纪元(32位),如果leader会革新换代,这里会增1
ctime = Wed May 20 03:20:54 CST 2020
mZxid = 0x200000006 <---修改id,由leader来维护
mtime = Wed May 20 03:26:31 CST 2020
pZxid = 0x200000004
cversion = 1
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0 <---临时持有者,持久化 如果-e可以创建临时节点,由session来控制
dataLength = 5
numChildren = 1
session也会迁移
注意观察这两个结果,其中的cZxid差了1,其实是有其他客户端连接,导致同步了一次session,消耗了一次事务id
[zk: localhost:2181(CONNECTED) 4] ls -s /oxxo
[]
cZxid = 0x200000011
ctime = Wed May 20 04:56:18 CST 2020
mZxid = 0x200000011
mtime = Wed May 20 04:56:18 CST 2020
pZxid = 0x200000011
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 2
numChildren = 0
[zk: localhost:2181(CONNECTED) 5] create /aaaa ""
Created /aaaa
[zk: localhost:2181(CONNECTED) 6] ls -s /aaaa
[]
cZxid = 0x200000013
ctime = Wed May 20 04:57:10 CST 2020
mZxid = 0x200000013
mtime = Wed May 20 04:57:10 CST 2020
pZxid = 0x200000013
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 0
create -s /abc/xx "dd" 这样创建节点可以规避分布式覆盖的问题【分布式下的统一的id】
统一配置管理---> 节点的1M数据
分组管理 --> path结构
统一命名 --> sequential
同步 --> 临时节点 【分布式锁】
zk实现分布式锁(带事务、队列模式的锁模型)
zk可以用于HA选主
本文来自博客园,作者:Grey Zeng,转载请注明原文链接:https://www.cnblogs.com/greyzeng/articles/14853347.html