图文讲解Zookeeper概念、工作机制、特点、数据结构和应用场景

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wx1528159409

 

目录

一、Zookeeper是什么

二、Zookeeper工作机制

三、Zookeeper的特点

四、Zookeeper的数据结构

五、Zookeeper应用场景

(1)统一命名服务

(2)统一配置管理

(3)统一集群管理

(4)服务器动态上下线

(5)软负载均衡


一、Zookeeper是什么

·   ZooKeeper是一个开源的、分布式的,为分布式应用提供协调服务的Apache项目。

(1)Zookeeper本身是一个分布式框架程序(只要有半数以上节点存活,通过选举机制,zk就能正常工作);

(2)Zookeeper是为别的Apache家族分布式应用(Pig、Hadoop、Hive等)提供协调服务的。

可以理解为Zookeeper根JDK.tar、hadoop.tar一样都是一个安装包,安装在服务器上,提供协调服务用的。

 

二、Zookeeper工作机制

Zookeeper=文件系统+通知机制

Zookeeper负责存储和管理数据(只有1MB大小),然后接受观察者的注册,一旦数据状态发生变化,Zookeeper就会通知那些已经在Zookeeper上注册的观察者,让观察者做出相应的反应,从而实现集群中类似Master/Slave管理模式。

下面用服务器上下线的案例来说明:

(1)三台服务器、三个客户端,Zookeeper将他们分隔成两部分,通过Zookeeper来联系;

(2)三台服务器将服务器信息写在Zookeeper集群的文件系统中;

(3)三个客户端在Zookeeper集群中注册,实现对服务器的监听;

(4)当服务器2挂掉,在Zookeeper集群的文件系统中写入的信息会自动删除;

(5)Zookeeper通知机制会告诉已经在Zookeeper中注册的客户端,服务器2已经挂掉了;

(6)客户端通过接口回调,获取更新后的Zookeeper集群文件系统信息;

(7)客户端下次访问服务器,就不会再去访问已经挂掉的服务器2了。

说白了就是,服务器的信息写在Zookeeper中,客户端在Zookeeper中注册,并监听(Watch),当Zookeeper中信息改变时,会通知客户端并把最新的信息更新到客户端。

 

三、Zookeeper的特点

五台Zookeeper共同构成一个Zookeeper Service集群,8个客户端可以访问Zookeeper集群。

(1)一个Leader,多个Follower,共同构成Zookeeper集群;

A. Leader负责进行投票的发起和决议,分布式读写,更新请求转发;

B. Follower负责接收客户端请求并向客户端返回结果,在选举Leader过程中参与投票(选举机制);

(2)集群中只要有半数以上节点存活,Zookeeper集群就能正常服务;

eg:4台服务器和3台服务器,都是挂2台后,Zookeeper集群才不能正常服务,正常服务情况下,奇数台服务器的数量更少,效率利用率更高,所以Zookeeper集群部署服务器一般都是奇数台

(3)全局数据一致,每个server保存一份相同的数据副本,client无论连接哪个server,数据都是一致的;

(4)对来自同一个client的更新请求,server按照请求发送顺序,依次执行;

(5)数据更新原子性:一次数据更新,要么成功,要么失败;

(6)实时性:因为每个server都有相同的数据副本,所以在一定时间范围内,不同的client都能读到最新的数据。

 

四、Zookeeper的数据结构

(1)Zookeeper的数据结构与Unix文件系统类似,都是树形结构;

(2)每个节点称为一个ZNode,每个ZNode默认能够存储1MB的数据(只存储最核心的配置信息);

(3)每个节点都是绝对路径,不会重名,所以每个ZNode都可以通过其路径唯一标识;

(4)客户端应用可以在节点上设置监视器;

区别:Unix只有文件夹节点才有子节点,Zookeeper中每个ZNode都可以有子节点。

 

五、Zookeeper应用场景

(1)统一命名服务

在分布式环境中,经常需要对应用/服务进行统一命名,这样集群子项目之间的调用不会很复杂,出现问题知道调用的是哪个服务信息。

在集群中,一个相同的服务可以由有多个server来提供(因为不同的server都保存相同的数据副本,数据一致性),这些server启动时,其相关信息(包括服务接口,地址,端口等)都会记录到Zookeeper中,当client需要该服务时,从Zookeeper中拿到该服务所有server的信息目录,再根据负债均衡机制从中选取一个server提供服务。

(2)统一配置管理

分布式环境下,多个项目共用很多配置文件,如果这些配置文件需要修改,那修改后就得复制到所有项目中;加上很多项目已经上线,就得把已上线的项目的配置文件挨个修改,然后重启服务。

Zookeeper可以把公用的配置文件写入一个ZNode,然后每个客户端应用程序对该ZNode节点进行监听,一旦ZNode中数据被修改,Zookeeper将会通知每一个客户端应用程序,然后从Zookeeper中获取最新的配置信息;

这样可以实现各个客户端应用程序公有配置文件的修改和同步。

(3)统一集群管理

与统一配置管理类似,典型应用:HBase中Master状态监控和选举。

(4)服务器动态上下线

服务器把其登录状态写到Zookeeper集群中,客户端在Zookeeper中注册并监听,服务器下线后Zookeeper集群中的信息改变,通过通知机制同步给客户端,这样客户端不会再访问已下线的服务器。

(5)软负载均衡

一个Zookeeper集群实现同一个注册登录服务,有多台服务器,每次客户端访问时,Zookeeper选取访问数最少的服务器来响应,这样实现服务器的软负载均衡。

 

 

 

 

 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值