Zookeeper

大致来说,zookeeper 的使用场景如下:

  • 分布式协调
  • 分布式锁
  • 元数据/配置信息管理
  • HA 高可用性
  • 发布/订阅
  • 负载均衡
  • Master 选举

分布式协调

这个其实是 zookeeper 很经典的一个用法,简单来说,就好比,你 A 系统发送个请求到 mq,然后 B 系统消息消费之后处理了。那 A 系统如何知道 B 系统的处理结果?用 zookeeper 就可以实现分布式系统之间的协调工作。A 系统发送请求之后可以在 zookeeper 上对某个节点的值注册个监听器,一旦 B 系统处理完了就修改 zookeeper 那个节点的值,A 系统立马就可以收到通知,完美解决。

2.2 分布式锁

举个栗子。对某一个数据连续发出两个修改操作,两台机器同时收到了请求,但是只能一台机器先执行完另外一个机器再执行。那么此时就可以使用 zookeeper 分布式锁,一个机器接收到了请求之后先获取 zookeeper 上的一把分布式锁,就是可以去创建一个 znode,接着执行操作;然后另外一个机器也尝试去创建那个 znode,结果发现自己创建不了,因为被别人创建了,那只能等着,等第一个机器执行完了自己再执行。

 

2.3 元数据/配置信息管理

zookeeper 可以用作很多系统的配置信息的管理,比如 kafka、storm 等等很多分布式系统都会选用 zookeeper 来做一些元数据、配置信息的管理,包括 dubbo 注册中心不也支持 zookeeper 么?

2.4 HA 高可用性

这个应该是很常见的,比如 hadoop、hdfs、yarn 等很多大数据系统,都选择基于 zookeeper 来开发 HA 高可用机制,就是一个重要进程一般会做主备两个,主进程挂了立马通过 zookeeper 感知到切换到备用进程。

Zookeeer选举过程

 常用命令: 

ls            #查看所有节点

create  /config  0    #创建节点

 create  -e  /server/sl  192 .1 68.0 .2  #创建临时节点,一旦用户会话结束,则节点自动删除

 create  -s  /task/t  data    #创建带有序号的节点

 get  /task   # 获取节点数据

 delete  /task/t00000000 #删除节点

get  /config/db . username  watch   # get和ls可以增加watch操作, 当有set  /config/db. username  xiandafu set命令的时候则get窗口会提示信息

分布式锁:

原文地址:https://www.cnblogs.com/Baronboy/p/12917122.html