1、什么是Zookeeper
zookeeper是一种分布式协调服务,主要用于大型主机组或者集群管理,其开放简单的读写接口给用户调用使用,内部则保持了分布式系统数据的一致性和可靠性,这大大帮助了开发人员提高开发效率,只需要关心业务逻辑就可以了,而不需要在关心分布式特性和问题。其主要有以下几大服务组成。
它是谷歌的Chubby的一个开源实现,它是集群的管理者,监视管理集群中每个节点的状态和动作,并根据节点的反馈信息作对对应的操作。提供用户简单易用的接口给用户。
1、命名服务:按名称标识集群中的节点,类似于DNS一样,但仅限于节点管理。
2、配置管理:新加入的节点进行系统配置和信息管理。
3、集群管理:实时在集群中管理节点的状态,是否加入/离开
4、选举算法:Zookeeper需要推选出一个leader节点,用以和外界进行通信读写。推举算法可以轻松按照一定规则推举出leader节点。
5、锁和同步机制:在进行集群内部修改数据时,要注意锁定该数据。
6、高度可靠的数据注册表:即使多个节点异常关闭,仍然可以获取到想要获取的数据。
2、Zookeeper的优点和好处
首先Zookeeper是一个分布式服务,分布式可以组建大型集群,快速调用大规模资源进行运算和存储,效率更高效。此外分布式应用还具有可靠性、可拓展性、透明性的优点,当然其内部的数据一致性、死锁竞争等也是需要考虑如何解决的关键所在。
Zookeeper的主要优势在于:
1、简单的分布式协调管理过程;
2、同步机制;
3、有序的消息队列;
4、支持序列化功能;
5、可靠性和原子性,数据只会完全失败或者完成写入成功;
3、Zookeeper的功能
Zookeeper主要提供文件系统和通知观察机制两种功能。
3.1文件系统
Zookeeper提供了分布式文件系统,其类似于树形的层次命名空间。每个节点被称作是znode。每个znode都是有一个特定的名称标识,且使用了路径(/)分隔开,根目录为”/”,其中有两个逻辑命名空间,分别是conifg和workers。config主要用于集中式配置管理,而workers则用于业务的命名使用。
其中config中一个znode可以对应最大1MB的存储数据,用于存储同步数据,并描述znode信息的元数据。这就是Zookeeper的数据模型。
znode分为4种,分别是持久化节点、顺序节点、临时节点、临时顺序节点。
1、持久化节点:故名思议,这个节点是持久化的,即使客户端与zookeeper断开了链接,其zookeeper上该节点仍然存在。
2、顺序节点:这个节点可以给节点进行编号,也是永久存在的,编号的好处在于,即使此时多个服务器进行节点创建,但是创建出来的节点是名字后面的编号是递增的。这其实就是可以用来进行分布式系统的锁的保证。以每次最小编号的节点创建者-那个服务器上获取了资源锁。
3、临时节点:一旦客户端与zookeeper断开后,该节点就会消失。
4、临时顺序节点:按照顺序生成顺序节点,断开后节点消失。
3.2、通知观察机制
客户端可以注册监听对应的目录节点,一旦其中发送了变化(数据改变、删除、节点变动),zookeeper就会通知客户端,其发生了变化。进行下一步业务操作。
此外Zookeeper的配置管理,可以很方便的进行大规模集群的配置管理,其可以将配置放置在zookeeper上,再对其进行监听,一旦其发生了变化,直接通知到集群中的所有其他节点,同步进行配置修改。
4、Zookeeper的推荐原理
Zookeeper其最为人津津乐道的是它的推举算法,一旦其master/eader节点挂了之后,zookeeper集群可以立马进行推举动作,只要过半的节点还在响应,就可以立即再次推举出一个新的master/leader节点,迅速恢复业务使用。
其原理可以有:
所有机器都在一个目录下创建临时的目录节点,此时监听父目录节点。一点某个机器挂了,就会断开连接,所有其他的机器都会接收到消息,某个节点挂了。
5、分布式锁的实现机制
1、多个机器同时竞争一个资源时,在一个约定的目录下创建一个临时目录节点,此时编号最小的那个机器获得资源;
2、多个机器在一个目录下创建同一个名字的节点目录,例如叫lock_node,因为zookeeper必须要求所有机器维护同一份目录,所以绝对不会出现两个lock_node。因此最先创建出来lock_node的那个机器就是锁的拥有者。