Zookeeper--案例

案例一:服务器动态上下线监听案例
1 需求
某分布式系统中,主节点可以有多台,可以动态上下线,任意一台客户端都能实时感知
到主节点服务器的上下线。
2.流程图例
3 具体实现
(1)先在集群上创建/servers 节点
[zk: localhost:2181(CONNECTED) 10] create /servers "servers"
Created /servers
(2)在 Idea 中创建包名:com.atguigu.zkcase1
(3)服务器端向 Zookeeper 注册代码 

 

(3)客户端代码

 

 

 

4 测试
1)在 Linux 命令行上操作增加减少服务器
(1)启动 DistributeClient 客户端
(2)在 hadoop102 上 zk 的客户端/servers 目录上创建临时带序号节点
[zk: localhost:2181(CONNECTED) 1] create -e -s /servers/hadoop102 "hadoop102"
[zk: localhost:2181(CONNECTED) 2] create -e -s /servers/hadoop103 "hadoop103"
(3)观察 Idea 控制台变化
[hadoop102, hadoop103]
(4)执行删除操作
[zk: localhost:2181(CONNECTED) 8] delete /servers/hadoop1020000000000
(5)观察 Idea 控制台变化
[hadoop103]
2)在 Idea 上操作增加减少服务器
(1)启动 DistributeClient 客户端(如果已经启动过,不需要重启)
(2)启动 DistributeServer 服务
①点击 Edit Configurations…

②在弹出的窗口中(Program arguments)输入想启动的主机,例如,hadoop102

③回到 DistributeServer 的 main 方 法 , 右 键 , 在 弹 出 的 窗 口 中 点 击 Run “DistributeServer.main()” 

④观察 DistributeServer 控制台,提示 hadoop102 is working
⑤观察 DistributeClient 控制台,提示 hadoop102 已经上线
案例二、 ZooKeeper 分布式锁案例
什么叫做分布式锁呢?  比如说"进程 1"在使用该资源的时候,会先去获得锁,"进程 1"获得锁以后会对该资源保持独占,这样其他进程就无法访问该资源,"进程 1"用完该资源以后就将锁释放掉,让其
他进程来获得锁,那么通过这个锁机制,我们就能保证了分布式系统中多个进程能够有序的访问该临界资源。那么我们把这个分布式环境下的这个锁叫作分布式锁。

1 原生 Zookeeper 实现分布式锁案例
1)分布式锁实现 

 

 

 

 

2)分布式锁测试
(1)创建两个线程 

 

(2)观察控制台变化:
线程 1 获取锁
线程 1 释放锁
线程 2 获取锁
线程 2 释放锁
2 Curator 框架实现分布式锁案例
1)原生的 Java API 开发存在的问题
(1)会话连接是异步的,需要自己去处理。比如使用 CountDownLatch
(2)Watch 需要重复注册,不然就不能生效
(3)开发的复杂性还是比较高的
(4)不支持多节点删除和创建。需要自己去递归
2)Curator 是一个专门解决分布式锁的框架,解决了原生 JavaAPI 开发分布式遇到的问题。
详情请查看官方文档:https://curator.apache.org/index.html
3)Curator 案例实操
(1)添加依赖
(2)代码实现 

 

 

 

 

(2)观察控制台变化:
线程 1 获取锁
线程 1 再次获取锁
线程 1 释放锁
线程 1 再次释放锁
线程 2 获取锁
线程 2 再次获取锁
线程 2 释放锁
线程 2 再次释放锁
重点:企业面试真题(面试重点)
1 选举机制:半数机制,超过半数的投票通过,即通过。
(1)第一次启动选举规则:投票过半数时,服务器 id 大的胜出
(2)第二次启动选举规则:
       ①EPOCH 大的直接胜出
       ②EPOCH 相同,事务 id 大的胜出
       ③事务 id 相同,服务器 id 大的胜出
2 生产集群安装多少 zk 合适?
安装奇数台。
生产经验:
⚫10 台服务器:3 台 zk;
⚫20 台服务器:5 台 zk;
⚫100 台服务器:11 台 zk;
⚫200 台服务器:11 台 zk
服务器台数多:好处,提高可靠性;坏处:提高通信延时
3 常用命令
ls、get、create、delete

posted on 2021-09-07 10:31  桃之夭夭*  阅读(75)  评论(0)    收藏  举报

导航