¶zookeeper安装与应用
¶zookeeper介绍
Apache ZooKeeper is an effort to develop and maintain an open-source server which enables highly reliable distributed coordination.
- zookeeper是Apache下属的一个顶级开源项目官网,是一个分布式下高可用的开源服务。
¶zookeeper功能
ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.
- 在apache项目中,许多项目是以动物命名。zookeeper,动物管理员,顾名思义,管理动物园中的各种动物(各种开源项目)。按其官网所描述,zookeeper是一个集中式服务,功能包括集中管理配置信息,名字服务,分布式锁以及集群管理。zookeeper主要用于分布式项目中,作为服务注册中心。
-
集中管理配置信息
如果在单机环境下,配置量较小,我们可以直接使用配置文件。但是在分布式环境下,多台服务器共同运行,有的服务器需要相同的配置,还需要动态更改,如果还是使用配置文件,我们修改配置文件就需要一台台的修改,有时还会修改错,这样即耗时又耗力。
还有一种选择,将配置信息保存到数据库(创建配置表),所有需要配置的服务都去数据库读取配置。但是使用这种方式在分布式环境下并不是最优选择,因为分布式下所有服务都依赖这个数据库,数据库并不可靠(分布式下的并发问题)。
在分布式下,zookeeper是一个比较好的选择,采用集中式配置服务来管理配置信息。zookeeper具有可复制性,一般使用集群来提供配置服务,使其具有高可靠性,并且还要使用一致性协议服务保持分布式下的一致性。
-
名字服务
zookeeper提供名字服务,它有点像linux标准文件系统,以"/"为根目录,其下的为子目录项,这些目录项被称为znode(目录节点),它比文件系统的目录多一个功能,可以存储数据。
有四种znode
中文名称 | 英文名称 | 功能 |
---|---|---|
持久化目录节点 | PERSISTENT | 断开连接后节点仍然存在 |
持久化顺序编号目录节点 | PERSISTENT_SEQUENTIAL | 断开连接后节点仍然存在但重新顺序编号 |
临时目录节点 | EPHEMERAL | 节点由客户端创建,断开连接后节点删除 |
临时顺序编号目录节点 | EPHEMERAL_SEQUENTIAL | 断开连接后节点删除但重新顺序编号 |
-
分布式锁
zookeeper是一个分布式协调服务,可以通过分布式锁协调多个分布式服务。比如,一个集群中,同一服务被复制到多台服务器上提高可靠性。但是做一件事只能一个服务进行,这就需要分布式锁,同一时刻只能一个服务工作,直到出错释放。这种设计被称为leader选举(leader election)。
-
集群管理
在多台服务器组成的集群中,需要监控每台服务器状态,集群可以主动感知节点的死亡和节点的加入。在集群中,每个服务器需要在zk服务器创建临时节点,当服务器挂掉,临时节点会被删除,并触发监视器,通知其他服务器。