首先我们一起来学习什么是Zookeeper,Zookeeper是Google的Chubby一个开源的实现,是Hadoop的分布式协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。
在hadoop2.0中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。
hadoop2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode 这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为Active状态。
所以通过上面的描述,明白为什么Hadoop要用到Zookeeper了,当Active状态的NameNode宕机后,Zookeeper可以自动帮我们实现把备份NameNode切换为Active状态。当然,Zookeeper的功能远不止这一个,它还有数据同步、分布式锁、负载均衡等等强大的功能。下面我们通过图例来说一下Zookeeper在数据同步方面的作用,Zookeeper集群的搭建有个特点就是设备的数量必须是奇数台,像下图就有5台设备作为Zookeeper的集群,之所以搞这么多台机器组成集群来对外提供服务是考虑到了数据的高可靠性,即一台设备宕机后要能够迅速被其它机器所取代,从而提供持续稳定的服务。在奇数台设备当中只有一台设备是“Leader”即领导身份,其它设备都是"Follower"即从属者的身份。Zookeeper集群只要有一半以上的机器正常运行就可以正常提供服务,也就是说,集群允许宕机的数量不能达到机器总量的一半,比如我们拿一个最小的Zookeeper集群来说,从高可靠性还有奇数台两个方面考虑,我们知道集群最少的机器数量是3台,那么这3台组成的集群最大允许的宕机数量是1台,同理,5台组成的集群最大允许的宕机数量是2台,7台组成的集群最大允许的宕机数量是3台等等。我们来说一下数据同步是怎么回事,我们看下图发现有很多Client连向Server,假如第一台Client修改了第一台Server上的某个变量的值,作为Leader的Server能够监测到哪个Server的哪个变量发生了变化,这时Zookeeper会给这个变量加上锁,如果有Client要获取这个变量的值,它就处于等待状态,等这个变量在其它Server之间进行数据的同步完成之后才会返回这个变量的值。
image接下来说一下为什么要用到Zookeeper,下图第一条所说的意思,我举个例子,比如我们有个好几百台设备组成的集群,现在我们要更改一下配置,那么我们要一台一台的去改吗?答案显然不是的,因为那样做太浪费时间,我们可以修改一台设备的配置,然后利用Zookeeper的数据同步功能自动实现在所有其他设备上的同步,这样是不是非常好啊。下图所说的第二条、第三条的意思是,在Zookeeper出现之前公司内部开发程序时往往由于不通用而导致大量的人力物力财力的浪费,而Zookeeper却以高通用性和高可靠性很好的解决了这一问题,使程序的通用性大大提高。
imageZookeeper能帮我们做什么?如下图所示。
image那么Zookeeper的特性是什么呢?如下图所示。之所以说Zookeeper是简单的,是因为我们几乎不用编程,我们只要启动它的服务就可以了,当然它也提供了一些java接口来供我们调用的。说它富有表现力是说它具有非常丰富且强大的功能。高可用性是指Apache在设计该产品之初便考虑了非常多的情况,可以适用于非常多的情况。采用松耦合的交互方式是指采用面向接口编程从而最大限度的降低模块与模块之间的关联。Zookeeper是一个资源库是指它提供服务,你可以让它为你服务,当然也可以不用它,用于不用,它都在那儿。
image
网友评论