版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wx1528159409
目录
一、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选取访问数最少的服务器来响应,这样实现服务器的软负载均衡。