ZooKeeper(ZAB原子广播协议)
2021-03-11 17:41:43 3 举报
AI智能生成
ZooKeeper(ZAB原子广播协议)
作者其他创作
大纲/内容
核心
文件系统的数据结构
采用树状结构
/dubbo
/service
/provider
ip+port
/consumer
事件监听/通知机制
客户端会对某个节点建立一个 watcher 事件,当该节点发生变化时,这些客户端
会收到 zk 的通知,然后客户端可以根据节点变化来做出业务上的改变等
会收到 zk 的通知,然后客户端可以根据节点变化来做出业务上的改变等
ZAB原子广播协议
(fast paxos算法)
(fast paxos算法)
恢复模式(选主)
leader选举
启动选举
运行时选举
广播模式(同步)
写数据流程
client 向 zk 集群的 server1 发送了一个写请求
如果 server1 不是 leader 需要把写请求转发给 leader
leader 将写请求广播给各个 server,写成功后会通知leader
当 leader 收到过半的 server 写成功了就会通知 client 写操作完成
如果 server1 不是 leader 需要把写请求转发给 leader
leader 将写请求广播给各个 server,写成功后会通知leader
当 leader 收到过半的 server 写成功了就会通知 client 写操作完成
过半机制
保证一半以上的server同意这个proposal才会成功
保证了Zookeeper集群的数据一致性
保证了Zookeeper集群的数据一致性
集群中存在的问题
多台机器跑定时任务
问题产生
系统中会存在定时任务,当项目变成集群的时候,每台机器上都会有定时任务
这个定时任务会在多台机器上运行,会造成资源浪费和数据不一致的问题
解决方案:Master选举
在zookeeper中特定节点下创建临时无序节点,只有一台机器能创建成功
其他没有创建成功的机器,监听该临时节点的变化
集群间并发访问冲突
zookeeper实现分布式锁 👉
集群
集群角色
Leader:负责进行投票决议,处理读写请求,更新状态
Follower:参与投票,处理读请求,转发写请求给leader
Observer:不参与投票,其他功能与follower相同
动态扩展zookeeper集群又不会降低写性能,
提高读取速度(写请求需要满足过半机制)
提高读取速度(写请求需要满足过半机制)
搭建集群
zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/temp/dataDir1
clientPort=2181
server.1=10.211.55.4:2888:3888
server.2=10.211.55.5:2888:3888
server.3=10.211.55.6:2888:3888
initLimit=10
syncLimit=5
dataDir=/usr/local/temp/dataDir1
clientPort=2181
server.1=10.211.55.4:2888:3888
server.2=10.211.55.5:2888:3888
server.3=10.211.55.6:2888:3888
高版本zk启动报错:FAILED TO START
解决
# 禁用 AdminServer 服务
admin.enableServer=false
或
# 修改端口 admin port
admin.serverPort=9000
admin.serverPort=9000
创建myid
echo 1 > dataDir1/myid
echo 2 > dataDir2/myid
echo 3 > dataDir3/myid
echo 2 > dataDir2/myid
echo 3 > dataDir3/myid
查看状态
nc 10.211.55.4 2181
stat
echo stat | nc 127.0.0.1 2181
sh zkServer.sh status
常见面试题
zk为什么要有主节点?
在分布式环境中,有些业务逻辑只需要集群中的某一台机器进行执行,
其他的机器可以共享这个结果,这样可以大大减少重复计算,提高性能
其他的机器可以共享这个结果,这样可以大大减少重复计算,提高性能
zk集群为什么是奇数台?
防止由脑裂造成的集群不可用
容灾能力相同的情况下,奇数更节省资源
如何保证事务的顺序一致性?
采用了全局递增的事务ID(zxid)来标识
应用场景有哪些?
注册中心、命名服务、分布式协调通知、分布式锁、分布式队列、高可用集群
zookeeper服务宕机对dubbo服务有没有影响?
没有影响,本地有缓存列表
0 条评论
下一页