zokeeper(1):概念与功能介绍
1. zookeeper是一个开源的分布式应用协调框架,为分布式系统提供一致性服务。其一致性是通过基于Paxos算法的ZAB协议完成的。
2. zookeeper主要功能:配置维护、域名服务、分布式同步、集群管理。
配置维护:
分布式系统中,很多服务都是部署在集群中的,即多台服务器中部署着完全相同的应用,起着完全相同的作用。当然,集群中的这些服务器的配置文件是完全相同的。
若集群中服务器的配置文件需要进行修改,那么我们就需要逐台修改这些服务器中的配置文件。如果我们集群服务器比较少,那么这些修改还不是太麻烦,但如果集群服务器特别多,比如某些大型互联网公司的Hadoop集群有数千台服务器,那么纯手工的更改这些配置文件几乎就是一件不可能完成的任务。即使使用大量人力进行修改可行,但过多的人员参与,出错的概率大大提升,对于集群的形成的危险是很大的。
这时候Zookeeper就可以派上用场了。其对于配置文件的维护采用的是“发布/订阅模型”。发布者将修改好的集群的配置文件发布到Zookeeper服务器的文件系统中,那么订阅者马上就可以接收到通知,并主动去同步Zookeeper里的配置文件。Zookeeper具有同步操作的原子性,确保每个集群服务器的配置文件都能被正确的更新。
域名服务:
在分布式应用中,一个项目包含多个工程,而这些工程中,有些工程是专门为其它工程提供服务的。一个项目中可能会存在多种提供不同服务的工程,而一种服务又可能存在多个提供者(服务器)。所以,用于消费这些服务的客户端工程若要消费这些服务,就变的异常的复杂了。
此时,Zookeeper就可以上场了。为每个服务起个名称,将这些服务的名称与提供这些服务的主机地址注册到Zookeeper中,形成一个服务映射表。服务消费者只需要通过服务名称即可享受到服务,而无需了解服务具体的提供者是谁。服务的减少、添加、变更,只需修改Zookeeper中的服务映射表即可。
阿里的Dubbo就是使用Zookeeper作为服务域名服务器的。
分布式同步
在分布式系统中,很多运算(对请求的处理)过程是由分布式机群中的若干服务器共同计算完成的,并且它们之间的运算还具有逻辑上的先后顺序。如何保证这些服务器运行期间的同步性呢?
使用Zookeeper可以协调这些服务器间运算的过程。让这些服务器都同时监听Zookeeper上的同一个znode(Zookeeper文件系统中的一个数据存储节点),一旦其中一个服务器Update了znode,那么另一个相应服务器能够收到通知,并作出相应处理。
集群管理
集群管理中最麻烦的就是节点故障管理。Zookeeper可以让集群选出一个健康的节点作为Master,Master随时监控着当前集群中的每个节点的健康状况,一旦某个节点发生故障,Master会把这个情况立即通知给集群中的其它节点,使其它节点对于任务的分配做出相应调整。Zookeeper不仅可以发现故障,也会对故障进行甄别,如果该故障可以修复,Zookeeper可以自动修复,若不能修复则会告诉系统管理员错误的原因让管理员迅速定位问题。
但这里也有个问题:Master故障了,那怎么办?Zookeeper内部有一个“选举算法”,当Master故障出现时,Zookeeper能马上选出新的Master对集群进行管理。